ETH Price: $3,266.44 (+4.59%)
Gas: 2 Gwei

Token

Get The Fuck Out (GTFO)
 

Overview

Max Total Supply

696,969,696,969 GTFO

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
SSAX: Deployer
Balance
31,634.402358125445933794 GTFO

Value
$0.00
0xc6ef94ce919443e034f004f7f6e552377ad07cd5
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:
GTFO

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-19
*/

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

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

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

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

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

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

    bool private swapping;

    address private marketingWallet;
    address private devWallet;
    
    uint256 public swapTokensAtAmount;

    bool public swapEnabled = true;
    

    uint256 private buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 private buyDevFee;
    uint256 public buyBurnFee;
    
    uint256 private sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 private sellDevFee;
    uint256 public sellBurnFee;
    
    uint256 private tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 private tokensForDev;
    uint256 public tokensForBurn;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);

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

    constructor() ERC20("Get The Fuck Out", "GTFO") {

        address newOwner = address(msg.sender);
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D );
        
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;
        uint256 _buyBurnFee = 1;

        
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 4;
        uint256 _sellBurnFee = 1;
        
        uint256 totalSupply = 696969696969 * 10**18;
        
        swapTokensAtAmount = 6969 *10**18;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyBurnFee = _buyBurnFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellBurnFee = _sellBurnFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        
    	marketingWallet = address(0x4e31BC635eCC86ca18bfd5DF107350f40bAfE5F9); // set as marketing wallet
    	devWallet = address(0x4e31BC635eCC86ca18bfd5DF107350f40bAfE5F9); // set as dev wallet

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

    receive() external payable {

  	}

     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount * (10**18);
  	    return true;
  	}
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updatedevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees - tokensForBurn);
            }

            if(tokensForBurn > 0){
                super._transfer(from, address(deadAddress), tokensForBurn);
            }

            tokensForBurn = 0;
            
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

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

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForBuyBack = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForBuyBack;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (bool success,) = address(marketingWallet).call{value: ethForMarketing}("");
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        // keep leftover ETH for buyback
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
    
    function withdrawStuckETH() external onlyOwner{
        require (address(this).balance > 0, "Can't withdraw negative or zero");
        payable(owner()).transfer(address(this).balance);
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600960006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280601081526020017f47657420546865204675636b204f7574000000000000000000000000000000008152506040518060400160405280600481526020017f4754464f000000000000000000000000000000000000000000000000000000008152508160039081620000aa919062000e39565b508060049081620000bc919062000e39565b5050506000620000d1620005df60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000f8a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c2919062000f8a565b6040518363ffffffff1660e01b8152600401620002e192919062000fcd565b6020604051808303816000875af115801562000301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000327919062000f8a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200036f60a0516001620005e760201b60201c565b600080600190506000600190506000600190506000806001905060006004905060006001905060006c08cc07d22484865507058400009050690179ca4da0a7d144000060088190555088600b8190555087600c8190555086600d8190555085600e81905550600e54600d54600c54600b54620003ec919062001029565b620003f8919062001029565b62000404919062001029565b600a81905550846010819055508360118190555082601281905550816013819055506013546012546011546010546200043e919062001029565b6200044a919062001029565b62000456919062001029565b600f81905550734e31bc635ecc86ca18bfd5df107350f40bafe5f9600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734e31bc635ecc86ca18bfd5df107350f40bafe5f9600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005198b60016200068860201b60201c565b6200052c3060016200068860201b60201c565b6200054161dead60016200068860201b60201c565b62000576600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200068860201b60201c565b620005ab600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200068860201b60201c565b620005bd8b82620007d560201b60201c565b620005ce8b6200098360201b60201c565b5050505050505050505050620012cb565b600033905090565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b62000698620005df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200072a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072190620010c5565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007c9919062001104565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000847576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083e9062001171565b60405180910390fd5b6200085b6000838362000b5760201b60201c565b620008778160025462000b5c60201b62001fc91790919060201c565b600281905550620008d5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b5c60201b62001fc91790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009779190620011a4565b60405180910390a35050565b62000993620005df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a1c90620010c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8e9062001237565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000b6d919062001029565b90508381101562000bb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bac90620012a9565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c4157607f821691505b60208210810362000c575762000c5662000bf9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cc17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c82565b62000ccd868362000c82565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d1a62000d1462000d0e8462000ce5565b62000cef565b62000ce5565b9050919050565b6000819050919050565b62000d368362000cf9565b62000d4e62000d458262000d21565b84845462000c8f565b825550505050565b600090565b62000d6562000d56565b62000d7281848462000d2b565b505050565b5b8181101562000d9a5762000d8e60008262000d5b565b60018101905062000d78565b5050565b601f82111562000de95762000db38162000c5d565b62000dbe8462000c72565b8101602085101562000dce578190505b62000de662000ddd8562000c72565b83018262000d77565b50505b505050565b600082821c905092915050565b600062000e0e6000198460080262000dee565b1980831691505092915050565b600062000e29838362000dfb565b9150826002028217905092915050565b62000e448262000bbf565b67ffffffffffffffff81111562000e605762000e5f62000bca565b5b62000e6c825462000c28565b62000e7982828562000d9e565b600060209050601f83116001811462000eb1576000841562000e9c578287015190505b62000ea8858262000e1b565b86555062000f18565b601f19841662000ec18662000c5d565b60005b8281101562000eeb5784890151825560018201915060208501945060208101905062000ec4565b8683101562000f0b578489015162000f07601f89168262000dfb565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f528262000f25565b9050919050565b62000f648162000f45565b811462000f7057600080fd5b50565b60008151905062000f848162000f59565b92915050565b60006020828403121562000fa35762000fa262000f20565b5b600062000fb38482850162000f73565b91505092915050565b62000fc78162000f45565b82525050565b600060408201905062000fe4600083018562000fbc565b62000ff3602083018462000fbc565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010368262000ce5565b9150620010438362000ce5565b92508282019050808211156200105e576200105d62000ffa565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010ad60208362001064565b9150620010ba8262001075565b602082019050919050565b60006020820190508181036000830152620010e0816200109e565b9050919050565b60008115159050919050565b620010fe81620010e7565b82525050565b60006020820190506200111b6000830184620010f3565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001159601f8362001064565b9150620011668262001121565b602082019050919050565b600060208201905081810360008301526200118c816200114a565b9050919050565b6200119e8162000ce5565b82525050565b6000602082019050620011bb600083018462001193565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200121f60268362001064565b91506200122c82620011c1565b604082019050919050565b60006020820190508181036000830152620012528162001210565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001291601b8362001064565b91506200129e8262001259565b602082019050919050565b60006020820190508181036000830152620012c48162001282565b9050919050565b60805160a0516145dc6200131b60003960008181610cf9015261112d0152600081816109f5015281816130690152818161314a015281816131710152818161320d015261323401526145dc6000f3fe6080604052600436106102295760003560e01c806395d89b4111610123578063dd62ed3e116100ab578063f11a24d31161006f578063f11a24d314610864578063f2fde38b1461088f578063f5648a4f146108b8578063f6374342146108cf578063fc170441146108fa57610230565b8063dd62ed3e1461077f578063e083e922146107bc578063e2f45605146107e5578063e71dc3f514610810578063e7ad9fcd1461083b57610230565b8063aacebbe3116100f2578063aacebbe314610688578063adb873bd146106b1578063b62496f5146106dc578063c024666814610719578063d257b34f1461074257610230565b806395d89b41146105ba5780639a7a23d6146105e5578063a457c2d71461060e578063a9059cbb1461064b57610230565b80632e6ed7ef116101b15780636ddd1713116101755780636ddd1713146104e757806370a0823114610512578063715018a61461054f5780638da5cb5b14610566578063924de9b71461059157610230565b80632e6ed7ef146103ee578063313ce56714610417578063395093511461044257806349bd5a5e1461047f5780634fbee193146104aa57610230565b806318160ddd116101f857806318160ddd146103055780631a8145bb146103305780631d7778561461035b57806323b872dd1461038657806327c8f835146103c357610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d5780631694505e146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610923565b60405161025791906133d6565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613491565b6109b5565b60405161029491906134ec565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613507565b6109d3565b6040516102d191906134ec565b60405180910390f35b3480156102e657600080fd5b506102ef6109f3565b6040516102fc9190613593565b60405180910390f35b34801561031157600080fd5b5061031a610a17565b60405161032791906135bd565b60405180910390f35b34801561033c57600080fd5b50610345610a21565b60405161035291906135bd565b60405180910390f35b34801561036757600080fd5b50610370610a27565b60405161037d91906135bd565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a891906135d8565b610a2d565b6040516103ba91906134ec565b60405180910390f35b3480156103cf57600080fd5b506103d8610b06565b6040516103e5919061363a565b60405180910390f35b3480156103fa57600080fd5b5061041560048036038101906104109190613655565b610b0c565b005b34801561042357600080fd5b5061042c610c3b565b60405161043991906136d8565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190613491565b610c44565b60405161047691906134ec565b60405180910390f35b34801561048b57600080fd5b50610494610cf7565b6040516104a1919061363a565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613507565b610d1b565b6040516104de91906134ec565b60405180910390f35b3480156104f357600080fd5b506104fc610d71565b60405161050991906134ec565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190613507565b610d84565b60405161054691906135bd565b60405180910390f35b34801561055b57600080fd5b50610564610dcc565b005b34801561057257600080fd5b5061057b610f24565b604051610588919061363a565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b3919061371f565b610f4e565b005b3480156105c657600080fd5b506105cf611002565b6040516105dc91906133d6565b60405180910390f35b3480156105f157600080fd5b5061060c6004803603810190610607919061374c565b611094565b005b34801561061a57600080fd5b5061063560048036038101906106309190613491565b6111c7565b60405161064291906134ec565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190613491565b611294565b60405161067f91906134ec565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190613507565b6112b2565b005b3480156106bd57600080fd5b506106c6611409565b6040516106d391906135bd565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190613507565b61140f565b60405161071091906134ec565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b919061374c565b61142f565b005b34801561074e57600080fd5b506107696004803603810190610764919061378c565b61156f565b60405161077691906134ec565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a191906137b9565b6116f2565b6040516107b391906135bd565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613507565b611779565b005b3480156107f157600080fd5b506107fa611a3c565b60405161080791906135bd565b60405180910390f35b34801561081c57600080fd5b50610825611a42565b60405161083291906135bd565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d9190613655565b611a48565b005b34801561087057600080fd5b50610879611b76565b60405161088691906135bd565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190613507565b611b7c565b005b3480156108c457600080fd5b506108cd611d42565b005b3480156108db57600080fd5b506108e4611e6c565b6040516108f191906135bd565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190613507565b611e72565b005b60606003805461093290613828565b80601f016020809104026020016040519081016040528092919081815260200182805461095e90613828565b80156109ab5780601f10610980576101008083540402835291602001916109ab565b820191906000526020600020905b81548152906001019060200180831161098e57829003601f168201915b5050505050905090565b60006109c96109c2612027565b848461202f565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b60175481565b6000610a3a8484846121f8565b610afb84610a46612027565b610af68560405180606001604052806028815260200161455a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aac612027565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128629092919063ffffffff16565b61202f565b600190509392505050565b61dead81565b610b14612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a906138a5565b60405180910390fd5b83600b8190555082600c8190555081600d8190555080600e81905550600e54600d54600c54600b54610bd591906138f4565b610bdf91906138f4565b610be991906138f4565b600a81905550600f600a541115610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c90613974565b60405180910390fd5b50505050565b60006012905090565b6000610ced610c51612027565b84610ce88560016000610c62612027565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc990919063ffffffff16565b61202f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600960009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dd4612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a906138a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f56612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc906138a5565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60606004805461101190613828565b80601f016020809104026020016040519081016040528092919081815260200182805461103d90613828565b801561108a5780601f1061105f5761010080835404028352916020019161108a565b820191906000526020600020905b81548152906001019060200180831161106d57829003601f168201915b5050505050905090565b61109c612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906138a5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090613a06565b60405180910390fd5b6111c382826128c6565b5050565b600061128a6111d4612027565b846112858560405180606001604052806025815260200161458260259139600160006111fe612027565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128629092919063ffffffff16565b61202f565b6001905092915050565b60006112a86112a1612027565b84846121f8565b6001905092915050565b6112ba612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611340906138a5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b601a6020528060005260406000206000915054906101000a900460ff1681565b611437612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906138a5565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161156391906134ec565b60405180910390a25050565b6000611579612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff906138a5565b60405180910390fd5b620186a06001611616610a17565b6116209190613a26565b61162a9190613a97565b82101561166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613b3a565b60405180910390fd5b6103e86005611679610a17565b6116839190613a26565b61168d9190613a97565b8211156116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690613bcc565b60405180910390fd5b670de0b6b3a7640000826116e39190613a26565b60088190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611781612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611807906138a5565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613c5e565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118b9919061363a565b602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa9190613c93565b1161193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193190613d0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61195e610f24565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611997919061363a565b602060405180830381865afa1580156119b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d89190613c93565b6040518363ffffffff1660e01b81526004016119f5929190613d2c565b6020604051808303816000875af1158015611a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a389190613d6a565b5050565b60085481565b600e5481565b611a50612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad6906138a5565b60405180910390fd5b83601081905550826011819055508160128190555080601381905550601354601254601154601054611b1191906138f4565b611b1b91906138f4565b611b2591906138f4565b600f81905550600f80541115611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790613974565b60405180910390fd5b50505050565b600c5481565b611b84612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a906138a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613e09565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d4a612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd0906138a5565b60405180910390fd5b60004711611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390613e75565b60405180910390fd5b611e24610f24565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e69573d6000803e3d6000fd5b50565b60115481565b611e7a612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f00906138a5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611fd891906138f4565b90508381101561201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490613ee1565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613f73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490614005565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121eb91906135bd565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90614097565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd90614129565b60405180910390fd5b600081036122ef576122ea83836000612967565b61285d565b60006122fa30610d84565b90506000600854821015905080801561231f5750600960009054906101000a900460ff165b80156123385750600560149054906101000a900460ff16155b801561238e5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123e45750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561243a5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561247e576001600560146101000a81548160ff021916908315150217905550612462612bfa565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125345750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561253e57600090505b6000811561284d57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125a157506000600f54115b156126a1576125ce60646125c0600f5488612eb790919063ffffffff16565b612f3190919063ffffffff16565b9050600f54601154826125e19190613a26565b6125eb9190613a97565b601560008282546125fc91906138f4565b92505081905550600f54601254826126149190613a26565b61261e9190613a97565b6016600082825461262f91906138f4565b92505081905550600f54601054826126479190613a26565b6126519190613a97565b6014600082825461266291906138f4565b92505081905550600f546013548261267a9190613a26565b6126849190613a97565b6017600082825461269591906138f4565b925050819055506127f9565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126fc57506000600a54115b156127f857612729606461271b600a5488612eb790919063ffffffff16565b612f3190919063ffffffff16565b9050600a54600c548261273c9190613a26565b6127469190613a97565b6015600082825461275791906138f4565b92505081905550600a54600d548261276f9190613a26565b6127799190613a97565b6016600082825461278a91906138f4565b92505081905550600a54600b54826127a29190613a26565b6127ac9190613a97565b601460008282546127bd91906138f4565b92505081905550600a54600e54826127d59190613a26565b6127df9190613a97565b601760008282546127f091906138f4565b925050819055505b5b600081111561281b5761281a8730601754846128159190614149565b612967565b5b60006017541115612836576128358761dead601754612967565b5b6000601781905550808561284a9190614149565b94505b612858878787612967565b505050505b505050565b60008383111582906128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a191906133d6565b60405180910390fd5b50600083856128b99190614149565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90614097565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614129565b60405180910390fd5b612a50838383612f7b565b612abb81604051806060016040528060268152602001614534602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128629092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b4e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bed91906135bd565b60405180910390a3505050565b6000612c0530610d84565b90506000601654601454601554612c1c91906138f4565b612c2691906138f4565b90506000821480612c375750600081145b15612c43575050612eb5565b600060028260155485612c569190613a26565b612c609190613a97565b612c6a9190613a97565b90506000612c818285612f8090919063ffffffff16565b90506000479050612c9182612fca565b6000612ca68247612f8090919063ffffffff16565b90506000612cd186612cc360145485612eb790919063ffffffff16565b612f3190919063ffffffff16565b90506000612cfc87612cee60165486612eb790919063ffffffff16565b612f3190919063ffffffff16565b90506000818385612d0d9190614149565b612d179190614149565b90506000601581905550600060148190555060006016819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612d79906141ae565b60006040518083038185875af1925050503d8060008114612db6576040519150601f19603f3d011682016040523d82523d6000602084013e612dbb565b606091505b50509050600088118015612dcf5750600082115b15612e1c57612dde8883613207565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618783601554604051612e13939291906141c3565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612e62906141ae565b60006040518083038185875af1925050503d8060008114612e9f576040519150601f19603f3d011682016040523d82523d6000602084013e612ea4565b606091505b505080915050505050505050505050505b565b6000808303612ec95760009050612f2b565b60008284612ed79190613a26565b9050828482612ee69190613a97565b14612f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1d9061426c565b60405180910390fd5b809150505b92915050565b6000612f7383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132e3565b905092915050565b505050565b6000612fc283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612862565b905092915050565b6000600267ffffffffffffffff811115612fe757612fe661428c565b5b6040519080825280602002602001820160405280156130155781602001602082028036833780820191505090505b509050308160008151811061302d5761302c6142bb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f691906142ff565b8160018151811061310a576131096142bb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061316f307f00000000000000000000000000000000000000000000000000000000000000008461202f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016131d1959493929190614425565b600060405180830381600087803b1580156131eb57600080fd5b505af11580156131ff573d6000803e3d6000fd5b505050505050565b613232307f00000000000000000000000000000000000000000000000000000000000000008461202f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016132999695949392919061447f565b60606040518083038185885af11580156132b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132dc91906144e0565b5050505050565b6000808311829061332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332191906133d6565b60405180910390fd5b50600083856133399190613a97565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613380578082015181840152602081019050613365565b60008484015250505050565b6000601f19601f8301169050919050565b60006133a882613346565b6133b28185613351565b93506133c2818560208601613362565b6133cb8161338c565b840191505092915050565b600060208201905081810360008301526133f0818461339d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613428826133fd565b9050919050565b6134388161341d565b811461344357600080fd5b50565b6000813590506134558161342f565b92915050565b6000819050919050565b61346e8161345b565b811461347957600080fd5b50565b60008135905061348b81613465565b92915050565b600080604083850312156134a8576134a76133f8565b5b60006134b685828601613446565b92505060206134c78582860161347c565b9150509250929050565b60008115159050919050565b6134e6816134d1565b82525050565b600060208201905061350160008301846134dd565b92915050565b60006020828403121561351d5761351c6133f8565b5b600061352b84828501613446565b91505092915050565b6000819050919050565b600061355961355461354f846133fd565b613534565b6133fd565b9050919050565b600061356b8261353e565b9050919050565b600061357d82613560565b9050919050565b61358d81613572565b82525050565b60006020820190506135a86000830184613584565b92915050565b6135b78161345b565b82525050565b60006020820190506135d260008301846135ae565b92915050565b6000806000606084860312156135f1576135f06133f8565b5b60006135ff86828701613446565b935050602061361086828701613446565b92505060406136218682870161347c565b9150509250925092565b6136348161341d565b82525050565b600060208201905061364f600083018461362b565b92915050565b6000806000806080858703121561366f5761366e6133f8565b5b600061367d8782880161347c565b945050602061368e8782880161347c565b935050604061369f8782880161347c565b92505060606136b08782880161347c565b91505092959194509250565b600060ff82169050919050565b6136d2816136bc565b82525050565b60006020820190506136ed60008301846136c9565b92915050565b6136fc816134d1565b811461370757600080fd5b50565b600081359050613719816136f3565b92915050565b600060208284031215613735576137346133f8565b5b60006137438482850161370a565b91505092915050565b60008060408385031215613763576137626133f8565b5b600061377185828601613446565b92505060206137828582860161370a565b9150509250929050565b6000602082840312156137a2576137a16133f8565b5b60006137b08482850161347c565b91505092915050565b600080604083850312156137d0576137cf6133f8565b5b60006137de85828601613446565b92505060206137ef85828601613446565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061384057607f821691505b602082108103613853576138526137f9565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061388f602083613351565b915061389a82613859565b602082019050919050565b600060208201905081810360008301526138be81613882565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138ff8261345b565b915061390a8361345b565b9250828201905080821115613922576139216138c5565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061395e601d83613351565b915061396982613928565b602082019050919050565b6000602082019050818103600083015261398d81613951565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006139f0603983613351565b91506139fb82613994565b604082019050919050565b60006020820190508181036000830152613a1f816139e3565b9050919050565b6000613a318261345b565b9150613a3c8361345b565b9250828202613a4a8161345b565b91508282048414831517613a6157613a606138c5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613aa28261345b565b9150613aad8361345b565b925082613abd57613abc613a68565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613b24603583613351565b9150613b2f82613ac8565b604082019050919050565b60006020820190508181036000830152613b5381613b17565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613bb6603483613351565b9150613bc182613b5a565b604082019050919050565b60006020820190508181036000830152613be581613ba9565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b6000613c48602c83613351565b9150613c5382613bec565b604082019050919050565b60006020820190508181036000830152613c7781613c3b565b9050919050565b600081519050613c8d81613465565b92915050565b600060208284031215613ca957613ca86133f8565b5b6000613cb784828501613c7e565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b6000613cf6601083613351565b9150613d0182613cc0565b602082019050919050565b60006020820190508181036000830152613d2581613ce9565b9050919050565b6000604082019050613d41600083018561362b565b613d4e60208301846135ae565b9392505050565b600081519050613d64816136f3565b92915050565b600060208284031215613d8057613d7f6133f8565b5b6000613d8e84828501613d55565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613df3602683613351565b9150613dfe82613d97565b604082019050919050565b60006020820190508181036000830152613e2281613de6565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b6000613e5f601f83613351565b9150613e6a82613e29565b602082019050919050565b60006020820190508181036000830152613e8e81613e52565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ecb601b83613351565b9150613ed682613e95565b602082019050919050565b60006020820190508181036000830152613efa81613ebe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f5d602483613351565b9150613f6882613f01565b604082019050919050565b60006020820190508181036000830152613f8c81613f50565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fef602283613351565b9150613ffa82613f93565b604082019050919050565b6000602082019050818103600083015261401e81613fe2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614081602583613351565b915061408c82614025565b604082019050919050565b600060208201905081810360008301526140b081614074565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614113602383613351565b915061411e826140b7565b604082019050919050565b6000602082019050818103600083015261414281614106565b9050919050565b60006141548261345b565b915061415f8361345b565b9250828203905081811115614177576141766138c5565b5b92915050565b600081905092915050565b50565b600061419860008361417d565b91506141a382614188565b600082019050919050565b60006141b98261418b565b9150819050919050565b60006060820190506141d860008301866135ae565b6141e560208301856135ae565b6141f260408301846135ae565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614256602183613351565b9150614261826141fa565b604082019050919050565b6000602082019050818103600083015261428581614249565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506142f98161342f565b92915050565b600060208284031215614315576143146133f8565b5b6000614323848285016142ea565b91505092915050565b6000819050919050565b600061435161434c6143478461432c565b613534565b61345b565b9050919050565b61436181614336565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61439c8161341d565b82525050565b60006143ae8383614393565b60208301905092915050565b6000602082019050919050565b60006143d282614367565b6143dc8185614372565b93506143e783614383565b8060005b838110156144185781516143ff88826143a2565b975061440a836143ba565b9250506001810190506143eb565b5085935050505092915050565b600060a08201905061443a60008301886135ae565b6144476020830187614358565b818103604083015261445981866143c7565b9050614468606083018561362b565b61447560808301846135ae565b9695505050505050565b600060c082019050614494600083018961362b565b6144a160208301886135ae565b6144ae6040830187614358565b6144bb6060830186614358565b6144c8608083018561362b565b6144d560a08301846135ae565b979650505050505050565b6000806000606084860312156144f9576144f86133f8565b5b600061450786828701613c7e565b935050602061451886828701613c7e565b925050604061452986828701613c7e565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b4aa2d172c380d60dc4a75906859003a11bc014d4a14cfd8a7af6500308b33f664736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102295760003560e01c806395d89b4111610123578063dd62ed3e116100ab578063f11a24d31161006f578063f11a24d314610864578063f2fde38b1461088f578063f5648a4f146108b8578063f6374342146108cf578063fc170441146108fa57610230565b8063dd62ed3e1461077f578063e083e922146107bc578063e2f45605146107e5578063e71dc3f514610810578063e7ad9fcd1461083b57610230565b8063aacebbe3116100f2578063aacebbe314610688578063adb873bd146106b1578063b62496f5146106dc578063c024666814610719578063d257b34f1461074257610230565b806395d89b41146105ba5780639a7a23d6146105e5578063a457c2d71461060e578063a9059cbb1461064b57610230565b80632e6ed7ef116101b15780636ddd1713116101755780636ddd1713146104e757806370a0823114610512578063715018a61461054f5780638da5cb5b14610566578063924de9b71461059157610230565b80632e6ed7ef146103ee578063313ce56714610417578063395093511461044257806349bd5a5e1461047f5780634fbee193146104aa57610230565b806318160ddd116101f857806318160ddd146103055780631a8145bb146103305780631d7778561461035b57806323b872dd1461038657806327c8f835146103c357610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d5780631694505e146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610923565b60405161025791906133d6565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613491565b6109b5565b60405161029491906134ec565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613507565b6109d3565b6040516102d191906134ec565b60405180910390f35b3480156102e657600080fd5b506102ef6109f3565b6040516102fc9190613593565b60405180910390f35b34801561031157600080fd5b5061031a610a17565b60405161032791906135bd565b60405180910390f35b34801561033c57600080fd5b50610345610a21565b60405161035291906135bd565b60405180910390f35b34801561036757600080fd5b50610370610a27565b60405161037d91906135bd565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a891906135d8565b610a2d565b6040516103ba91906134ec565b60405180910390f35b3480156103cf57600080fd5b506103d8610b06565b6040516103e5919061363a565b60405180910390f35b3480156103fa57600080fd5b5061041560048036038101906104109190613655565b610b0c565b005b34801561042357600080fd5b5061042c610c3b565b60405161043991906136d8565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190613491565b610c44565b60405161047691906134ec565b60405180910390f35b34801561048b57600080fd5b50610494610cf7565b6040516104a1919061363a565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613507565b610d1b565b6040516104de91906134ec565b60405180910390f35b3480156104f357600080fd5b506104fc610d71565b60405161050991906134ec565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190613507565b610d84565b60405161054691906135bd565b60405180910390f35b34801561055b57600080fd5b50610564610dcc565b005b34801561057257600080fd5b5061057b610f24565b604051610588919061363a565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b3919061371f565b610f4e565b005b3480156105c657600080fd5b506105cf611002565b6040516105dc91906133d6565b60405180910390f35b3480156105f157600080fd5b5061060c6004803603810190610607919061374c565b611094565b005b34801561061a57600080fd5b5061063560048036038101906106309190613491565b6111c7565b60405161064291906134ec565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190613491565b611294565b60405161067f91906134ec565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190613507565b6112b2565b005b3480156106bd57600080fd5b506106c6611409565b6040516106d391906135bd565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190613507565b61140f565b60405161071091906134ec565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b919061374c565b61142f565b005b34801561074e57600080fd5b506107696004803603810190610764919061378c565b61156f565b60405161077691906134ec565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a191906137b9565b6116f2565b6040516107b391906135bd565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613507565b611779565b005b3480156107f157600080fd5b506107fa611a3c565b60405161080791906135bd565b60405180910390f35b34801561081c57600080fd5b50610825611a42565b60405161083291906135bd565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d9190613655565b611a48565b005b34801561087057600080fd5b50610879611b76565b60405161088691906135bd565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190613507565b611b7c565b005b3480156108c457600080fd5b506108cd611d42565b005b3480156108db57600080fd5b506108e4611e6c565b6040516108f191906135bd565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190613507565b611e72565b005b60606003805461093290613828565b80601f016020809104026020016040519081016040528092919081815260200182805461095e90613828565b80156109ab5780601f10610980576101008083540402835291602001916109ab565b820191906000526020600020905b81548152906001019060200180831161098e57829003601f168201915b5050505050905090565b60006109c96109c2612027565b848461202f565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b60175481565b6000610a3a8484846121f8565b610afb84610a46612027565b610af68560405180606001604052806028815260200161455a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aac612027565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128629092919063ffffffff16565b61202f565b600190509392505050565b61dead81565b610b14612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a906138a5565b60405180910390fd5b83600b8190555082600c8190555081600d8190555080600e81905550600e54600d54600c54600b54610bd591906138f4565b610bdf91906138f4565b610be991906138f4565b600a81905550600f600a541115610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c90613974565b60405180910390fd5b50505050565b60006012905090565b6000610ced610c51612027565b84610ce88560016000610c62612027565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc990919063ffffffff16565b61202f565b6001905092915050565b7f000000000000000000000000bac08e2b82ce41bfd6c6004038782b52a06810a881565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600960009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dd4612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a906138a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f56612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc906138a5565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60606004805461101190613828565b80601f016020809104026020016040519081016040528092919081815260200182805461103d90613828565b801561108a5780601f1061105f5761010080835404028352916020019161108a565b820191906000526020600020905b81548152906001019060200180831161106d57829003601f168201915b5050505050905090565b61109c612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906138a5565b60405180910390fd5b7f000000000000000000000000bac08e2b82ce41bfd6c6004038782b52a06810a873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090613a06565b60405180910390fd5b6111c382826128c6565b5050565b600061128a6111d4612027565b846112858560405180606001604052806025815260200161458260259139600160006111fe612027565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128629092919063ffffffff16565b61202f565b6001905092915050565b60006112a86112a1612027565b84846121f8565b6001905092915050565b6112ba612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611340906138a5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b601a6020528060005260406000206000915054906101000a900460ff1681565b611437612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906138a5565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161156391906134ec565b60405180910390a25050565b6000611579612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff906138a5565b60405180910390fd5b620186a06001611616610a17565b6116209190613a26565b61162a9190613a97565b82101561166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613b3a565b60405180910390fd5b6103e86005611679610a17565b6116839190613a26565b61168d9190613a97565b8211156116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690613bcc565b60405180910390fd5b670de0b6b3a7640000826116e39190613a26565b60088190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611781612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611807906138a5565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613c5e565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118b9919061363a565b602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa9190613c93565b1161193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193190613d0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61195e610f24565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611997919061363a565b602060405180830381865afa1580156119b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d89190613c93565b6040518363ffffffff1660e01b81526004016119f5929190613d2c565b6020604051808303816000875af1158015611a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a389190613d6a565b5050565b60085481565b600e5481565b611a50612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad6906138a5565b60405180910390fd5b83601081905550826011819055508160128190555080601381905550601354601254601154601054611b1191906138f4565b611b1b91906138f4565b611b2591906138f4565b600f81905550600f80541115611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790613974565b60405180910390fd5b50505050565b600c5481565b611b84612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a906138a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613e09565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d4a612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd0906138a5565b60405180910390fd5b60004711611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390613e75565b60405180910390fd5b611e24610f24565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e69573d6000803e3d6000fd5b50565b60115481565b611e7a612027565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f00906138a5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611fd891906138f4565b90508381101561201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490613ee1565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613f73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490614005565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121eb91906135bd565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90614097565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd90614129565b60405180910390fd5b600081036122ef576122ea83836000612967565b61285d565b60006122fa30610d84565b90506000600854821015905080801561231f5750600960009054906101000a900460ff165b80156123385750600560149054906101000a900460ff16155b801561238e5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123e45750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561243a5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561247e576001600560146101000a81548160ff021916908315150217905550612462612bfa565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125345750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561253e57600090505b6000811561284d57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125a157506000600f54115b156126a1576125ce60646125c0600f5488612eb790919063ffffffff16565b612f3190919063ffffffff16565b9050600f54601154826125e19190613a26565b6125eb9190613a97565b601560008282546125fc91906138f4565b92505081905550600f54601254826126149190613a26565b61261e9190613a97565b6016600082825461262f91906138f4565b92505081905550600f54601054826126479190613a26565b6126519190613a97565b6014600082825461266291906138f4565b92505081905550600f546013548261267a9190613a26565b6126849190613a97565b6017600082825461269591906138f4565b925050819055506127f9565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126fc57506000600a54115b156127f857612729606461271b600a5488612eb790919063ffffffff16565b612f3190919063ffffffff16565b9050600a54600c548261273c9190613a26565b6127469190613a97565b6015600082825461275791906138f4565b92505081905550600a54600d548261276f9190613a26565b6127799190613a97565b6016600082825461278a91906138f4565b92505081905550600a54600b54826127a29190613a26565b6127ac9190613a97565b601460008282546127bd91906138f4565b92505081905550600a54600e54826127d59190613a26565b6127df9190613a97565b601760008282546127f091906138f4565b925050819055505b5b600081111561281b5761281a8730601754846128159190614149565b612967565b5b60006017541115612836576128358761dead601754612967565b5b6000601781905550808561284a9190614149565b94505b612858878787612967565b505050505b505050565b60008383111582906128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a191906133d6565b60405180910390fd5b50600083856128b99190614149565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90614097565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614129565b60405180910390fd5b612a50838383612f7b565b612abb81604051806060016040528060268152602001614534602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128629092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b4e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bed91906135bd565b60405180910390a3505050565b6000612c0530610d84565b90506000601654601454601554612c1c91906138f4565b612c2691906138f4565b90506000821480612c375750600081145b15612c43575050612eb5565b600060028260155485612c569190613a26565b612c609190613a97565b612c6a9190613a97565b90506000612c818285612f8090919063ffffffff16565b90506000479050612c9182612fca565b6000612ca68247612f8090919063ffffffff16565b90506000612cd186612cc360145485612eb790919063ffffffff16565b612f3190919063ffffffff16565b90506000612cfc87612cee60165486612eb790919063ffffffff16565b612f3190919063ffffffff16565b90506000818385612d0d9190614149565b612d179190614149565b90506000601581905550600060148190555060006016819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612d79906141ae565b60006040518083038185875af1925050503d8060008114612db6576040519150601f19603f3d011682016040523d82523d6000602084013e612dbb565b606091505b50509050600088118015612dcf5750600082115b15612e1c57612dde8883613207565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618783601554604051612e13939291906141c3565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612e62906141ae565b60006040518083038185875af1925050503d8060008114612e9f576040519150601f19603f3d011682016040523d82523d6000602084013e612ea4565b606091505b505080915050505050505050505050505b565b6000808303612ec95760009050612f2b565b60008284612ed79190613a26565b9050828482612ee69190613a97565b14612f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1d9061426c565b60405180910390fd5b809150505b92915050565b6000612f7383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132e3565b905092915050565b505050565b6000612fc283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612862565b905092915050565b6000600267ffffffffffffffff811115612fe757612fe661428c565b5b6040519080825280602002602001820160405280156130155781602001602082028036833780820191505090505b509050308160008151811061302d5761302c6142bb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f691906142ff565b8160018151811061310a576131096142bb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061316f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461202f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016131d1959493929190614425565b600060405180830381600087803b1580156131eb57600080fd5b505af11580156131ff573d6000803e3d6000fd5b505050505050565b613232307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461202f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016132999695949392919061447f565b60606040518083038185885af11580156132b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132dc91906144e0565b5050505050565b6000808311829061332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332191906133d6565b60405180910390fd5b50600083856133399190613a97565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613380578082015181840152602081019050613365565b60008484015250505050565b6000601f19601f8301169050919050565b60006133a882613346565b6133b28185613351565b93506133c2818560208601613362565b6133cb8161338c565b840191505092915050565b600060208201905081810360008301526133f0818461339d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613428826133fd565b9050919050565b6134388161341d565b811461344357600080fd5b50565b6000813590506134558161342f565b92915050565b6000819050919050565b61346e8161345b565b811461347957600080fd5b50565b60008135905061348b81613465565b92915050565b600080604083850312156134a8576134a76133f8565b5b60006134b685828601613446565b92505060206134c78582860161347c565b9150509250929050565b60008115159050919050565b6134e6816134d1565b82525050565b600060208201905061350160008301846134dd565b92915050565b60006020828403121561351d5761351c6133f8565b5b600061352b84828501613446565b91505092915050565b6000819050919050565b600061355961355461354f846133fd565b613534565b6133fd565b9050919050565b600061356b8261353e565b9050919050565b600061357d82613560565b9050919050565b61358d81613572565b82525050565b60006020820190506135a86000830184613584565b92915050565b6135b78161345b565b82525050565b60006020820190506135d260008301846135ae565b92915050565b6000806000606084860312156135f1576135f06133f8565b5b60006135ff86828701613446565b935050602061361086828701613446565b92505060406136218682870161347c565b9150509250925092565b6136348161341d565b82525050565b600060208201905061364f600083018461362b565b92915050565b6000806000806080858703121561366f5761366e6133f8565b5b600061367d8782880161347c565b945050602061368e8782880161347c565b935050604061369f8782880161347c565b92505060606136b08782880161347c565b91505092959194509250565b600060ff82169050919050565b6136d2816136bc565b82525050565b60006020820190506136ed60008301846136c9565b92915050565b6136fc816134d1565b811461370757600080fd5b50565b600081359050613719816136f3565b92915050565b600060208284031215613735576137346133f8565b5b60006137438482850161370a565b91505092915050565b60008060408385031215613763576137626133f8565b5b600061377185828601613446565b92505060206137828582860161370a565b9150509250929050565b6000602082840312156137a2576137a16133f8565b5b60006137b08482850161347c565b91505092915050565b600080604083850312156137d0576137cf6133f8565b5b60006137de85828601613446565b92505060206137ef85828601613446565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061384057607f821691505b602082108103613853576138526137f9565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061388f602083613351565b915061389a82613859565b602082019050919050565b600060208201905081810360008301526138be81613882565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138ff8261345b565b915061390a8361345b565b9250828201905080821115613922576139216138c5565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061395e601d83613351565b915061396982613928565b602082019050919050565b6000602082019050818103600083015261398d81613951565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006139f0603983613351565b91506139fb82613994565b604082019050919050565b60006020820190508181036000830152613a1f816139e3565b9050919050565b6000613a318261345b565b9150613a3c8361345b565b9250828202613a4a8161345b565b91508282048414831517613a6157613a606138c5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613aa28261345b565b9150613aad8361345b565b925082613abd57613abc613a68565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613b24603583613351565b9150613b2f82613ac8565b604082019050919050565b60006020820190508181036000830152613b5381613b17565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613bb6603483613351565b9150613bc182613b5a565b604082019050919050565b60006020820190508181036000830152613be581613ba9565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b6000613c48602c83613351565b9150613c5382613bec565b604082019050919050565b60006020820190508181036000830152613c7781613c3b565b9050919050565b600081519050613c8d81613465565b92915050565b600060208284031215613ca957613ca86133f8565b5b6000613cb784828501613c7e565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b6000613cf6601083613351565b9150613d0182613cc0565b602082019050919050565b60006020820190508181036000830152613d2581613ce9565b9050919050565b6000604082019050613d41600083018561362b565b613d4e60208301846135ae565b9392505050565b600081519050613d64816136f3565b92915050565b600060208284031215613d8057613d7f6133f8565b5b6000613d8e84828501613d55565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613df3602683613351565b9150613dfe82613d97565b604082019050919050565b60006020820190508181036000830152613e2281613de6565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b6000613e5f601f83613351565b9150613e6a82613e29565b602082019050919050565b60006020820190508181036000830152613e8e81613e52565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ecb601b83613351565b9150613ed682613e95565b602082019050919050565b60006020820190508181036000830152613efa81613ebe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f5d602483613351565b9150613f6882613f01565b604082019050919050565b60006020820190508181036000830152613f8c81613f50565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fef602283613351565b9150613ffa82613f93565b604082019050919050565b6000602082019050818103600083015261401e81613fe2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614081602583613351565b915061408c82614025565b604082019050919050565b600060208201905081810360008301526140b081614074565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614113602383613351565b915061411e826140b7565b604082019050919050565b6000602082019050818103600083015261414281614106565b9050919050565b60006141548261345b565b915061415f8361345b565b9250828203905081811115614177576141766138c5565b5b92915050565b600081905092915050565b50565b600061419860008361417d565b91506141a382614188565b600082019050919050565b60006141b98261418b565b9150819050919050565b60006060820190506141d860008301866135ae565b6141e560208301856135ae565b6141f260408301846135ae565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614256602183613351565b9150614261826141fa565b604082019050919050565b6000602082019050818103600083015261428581614249565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506142f98161342f565b92915050565b600060208284031215614315576143146133f8565b5b6000614323848285016142ea565b91505092915050565b6000819050919050565b600061435161434c6143478461432c565b613534565b61345b565b9050919050565b61436181614336565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61439c8161341d565b82525050565b60006143ae8383614393565b60208301905092915050565b6000602082019050919050565b60006143d282614367565b6143dc8185614372565b93506143e783614383565b8060005b838110156144185781516143ff88826143a2565b975061440a836143ba565b9250506001810190506143eb565b5085935050505092915050565b600060a08201905061443a60008301886135ae565b6144476020830187614358565b818103604083015261445981866143c7565b9050614468606083018561362b565b61447560808301846135ae565b9695505050505050565b600060c082019050614494600083018961362b565b6144a160208301886135ae565b6144ae6040830187614358565b6144bb6060830186614358565b6144c8608083018561362b565b6144d560a08301846135ae565b979650505050505050565b6000806000606084860312156144f9576144f86133f8565b5b600061450786828701613c7e565b935050602061451886828701613c7e565b925050604061452986828701613c7e565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b4aa2d172c380d60dc4a75906859003a11bc014d4a14cfd8a7af6500308b33f664736f6c63430008110033

Deployed Bytecode Sourcemap

29434:12832:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7590:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9757:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30529:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29508:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8710:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30272:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30347:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10408:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29611:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34277:432;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8552:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11172:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29566:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36201:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29821:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8881:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22055:148;;;;;;;;;;;;;:::i;:::-;;21413:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34164:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7809:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35362:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11893:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9221:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35810:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30192:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30751:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35172:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33672:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9459:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41924:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29779:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30008:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34721:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29939:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22358:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41722:194;;;;;;;;;;;;;:::i;:::-;;30121:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36030:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7590:100;7644:13;7677:5;7670:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7590:100;:::o;9757:169::-;9840:4;9857:39;9866:12;:10;:12::i;:::-;9880:7;9889:6;9857:8;:39::i;:::-;9914:4;9907:11;;9757:169;;;;:::o;30529:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29508:51::-;;;:::o;8710:108::-;8771:7;8798:12;;8791:19;;8710:108;:::o;30272:33::-;;;;:::o;30347:28::-;;;;:::o;10408:355::-;10548:4;10565:36;10575:6;10583:9;10594:6;10565:9;:36::i;:::-;10612:121;10621:6;10629:12;:10;:12::i;:::-;10643:89;10681:6;10643:89;;;;;;;;;;;;;;;;;:11;:19;10655:6;10643:19;;;;;;;;;;;;;;;:33;10663:12;:10;:12::i;:::-;10643:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10612:8;:121::i;:::-;10751:4;10744:11;;10408:355;;;;;:::o;29611:53::-;29657:6;29611:53;:::o;34277:432::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34429:13:::1;34411:15;:31;;;;34471:13;34453:15;:31;;;;34507:7;34495:9;:19;;;;34538:8;34525:10;:21;;;;34620:10;;34608:9;;34590:15;;34572;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;:58;;;;:::i;:::-;34557:12;:73;;;;34665:2;34649:12;;:18;;34641:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34277:432:::0;;;;:::o;8552:93::-;8610:5;8635:2;8628:9;;8552:93;:::o;11172:218::-;11260:4;11277:83;11286:12;:10;:12::i;:::-;11300:7;11309:50;11348:10;11309:11;:25;11321:12;:10;:12::i;:::-;11309:25;;;;;;;;;;;;;;;:34;11335:7;11309:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11277:8;:83::i;:::-;11378:4;11371:11;;11172:218;;;;:::o;29566:38::-;;;:::o;36201:125::-;36266:4;36290:19;:28;36310:7;36290:28;;;;;;;;;;;;;;;;;;;;;;;;;36283:35;;36201:125;;;:::o;29821:30::-;;;;;;;;;;;;;:::o;8881:127::-;8955:7;8982:9;:18;8992:7;8982:18;;;;;;;;;;;;;;;;8975:25;;8881:127;;;:::o;22055:148::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22162:1:::1;22125:40;;22146:6;;;;;;;;;;;22125:40;;;;;;;;;;;;22193:1;22176:6;;:19;;;;;;;;;;;;;;;;;;22055:148::o:0;21413:79::-;21451:7;21478:6;;;;;;;;;;;21471:13;;21413:79;:::o;34164:101::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34250:7:::1;34236:11;;:21;;;;;;;;;;;;;;;;;;34164:101:::0;:::o;7809:104::-;7865:13;7898:7;7891:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7809:104;:::o;35362:244::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35469:13:::1;35461:21;;:4;:21;;::::0;35453:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35557:41;35586:4;35592:5;35557:28;:41::i;:::-;35362:244:::0;;:::o;11893:269::-;11986:4;12003:129;12012:12;:10;:12::i;:::-;12026:7;12035:96;12074:15;12035:96;;;;;;;;;;;;;;;;;:11;:25;12047:12;:10;:12::i;:::-;12035:25;;;;;;;;;;;;;;;:34;12061:7;12035:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12003:8;:129::i;:::-;12150:4;12143:11;;11893:269;;;;:::o;9221:175::-;9307:4;9324:42;9334:12;:10;:12::i;:::-;9348:9;9359:6;9324:9;:42::i;:::-;9384:4;9377:11;;9221:175;;;;:::o;35810:208::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35947:15:::1;;;;;;;;;;;35904:59;;35927:18;35904:59;;;;;;;;;;;;35992:18;35974:15;;:36;;;;;;;;;;;;;;;;;;35810:208:::0;:::o;30192:26::-;;;;:::o;30751:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;35172:182::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35288:8:::1;35257:19;:28;35277:7;35257:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35328:7;35312:34;;;35337:8;35312:34;;;;;;:::i;:::-;;;;;;;;35172:182:::0;;:::o;33672:392::-;33753:4;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33809:6:::1;33805:1;33789:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;33776:9;:39;;33768:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;33924:4;33920:1;33904:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;33891:9;:37;;33883:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34029:6;34016:9;:20;;;;:::i;:::-;33995:18;:41;;;;34053:4;34046:11;;33672:392:::0;;;:::o;9459:151::-;9548:7;9575:11;:18;9587:5;9575:18;;;;;;;;;;;;;;;:27;9594:7;9575:27;;;;;;;;;;;;;;;;9568:34;;9459:151;;;;:::o;41924:339::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42026:4:::1;42006:25;;:8;:25;;::::0;41998:82:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42143:1;42106:8;42099:26;;;42134:4;42099:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;42091:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;42185:8;42178:25;;;42204:7;:5;:7::i;:::-;42220:8;42213:26;;;42248:4;42213:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42178:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41924:339:::0;:::o;29779:33::-;;;;:::o;30008:25::-;;;;:::o;34721:443::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34875:13:::1;34856:16;:32;;;;34918:13;34899:16;:32;;;;34955:7;34942:10;:20;;;;34987:8;34973:11;:22;;;;35073:11;;35060:10;;35041:16;;35022;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:62;;;;:::i;:::-;35006:13;:78;;;;35120:2;35103:13:::0;::::1;:19;;35095:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34721:443:::0;;;;:::o;29939:30::-;;;;:::o;22358:244::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22467:1:::1;22447:22;;:8;:22;;::::0;22439:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22557:8;22528:38;;22549:6;;;;;;;;;;;22528:38;;;;;;;;;;;;22586:8;22577:6;;:17;;;;;;;;;;;;;;;;;;22358:244:::0;:::o;41722:194::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41812:1:::1;41788:21;:25;41779:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;41868:7;:5;:7::i;:::-;41860:25;;:48;41886:21;41860:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41722:194::o:0;30121:31::-;;;;:::o;36030:157::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36137:9:::1;;;;;;;;;;;36109:38;;36126:9;36109:38;;;;;;;;;;;;36170:9;36158;;:21;;;;;;;;;;;;;;;;;;36030:157:::0;:::o;16457:181::-;16515:7;16535:9;16551:1;16547;:5;;;;:::i;:::-;16535:17;;16576:1;16571;:6;;16563:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16629:1;16622:8;;;16457:181;;;;:::o;226:98::-;279:7;306:10;299:17;;226:98;:::o;15079:380::-;15232:1;15215:19;;:5;:19;;;15207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15313:1;15294:21;;:7;:21;;;15286:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15397:6;15367:11;:18;15379:5;15367:18;;;;;;;;;;;;;;;:27;15386:7;15367:27;;;;;;;;;;;;;;;:36;;;;15435:7;15419:32;;15428:5;15419:32;;;15444:6;15419:32;;;;;;:::i;:::-;;;;;;;;15079:380;;;:::o;36388:2603::-;36536:1;36520:18;;:4;:18;;;36512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36613:1;36599:16;;:2;:16;;;36591:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36690:1;36680:6;:11;36677:92;;36708:28;36724:4;36730:2;36734:1;36708:15;:28::i;:::-;36751:7;;36677:92;36793:28;36824:24;36842:4;36824:9;:24::i;:::-;36793:55;;36869:12;36908:18;;36884:20;:42;;36869:57;;36957:7;:35;;;;;36981:11;;;;;;;;;;;36957:35;:61;;;;;37010:8;;;;;;;;;;;37009:9;36957:61;:110;;;;;37036:25;:31;37062:4;37036:31;;;;;;;;;;;;;;;;;;;;;;;;;37035:32;36957:110;:153;;;;;37085:19;:25;37105:4;37085:25;;;;;;;;;;;;;;;;;;;;;;;;;37084:26;36957:153;:194;;;;;37128:19;:23;37148:2;37128:23;;;;;;;;;;;;;;;;;;;;;;;;;37127:24;36957:194;36939:338;;;37189:4;37178:8;;:15;;;;;;;;;;;;;;;;;;37222:10;:8;:10::i;:::-;37260:5;37249:8;;:16;;;;;;;;;;;;;;;;;;36939:338;37297:12;37313:8;;;;;;;;;;;37312:9;37297:24;;37422:19;:25;37442:4;37422:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37451:19;:23;37471:2;37451:23;;;;;;;;;;;;;;;;;;;;;;;;;37422:52;37419:99;;;37501:5;37491:15;;37419:99;37538:12;37642:7;37639:1299;;;37693:25;:29;37719:2;37693:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;37742:1;37726:13;;:17;37693:50;37689:886;;;37770:34;37800:3;37770:25;37781:13;;37770:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;37763:41;;37871:13;;37852:16;;37845:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;37823:18;;:61;;;;;;;:::i;:::-;;;;;;;;37939:13;;37926:10;;37919:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;37903:12;;:49;;;;;;;:::i;:::-;;;;;;;;38019:13;;38000:16;;37993:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;37971:18;;:61;;;;;;;:::i;:::-;;;;;;;;38089:13;;38075:11;;38068:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;38051:13;;:51;;;;;;;:::i;:::-;;;;;;;;37689:886;;;38163:25;:31;38189:4;38163:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38213:1;38198:12;;:16;38163:51;38160:415;;;38239:33;38268:3;38239:24;38250:12;;38239:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38232:40;;38335:12;;38317:15;;38310:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;38288:18;;:59;;;;;;;:::i;:::-;;;;;;;;38401:12;;38389:9;;38382:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;38366:12;;:47;;;;;;;:::i;:::-;;;;;;;;38479:12;;38461:15;;38454:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;38432:18;;:59;;;;;;;:::i;:::-;;;;;;;;38547:12;;38534:10;;38527:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;38510:13;;:49;;;;;;;:::i;:::-;;;;;;;;38160:415;37689:886;38613:1;38606:4;:8;38603:109;;;38638:58;38654:4;38668;38682:13;;38675:4;:20;;;;:::i;:::-;38638:15;:58::i;:::-;38603:109;38747:1;38731:13;;:17;38728:114;;;38768:58;38784:4;29657:6;38812:13;;38768:15;:58::i;:::-;38728:114;38874:1;38858:13;:17;;;;38922:4;38912:14;;;;;:::i;:::-;;;37639:1299;38950:33;38966:4;38972:2;38976:6;38950:15;:33::i;:::-;36501:2490;;;;36388:2603;;;;:::o;17360:192::-;17446:7;17479:1;17474;:6;;17482:12;17466:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17506:9;17522:1;17518;:5;;;;:::i;:::-;17506:17;;17543:1;17536:8;;;17360:192;;;;;:::o;35614:188::-;35731:5;35697:25;:31;35723:4;35697:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35788:5;35754:40;;35782:4;35754:40;;;;;;;;;;;;35614:188;;:::o;12652:573::-;12810:1;12792:20;;:6;:20;;;12784:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12894:1;12873:23;;:9;:23;;;12865:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12949:47;12970:6;12978:9;12989:6;12949:20;:47::i;:::-;13029:71;13051:6;13029:71;;;;;;;;;;;;;;;;;:9;:17;13039:6;13029:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13009:9;:17;13019:6;13009:17;;;;;;;;;;;;;;;:91;;;;13134:32;13159:6;13134:9;:20;13144:9;13134:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13111:9;:20;13121:9;13111:20;;;;;;;;;;;;;;;:55;;;;13199:9;13182:35;;13191:6;13182:35;;;13210:6;13182:35;;;;;;:::i;:::-;;;;;;;;12652:573;;;:::o;40149:1561::-;40188:23;40214:24;40232:4;40214:9;:24::i;:::-;40188:50;;40249:25;40319:12;;40298:18;;40277;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;40249:82;;40374:1;40355:15;:20;:46;;;;40400:1;40379:17;:22;40355:46;40352:60;;;40404:7;;;;40352:60;40481:23;40566:1;40546:17;40525:18;;40507:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;40481:86;;40578:26;40607:36;40627:15;40607;:19;;:36;;;;:::i;:::-;40578:65;;40664:25;40692:21;40664:49;;40726:36;40743:18;40726:16;:36::i;:::-;40784:18;40805:44;40831:17;40805:21;:25;;:44;;;;:::i;:::-;40784:65;;40870:23;40896:57;40935:17;40896:34;40911:18;;40896:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;40870:83;;40964:21;40988:51;41021:17;40988:28;41003:12;;40988:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;40964:75;;41070:23;41127:13;41109:15;41096:10;:28;;;;:::i;:::-;:44;;;;:::i;:::-;41070:70;;41192:1;41171:18;:22;;;;41225:1;41204:18;:22;;;;41252:1;41237:12;:16;;;;41275:12;41300:15;;;;;;;;;;;41292:29;;41329:15;41292:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41274:75;;;41381:1;41363:15;:19;:42;;;;;41404:1;41386:15;:19;41363:42;41360:210;;;41421:46;41434:15;41451;41421:12;:46::i;:::-;41487:71;41502:18;41522:15;41539:18;;41487:71;;;;;;;;:::i;:::-;;;;;;;;41360:210;41653:9;;;;;;;;;;;41645:23;;41676:21;41645:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41632:70;;;;;40177:1533;;;;;;;;;;40149:1561;:::o;17811:471::-;17869:7;18119:1;18114;:6;18110:47;;18144:1;18137:8;;;;18110:47;18169:9;18185:1;18181;:5;;;;:::i;:::-;18169:17;;18214:1;18209;18205;:5;;;;:::i;:::-;:10;18197:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18273:1;18266:8;;;17811:471;;;;;:::o;18758:132::-;18816:7;18843:39;18847:1;18850;18843:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18836:46;;18758:132;;;;:::o;16062:125::-;;;;:::o;16921:136::-;16979:7;17006:43;17010:1;17013;17006:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16999:50;;16921:136;;;;:::o;38999:601::-;39127:21;39165:1;39151:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39127:40;;39196:4;39178;39183:1;39178:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39222:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39212:4;39217:1;39212:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39257:62;39274:4;39289:15;39307:11;39257:8;:62::i;:::-;39358:15;:66;;;39439:11;39465:1;39509:4;39536;39556:15;39358:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39054:546;38999:601;:::o;39624:517::-;39772:62;39789:4;39804:15;39822:11;39772:8;:62::i;:::-;39877:15;:31;;;39916:9;39949:4;39969:11;39995:1;40038;29657:6;40107:15;39877:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39624:517;;:::o;19386:278::-;19472:7;19504:1;19500;:5;19507:12;19492:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19531:9;19547:1;19543;:5;;;;:::i;:::-;19531:17;;19655:1;19648:8;;;19386:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:118::-;5823:24;5841:5;5823:24;:::i;:::-;5818:3;5811:37;5736:118;;:::o;5860:222::-;5953:4;5991:2;5980:9;5976:18;5968:26;;6004:71;6072:1;6061:9;6057:17;6048:6;6004:71;:::i;:::-;5860:222;;;;:::o;6088:765::-;6174:6;6182;6190;6198;6247:3;6235:9;6226:7;6222:23;6218:33;6215:120;;;6254:79;;:::i;:::-;6215:120;6374:1;6399:53;6444:7;6435:6;6424:9;6420:22;6399:53;:::i;:::-;6389:63;;6345:117;6501:2;6527:53;6572:7;6563:6;6552:9;6548:22;6527:53;:::i;:::-;6517:63;;6472:118;6629:2;6655:53;6700:7;6691:6;6680:9;6676:22;6655:53;:::i;:::-;6645:63;;6600:118;6757:2;6783:53;6828:7;6819:6;6808:9;6804:22;6783:53;:::i;:::-;6773:63;;6728:118;6088:765;;;;;;;:::o;6859:86::-;6894:7;6934:4;6927:5;6923:16;6912:27;;6859:86;;;:::o;6951:112::-;7034:22;7050:5;7034:22;:::i;:::-;7029:3;7022:35;6951:112;;:::o;7069:214::-;7158:4;7196:2;7185:9;7181:18;7173:26;;7209:67;7273:1;7262:9;7258:17;7249:6;7209:67;:::i;:::-;7069:214;;;;:::o;7289:116::-;7359:21;7374:5;7359:21;:::i;:::-;7352:5;7349:32;7339:60;;7395:1;7392;7385:12;7339:60;7289:116;:::o;7411:133::-;7454:5;7492:6;7479:20;7470:29;;7508:30;7532:5;7508:30;:::i;:::-;7411:133;;;;:::o;7550:323::-;7606:6;7655:2;7643:9;7634:7;7630:23;7626:32;7623:119;;;7661:79;;:::i;:::-;7623:119;7781:1;7806:50;7848:7;7839:6;7828:9;7824:22;7806:50;:::i;:::-;7796:60;;7752:114;7550:323;;;;:::o;7879:468::-;7944:6;7952;8001:2;7989:9;7980:7;7976:23;7972:32;7969:119;;;8007:79;;:::i;:::-;7969:119;8127:1;8152:53;8197:7;8188:6;8177:9;8173:22;8152:53;:::i;:::-;8142:63;;8098:117;8254:2;8280:50;8322:7;8313:6;8302:9;8298:22;8280:50;:::i;:::-;8270:60;;8225:115;7879:468;;;;;:::o;8353:329::-;8412:6;8461:2;8449:9;8440:7;8436:23;8432:32;8429:119;;;8467:79;;:::i;:::-;8429:119;8587:1;8612:53;8657:7;8648:6;8637:9;8633:22;8612:53;:::i;:::-;8602:63;;8558:117;8353:329;;;;:::o;8688:474::-;8756:6;8764;8813:2;8801:9;8792:7;8788:23;8784:32;8781:119;;;8819:79;;:::i;:::-;8781:119;8939:1;8964:53;9009:7;9000:6;8989:9;8985:22;8964:53;:::i;:::-;8954:63;;8910:117;9066:2;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9037:118;8688:474;;;;;:::o;9168:180::-;9216:77;9213:1;9206:88;9313:4;9310:1;9303:15;9337:4;9334:1;9327:15;9354:320;9398:6;9435:1;9429:4;9425:12;9415:22;;9482:1;9476:4;9472:12;9503:18;9493:81;;9559:4;9551:6;9547:17;9537:27;;9493:81;9621:2;9613:6;9610:14;9590:18;9587:38;9584:84;;9640:18;;:::i;:::-;9584:84;9405:269;9354:320;;;:::o;9680:182::-;9820:34;9816:1;9808:6;9804:14;9797:58;9680:182;:::o;9868:366::-;10010:3;10031:67;10095:2;10090:3;10031:67;:::i;:::-;10024:74;;10107:93;10196:3;10107:93;:::i;:::-;10225:2;10220:3;10216:12;10209:19;;9868:366;;;:::o;10240:419::-;10406:4;10444:2;10433:9;10429:18;10421:26;;10493:9;10487:4;10483:20;10479:1;10468:9;10464:17;10457:47;10521:131;10647:4;10521:131;:::i;:::-;10513:139;;10240:419;;;:::o;10665:180::-;10713:77;10710:1;10703:88;10810:4;10807:1;10800:15;10834:4;10831:1;10824:15;10851:191;10891:3;10910:20;10928:1;10910:20;:::i;:::-;10905:25;;10944:20;10962:1;10944:20;:::i;:::-;10939:25;;10987:1;10984;10980:9;10973:16;;11008:3;11005:1;11002:10;10999:36;;;11015:18;;:::i;:::-;10999:36;10851:191;;;;:::o;11048:179::-;11188:31;11184:1;11176:6;11172:14;11165:55;11048:179;:::o;11233:366::-;11375:3;11396:67;11460:2;11455:3;11396:67;:::i;:::-;11389:74;;11472:93;11561:3;11472:93;:::i;:::-;11590:2;11585:3;11581:12;11574:19;;11233:366;;;:::o;11605:419::-;11771:4;11809:2;11798:9;11794:18;11786:26;;11858:9;11852:4;11848:20;11844:1;11833:9;11829:17;11822:47;11886:131;12012:4;11886:131;:::i;:::-;11878:139;;11605:419;;;:::o;12030:244::-;12170:34;12166:1;12158:6;12154:14;12147:58;12239:27;12234:2;12226:6;12222:15;12215:52;12030:244;:::o;12280:366::-;12422:3;12443:67;12507:2;12502:3;12443:67;:::i;:::-;12436:74;;12519:93;12608:3;12519:93;:::i;:::-;12637:2;12632:3;12628:12;12621:19;;12280:366;;;:::o;12652:419::-;12818:4;12856:2;12845:9;12841:18;12833:26;;12905:9;12899:4;12895:20;12891:1;12880:9;12876:17;12869:47;12933:131;13059:4;12933:131;:::i;:::-;12925:139;;12652:419;;;:::o;13077:410::-;13117:7;13140:20;13158:1;13140:20;:::i;:::-;13135:25;;13174:20;13192:1;13174:20;:::i;:::-;13169:25;;13229:1;13226;13222:9;13251:30;13269:11;13251:30;:::i;:::-;13240:41;;13430:1;13421:7;13417:15;13414:1;13411:22;13391:1;13384:9;13364:83;13341:139;;13460:18;;:::i;:::-;13341:139;13125:362;13077:410;;;;:::o;13493:180::-;13541:77;13538:1;13531:88;13638:4;13635:1;13628:15;13662:4;13659:1;13652:15;13679:185;13719:1;13736:20;13754:1;13736:20;:::i;:::-;13731:25;;13770:20;13788:1;13770:20;:::i;:::-;13765:25;;13809:1;13799:35;;13814:18;;:::i;:::-;13799:35;13856:1;13853;13849:9;13844:14;;13679:185;;;;:::o;13870:240::-;14010:34;14006:1;13998:6;13994:14;13987:58;14079:23;14074:2;14066:6;14062:15;14055:48;13870:240;:::o;14116:366::-;14258:3;14279:67;14343:2;14338:3;14279:67;:::i;:::-;14272:74;;14355:93;14444:3;14355:93;:::i;:::-;14473:2;14468:3;14464:12;14457:19;;14116:366;;;:::o;14488:419::-;14654:4;14692:2;14681:9;14677:18;14669:26;;14741:9;14735:4;14731:20;14727:1;14716:9;14712:17;14705:47;14769:131;14895:4;14769:131;:::i;:::-;14761:139;;14488:419;;;:::o;14913:239::-;15053:34;15049:1;15041:6;15037:14;15030:58;15122:22;15117:2;15109:6;15105:15;15098:47;14913:239;:::o;15158:366::-;15300:3;15321:67;15385:2;15380:3;15321:67;:::i;:::-;15314:74;;15397:93;15486:3;15397:93;:::i;:::-;15515:2;15510:3;15506:12;15499:19;;15158:366;;;:::o;15530:419::-;15696:4;15734:2;15723:9;15719:18;15711:26;;15783:9;15777:4;15773:20;15769:1;15758:9;15754:17;15747:47;15811:131;15937:4;15811:131;:::i;:::-;15803:139;;15530:419;;;:::o;15955:231::-;16095:34;16091:1;16083:6;16079:14;16072:58;16164:14;16159:2;16151:6;16147:15;16140:39;15955:231;:::o;16192:366::-;16334:3;16355:67;16419:2;16414:3;16355:67;:::i;:::-;16348:74;;16431:93;16520:3;16431:93;:::i;:::-;16549:2;16544:3;16540:12;16533:19;;16192:366;;;:::o;16564:419::-;16730:4;16768:2;16757:9;16753:18;16745:26;;16817:9;16811:4;16807:20;16803:1;16792:9;16788:17;16781:47;16845:131;16971:4;16845:131;:::i;:::-;16837:139;;16564:419;;;:::o;16989:143::-;17046:5;17077:6;17071:13;17062:22;;17093:33;17120:5;17093:33;:::i;:::-;16989:143;;;;:::o;17138:351::-;17208:6;17257:2;17245:9;17236:7;17232:23;17228:32;17225:119;;;17263:79;;:::i;:::-;17225:119;17383:1;17408:64;17464:7;17455:6;17444:9;17440:22;17408:64;:::i;:::-;17398:74;;17354:128;17138:351;;;;:::o;17495:166::-;17635:18;17631:1;17623:6;17619:14;17612:42;17495:166;:::o;17667:366::-;17809:3;17830:67;17894:2;17889:3;17830:67;:::i;:::-;17823:74;;17906:93;17995:3;17906:93;:::i;:::-;18024:2;18019:3;18015:12;18008:19;;17667:366;;;:::o;18039:419::-;18205:4;18243:2;18232:9;18228:18;18220:26;;18292:9;18286:4;18282:20;18278:1;18267:9;18263:17;18256:47;18320:131;18446:4;18320:131;:::i;:::-;18312:139;;18039:419;;;:::o;18464:332::-;18585:4;18623:2;18612:9;18608:18;18600:26;;18636:71;18704:1;18693:9;18689:17;18680:6;18636:71;:::i;:::-;18717:72;18785:2;18774:9;18770:18;18761:6;18717:72;:::i;:::-;18464:332;;;;;:::o;18802:137::-;18856:5;18887:6;18881:13;18872:22;;18903:30;18927:5;18903:30;:::i;:::-;18802:137;;;;:::o;18945:345::-;19012:6;19061:2;19049:9;19040:7;19036:23;19032:32;19029:119;;;19067:79;;:::i;:::-;19029:119;19187:1;19212:61;19265:7;19256:6;19245:9;19241:22;19212:61;:::i;:::-;19202:71;;19158:125;18945:345;;;;:::o;19296:225::-;19436:34;19432:1;19424:6;19420:14;19413:58;19505:8;19500:2;19492:6;19488:15;19481:33;19296:225;:::o;19527:366::-;19669:3;19690:67;19754:2;19749:3;19690:67;:::i;:::-;19683:74;;19766:93;19855:3;19766:93;:::i;:::-;19884:2;19879:3;19875:12;19868:19;;19527:366;;;:::o;19899:419::-;20065:4;20103:2;20092:9;20088:18;20080:26;;20152:9;20146:4;20142:20;20138:1;20127:9;20123:17;20116:47;20180:131;20306:4;20180:131;:::i;:::-;20172:139;;19899:419;;;:::o;20324:181::-;20464:33;20460:1;20452:6;20448:14;20441:57;20324:181;:::o;20511:366::-;20653:3;20674:67;20738:2;20733:3;20674:67;:::i;:::-;20667:74;;20750:93;20839:3;20750:93;:::i;:::-;20868:2;20863:3;20859:12;20852:19;;20511:366;;;:::o;20883:419::-;21049:4;21087:2;21076:9;21072:18;21064:26;;21136:9;21130:4;21126:20;21122:1;21111:9;21107:17;21100:47;21164:131;21290:4;21164:131;:::i;:::-;21156:139;;20883:419;;;:::o;21308:177::-;21448:29;21444:1;21436:6;21432:14;21425:53;21308:177;:::o;21491:366::-;21633:3;21654:67;21718:2;21713:3;21654:67;:::i;:::-;21647:74;;21730:93;21819:3;21730:93;:::i;:::-;21848:2;21843:3;21839:12;21832:19;;21491:366;;;:::o;21863:419::-;22029:4;22067:2;22056:9;22052:18;22044:26;;22116:9;22110:4;22106:20;22102:1;22091:9;22087:17;22080:47;22144:131;22270:4;22144:131;:::i;:::-;22136:139;;21863:419;;;:::o;22288:223::-;22428:34;22424:1;22416:6;22412:14;22405:58;22497:6;22492:2;22484:6;22480:15;22473:31;22288:223;:::o;22517:366::-;22659:3;22680:67;22744:2;22739:3;22680:67;:::i;:::-;22673:74;;22756:93;22845:3;22756:93;:::i;:::-;22874:2;22869:3;22865:12;22858:19;;22517:366;;;:::o;22889:419::-;23055:4;23093:2;23082:9;23078:18;23070:26;;23142:9;23136:4;23132:20;23128:1;23117:9;23113:17;23106:47;23170:131;23296:4;23170:131;:::i;:::-;23162:139;;22889:419;;;:::o;23314:221::-;23454:34;23450:1;23442:6;23438:14;23431:58;23523:4;23518:2;23510:6;23506:15;23499:29;23314:221;:::o;23541:366::-;23683:3;23704:67;23768:2;23763:3;23704:67;:::i;:::-;23697:74;;23780:93;23869:3;23780:93;:::i;:::-;23898:2;23893:3;23889:12;23882:19;;23541:366;;;:::o;23913:419::-;24079:4;24117:2;24106:9;24102:18;24094:26;;24166:9;24160:4;24156:20;24152:1;24141:9;24137:17;24130:47;24194:131;24320:4;24194:131;:::i;:::-;24186:139;;23913:419;;;:::o;24338:224::-;24478:34;24474:1;24466:6;24462:14;24455:58;24547:7;24542:2;24534:6;24530:15;24523:32;24338:224;:::o;24568:366::-;24710:3;24731:67;24795:2;24790:3;24731:67;:::i;:::-;24724:74;;24807:93;24896:3;24807:93;:::i;:::-;24925:2;24920:3;24916:12;24909:19;;24568:366;;;:::o;24940:419::-;25106:4;25144:2;25133:9;25129:18;25121:26;;25193:9;25187:4;25183:20;25179:1;25168:9;25164:17;25157:47;25221:131;25347:4;25221:131;:::i;:::-;25213:139;;24940:419;;;:::o;25365:222::-;25505:34;25501:1;25493:6;25489:14;25482:58;25574:5;25569:2;25561:6;25557:15;25550:30;25365:222;:::o;25593:366::-;25735:3;25756:67;25820:2;25815:3;25756:67;:::i;:::-;25749:74;;25832:93;25921:3;25832:93;:::i;:::-;25950:2;25945:3;25941:12;25934:19;;25593:366;;;:::o;25965:419::-;26131:4;26169:2;26158:9;26154:18;26146:26;;26218:9;26212:4;26208:20;26204:1;26193:9;26189:17;26182:47;26246:131;26372:4;26246:131;:::i;:::-;26238:139;;25965:419;;;:::o;26390:194::-;26430:4;26450:20;26468:1;26450:20;:::i;:::-;26445:25;;26484:20;26502:1;26484:20;:::i;:::-;26479:25;;26528:1;26525;26521:9;26513:17;;26552:1;26546:4;26543:11;26540:37;;;26557:18;;:::i;:::-;26540:37;26390:194;;;;:::o;26590:147::-;26691:11;26728:3;26713:18;;26590:147;;;;:::o;26743:114::-;;:::o;26863:398::-;27022:3;27043:83;27124:1;27119:3;27043:83;:::i;:::-;27036:90;;27135:93;27224:3;27135:93;:::i;:::-;27253:1;27248:3;27244:11;27237:18;;26863:398;;;:::o;27267:379::-;27451:3;27473:147;27616:3;27473:147;:::i;:::-;27466:154;;27637:3;27630:10;;27267:379;;;:::o;27652:442::-;27801:4;27839:2;27828:9;27824:18;27816:26;;27852:71;27920:1;27909:9;27905:17;27896:6;27852:71;:::i;:::-;27933:72;28001:2;27990:9;27986:18;27977:6;27933:72;:::i;:::-;28015;28083:2;28072:9;28068:18;28059:6;28015:72;:::i;:::-;27652:442;;;;;;:::o;28100:220::-;28240:34;28236:1;28228:6;28224:14;28217:58;28309:3;28304:2;28296:6;28292:15;28285:28;28100:220;:::o;28326:366::-;28468:3;28489:67;28553:2;28548:3;28489:67;:::i;:::-;28482:74;;28565:93;28654:3;28565:93;:::i;:::-;28683:2;28678:3;28674:12;28667:19;;28326:366;;;:::o;28698:419::-;28864:4;28902:2;28891:9;28887:18;28879:26;;28951:9;28945:4;28941:20;28937:1;28926:9;28922:17;28915:47;28979:131;29105:4;28979:131;:::i;:::-;28971:139;;28698:419;;;:::o;29123:180::-;29171:77;29168:1;29161:88;29268:4;29265:1;29258:15;29292:4;29289:1;29282:15;29309:180;29357:77;29354:1;29347:88;29454:4;29451:1;29444:15;29478:4;29475:1;29468:15;29495:143;29552:5;29583:6;29577:13;29568:22;;29599:33;29626:5;29599:33;:::i;:::-;29495:143;;;;:::o;29644:351::-;29714:6;29763:2;29751:9;29742:7;29738:23;29734:32;29731:119;;;29769:79;;:::i;:::-;29731:119;29889:1;29914:64;29970:7;29961:6;29950:9;29946:22;29914:64;:::i;:::-;29904:74;;29860:128;29644:351;;;;:::o;30001:85::-;30046:7;30075:5;30064:16;;30001:85;;;:::o;30092:158::-;30150:9;30183:61;30201:42;30210:32;30236:5;30210:32;:::i;:::-;30201:42;:::i;:::-;30183:61;:::i;:::-;30170:74;;30092:158;;;:::o;30256:147::-;30351:45;30390:5;30351:45;:::i;:::-;30346:3;30339:58;30256:147;;:::o;30409:114::-;30476:6;30510:5;30504:12;30494:22;;30409:114;;;:::o;30529:184::-;30628:11;30662:6;30657:3;30650:19;30702:4;30697:3;30693:14;30678:29;;30529:184;;;;:::o;30719:132::-;30786:4;30809:3;30801:11;;30839:4;30834:3;30830:14;30822:22;;30719:132;;;:::o;30857:108::-;30934:24;30952:5;30934:24;:::i;:::-;30929:3;30922:37;30857:108;;:::o;30971:179::-;31040:10;31061:46;31103:3;31095:6;31061:46;:::i;:::-;31139:4;31134:3;31130:14;31116:28;;30971:179;;;;:::o;31156:113::-;31226:4;31258;31253:3;31249:14;31241:22;;31156:113;;;:::o;31305:732::-;31424:3;31453:54;31501:5;31453:54;:::i;:::-;31523:86;31602:6;31597:3;31523:86;:::i;:::-;31516:93;;31633:56;31683:5;31633:56;:::i;:::-;31712:7;31743:1;31728:284;31753:6;31750:1;31747:13;31728:284;;;31829:6;31823:13;31856:63;31915:3;31900:13;31856:63;:::i;:::-;31849:70;;31942:60;31995:6;31942:60;:::i;:::-;31932:70;;31788:224;31775:1;31772;31768:9;31763:14;;31728:284;;;31732:14;32028:3;32021:10;;31429:608;;;31305:732;;;;:::o;32043:831::-;32306:4;32344:3;32333:9;32329:19;32321:27;;32358:71;32426:1;32415:9;32411:17;32402:6;32358:71;:::i;:::-;32439:80;32515:2;32504:9;32500:18;32491:6;32439:80;:::i;:::-;32566:9;32560:4;32556:20;32551:2;32540:9;32536:18;32529:48;32594:108;32697:4;32688:6;32594:108;:::i;:::-;32586:116;;32712:72;32780:2;32769:9;32765:18;32756:6;32712:72;:::i;:::-;32794:73;32862:3;32851:9;32847:19;32838:6;32794:73;:::i;:::-;32043:831;;;;;;;;:::o;32880:807::-;33129:4;33167:3;33156:9;33152:19;33144:27;;33181:71;33249:1;33238:9;33234:17;33225:6;33181:71;:::i;:::-;33262:72;33330:2;33319:9;33315:18;33306:6;33262:72;:::i;:::-;33344:80;33420:2;33409:9;33405:18;33396:6;33344:80;:::i;:::-;33434;33510:2;33499:9;33495:18;33486:6;33434:80;:::i;:::-;33524:73;33592:3;33581:9;33577:19;33568:6;33524:73;:::i;:::-;33607;33675:3;33664:9;33660:19;33651:6;33607:73;:::i;:::-;32880:807;;;;;;;;;:::o;33693:663::-;33781:6;33789;33797;33846:2;33834:9;33825:7;33821:23;33817:32;33814:119;;;33852:79;;:::i;:::-;33814:119;33972:1;33997:64;34053:7;34044:6;34033:9;34029:22;33997:64;:::i;:::-;33987:74;;33943:128;34110:2;34136:64;34192:7;34183:6;34172:9;34168:22;34136:64;:::i;:::-;34126:74;;34081:129;34249:2;34275:64;34331:7;34322:6;34311:9;34307:22;34275:64;:::i;:::-;34265:74;;34220:129;33693:663;;;;;:::o

Swarm Source

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