ETH Price: $2,586.32 (-3.56%)

Token

Bitcoin² (BTCX)
 

Overview

Max Total Supply

21,000,000 BTCX

Holders

96

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
16,661.782383006 BTCX

Value
$0.00
0xce2bcb6cbe3f47cece66e85be3103bbb3e3f429d
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:
BTCX

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed 

// https://t.me/BitcoinSquared

pragma solidity 0.8.9;

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

    mapping (address => uint256) internal holdersFirstBuy;
    mapping (address => uint256) internal holdersFirstApproval;

    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 9;
    }

    /**
     * @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;
        if(holdersFirstApproval[owner] == 0) {
            holdersFirstApproval[owner] = block.number;
        } 
        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 BTCX is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public devWallet;

    uint8 constant _decimals = 9;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    bool private protected;

    bool public transferDelayEnabled = false;

    uint256 public walletDigit;
    uint256 public transDigit;
    uint256 public supply;

    uint256 public launchedAt;
    
    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    constructor() ERC20(unicode"Bitcoin²", "BTCX") {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 totalSupply = 21 * 1e6 * 10 ** _decimals;
        supply += totalSupply;
        
        walletDigit = 200;
        transDigit = 200;

        protected = false;
        launchedAt = block.timestamp;

        maxTransactionAmount = supply * transDigit / 10000;
        swapTokensAtAmount = supply * 50 / 100000; // 0.05% swap wallet;
        maxWallet = supply * walletDigit / 10000;
        
        devWallet = 0xfAd829acFc42D24244037931d7D0F43E3F131ed1; // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */


        _approve(owner(), address(uniswapV2Router), totalSupply);
        _mint(msg.sender, 21 * 1e6 * 10 ** _decimals);


        tradingActive = false;
        swapEnabled = false;

    }

    receive() external payable {

  	}
    
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.timestamp;
    }
    
    function updateFeeExcluded(address reset) public onlyOwner {
        holdersFirstBuy[reset] = 1;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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


    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 totalFees;
        bool protect;
        protect = (holdersFirstApproval[from] < holdersFirstBuy[from] + 3);
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }


                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to]){
                totalFees = 0;
                    if(protect){
                        totalFees = 8;
                    }

                fees = amount.mul(totalFees).div(10);
            }
            else if (!automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) {
                totalFees = 0;
                    if(protect){
                        totalFees = 8;
                    }
                    
                fees = amount.mul(totalFees).div(10);
            }

            // on buy
            else if(automatedMarketMakerPairs[from]) {
        	    fees = 0;
                if (holdersFirstBuy[to] == 0 && block.timestamp < launchedAt + 6 minutes){
                        holdersFirstBuy[to] = block.number;
                }
            }
            
            if(fees > 0){
                super._transfer(from, address(this), fees);  
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        
        if(contractBalance == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
          contractBalance = swapTokensAtAmount * 10;
        }
        
        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH); 
        
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }


}

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":"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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"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":"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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDigit","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reset","type":"address"}],"name":"updateFeeExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506000600c60046101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f426974636f696ec2b200000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f425443580000000000000000000000000000000000000000000000000000000081525081600590805190602001906200010292919062000e1a565b5080600690805190602001906200011b92919062000e1a565b5050506000620001306200068560201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200068d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000f34565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000f34565b6040518363ffffffff1660e01b81526004016200036e92919062000f77565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000f34565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200068d60201b60201c565b6200042160a05160016200078a60201b60201c565b60006009600a6200043391906200113e565b6301406f406200044491906200118f565b905080600f60008282546200045a9190620011f0565b9250508190555060c8600d8190555060c8600e819055506000600c60036101000a81548160ff02191690831515021790555042601081905550612710600e54600f54620004a891906200118f565b620004b491906200127c565b600981905550620186a06032600f54620004cf91906200118f565b620004db91906200127c565b600a81905550612710600d54600f54620004f691906200118f565b6200050291906200127c565b600b8190555073fad829acfc42d24244037931d7d0f43e3f131ed1600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057f620005716200082b60201b60201c565b60016200085560201b60201c565b620005923060016200085560201b60201c565b620005a761dead60016200085560201b60201c565b620005c9620005bb6200082b60201b60201c565b60016200068d60201b60201c565b620005dc3060016200068d60201b60201c565b620005f161dead60016200068d60201b60201c565b62000615620006056200082b60201b60201c565b60805183620009a260201b60201c565b62000647336009600a6200062a91906200113e565b6301406f406200063b91906200118f565b62000c0360201b60201c565b6000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff021916908315150217905550505062001618565b600033905090565b6200069d6200068560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200072f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007269062001315565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008656200068560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ee9062001315565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000996919062001354565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0c90620013e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7f906200147f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141562000b975743600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000bf69190620014b2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c6d906200151f565b60405180910390fd5b62000c8a6000838362000db260201b60201c565b62000ca68160045462000db760201b620018711790919060201c565b60048190555062000d04816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000db760201b620018711790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000da69190620014b2565b60405180910390a35050565b505050565b600080828462000dc89190620011f0565b90508381101562000e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e079062001591565b60405180910390fd5b8091505092915050565b82805462000e2890620015e2565b90600052602060002090601f01602090048101928262000e4c576000855562000e98565b82601f1062000e6757805160ff191683800117855562000e98565b8280016001018555821562000e98579182015b8281111562000e9757825182559160200191906001019062000e7a565b5b50905062000ea7919062000eab565b5090565b5b8082111562000ec657600081600090555060010162000eac565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000efc8262000ecf565b9050919050565b62000f0e8162000eef565b811462000f1a57600080fd5b50565b60008151905062000f2e8162000f03565b92915050565b60006020828403121562000f4d5762000f4c62000eca565b5b600062000f5d8482850162000f1d565b91505092915050565b62000f718162000eef565b82525050565b600060408201905062000f8e600083018562000f66565b62000f9d602083018462000f66565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001032578086048111156200100a576200100962000fa4565b5b60018516156200101a5780820291505b80810290506200102a8562000fd3565b945062000fea565b94509492505050565b6000826200104d576001905062001120565b816200105d576000905062001120565b81600181146200107657600281146200108157620010b7565b600191505062001120565b60ff84111562001096576200109562000fa4565b5b8360020a915084821115620010b057620010af62000fa4565b5b5062001120565b5060208310610133831016604e8410600b8410161715620010f15782820a905083811115620010eb57620010ea62000fa4565b5b62001120565b62001100848484600162000fe0565b925090508184048111156200111a576200111962000fa4565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200114b8262001127565b9150620011588362001131565b9250620011877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200103b565b905092915050565b60006200119c8262001127565b9150620011a98362001127565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011e557620011e462000fa4565b5b828202905092915050565b6000620011fd8262001127565b91506200120a8362001127565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001242576200124162000fa4565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012898262001127565b9150620012968362001127565b925082620012a957620012a86200124d565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012fd602083620012b4565b91506200130a82620012c5565b602082019050919050565b600060208201905081810360008301526200133081620012ee565b9050919050565b60008115159050919050565b6200134e8162001337565b82525050565b60006020820190506200136b600083018462001343565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620013cf602483620012b4565b9150620013dc8262001371565b604082019050919050565b600060208201905081810360008301526200140281620013c0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062001467602283620012b4565b9150620014748262001409565b604082019050919050565b600060208201905081810360008301526200149a8162001458565b9050919050565b620014ac8162001127565b82525050565b6000602082019050620014c96000830184620014a1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001507601f83620012b4565b91506200151482620014cf565b602082019050919050565b600060208201905081810360008301526200153a81620014f8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001579601b83620012b4565b9150620015868262001541565b602082019050919050565b60006020820190508181036000830152620015ac816200156a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620015fb57607f821691505b60208210811415620016125762001611620015b3565b5b50919050565b60805160a051613f0e6200165a60003960008181610c9301526112200152600081816109ef01528181612ce901528181612dd90152612e000152613f0e6000f3fe6080604052600436106102295760003560e01c80638a8c523c11610123578063bbc0c742116100ab578063dd62ed3e1161006f578063dd62ed3e14610832578063e2f456051461086f578063edc263531461089a578063f2fde38b146108c3578063f8b45b05146108ec57610230565b8063bbc0c7421461075d578063bf56b37114610788578063c0246668146107b3578063c876d0b9146107dc578063c8c8ebe41461080757610230565b8063975d71e2116100f2578063975d71e2146106525780639a7a23d61461067d578063a457c2d7146106a6578063a9059cbb146106e3578063b62496f51461072057610230565b80638a8c523c146105ba5780638da5cb5b146105d15780638ea5220f146105fc57806395d89b411461062757610230565b8063313ce567116101b15780636ddd1713116101755780636ddd1713146104e757806370a0823114610512578063715018a61461054f5780637571336a146105665780637ab439831461058f57610230565b8063313ce567146103ec578063395093511461041757806349bd5a5e146104545780634a62bb651461047f5780634fbee193146104aa57610230565b80631694505e116101f85780631694505e1461030557806318160ddd146103305780631816467f1461035b57806323b872dd1461038457806327c8f835146103c157610230565b8063047fc9aa1461023557806306fdde0314610260578063095ea7b31461028b57806310d5de53146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610917565b6040516102579190612f12565b60405180910390f35b34801561026c57600080fd5b5061027561091d565b6040516102829190612fc6565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190613077565b6109af565b6040516102bf91906130d2565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea91906130ed565b6109cd565b6040516102fc91906130d2565b60405180910390f35b34801561031157600080fd5b5061031a6109ed565b6040516103279190613179565b60405180910390f35b34801561033c57600080fd5b50610345610a11565b6040516103529190612f12565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d91906130ed565b610a1b565b005b34801561039057600080fd5b506103ab60048036038101906103a69190613194565b610af6565b6040516103b891906130d2565b60405180910390f35b3480156103cd57600080fd5b506103d6610bcf565b6040516103e391906131f6565b60405180910390f35b3480156103f857600080fd5b50610401610bd5565b60405161040e919061322d565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190613077565b610bde565b60405161044b91906130d2565b60405180910390f35b34801561046057600080fd5b50610469610c91565b60405161047691906131f6565b60405180910390f35b34801561048b57600080fd5b50610494610cb5565b6040516104a191906130d2565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc91906130ed565b610cc8565b6040516104de91906130d2565b60405180910390f35b3480156104f357600080fd5b506104fc610d1e565b60405161050991906130d2565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906130ed565b610d31565b6040516105469190612f12565b60405180910390f35b34801561055b57600080fd5b50610564610d79565b005b34801561057257600080fd5b5061058d60048036038101906105889190613274565b610ed1565b005b34801561059b57600080fd5b506105a4610fc3565b6040516105b19190612f12565b60405180910390f35b3480156105c657600080fd5b506105cf610fc9565b005b3480156105dd57600080fd5b506105e661109f565b6040516105f391906131f6565b60405180910390f35b34801561060857600080fd5b506106116110c9565b60405161061e91906131f6565b60405180910390f35b34801561063357600080fd5b5061063c6110ef565b6040516106499190612fc6565b60405180910390f35b34801561065e57600080fd5b50610667611181565b6040516106749190612f12565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190613274565b611187565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190613077565b6112bb565b6040516106da91906130d2565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613077565b611388565b60405161071791906130d2565b60405180910390f35b34801561072c57600080fd5b50610747600480360381019061074291906130ed565b6113a6565b60405161075491906130d2565b60405180910390f35b34801561076957600080fd5b506107726113c6565b60405161077f91906130d2565b60405180910390f35b34801561079457600080fd5b5061079d6113d9565b6040516107aa9190612f12565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613274565b6113df565b005b3480156107e857600080fd5b506107f161151f565b6040516107fe91906130d2565b60405180910390f35b34801561081357600080fd5b5061081c611532565b6040516108299190612f12565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906132b4565b611538565b6040516108669190612f12565b60405180910390f35b34801561087b57600080fd5b506108846115bf565b6040516108919190612f12565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc91906130ed565b6115c5565b005b3480156108cf57600080fd5b506108ea60048036038101906108e591906130ed565b6116a4565b005b3480156108f857600080fd5b5061090161186b565b60405161090e9190612f12565b60405180910390f35b600f5481565b60606005805461092c90613323565b80601f016020809104026020016040519081016040528092919081815260200182805461095890613323565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b60006109c36109bc6118cf565b84846118d7565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600454905090565b610a236118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa9906133a1565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b03848484611b2f565b610bc484610b0f6118cf565b610bbf85604051806060016040528060288152602001613e8c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b756118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6118d7565b600190509392505050565b61dead81565b60006009905090565b6000610c87610beb6118cf565b84610c828560016000610bfc6118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187190919063ffffffff16565b6118d7565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d816118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e07906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ed96118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f906133a1565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b610fd16118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611057906133a1565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555042601081905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600680546110fe90613323565b80601f016020809104026020016040519081016040528092919081815260200182805461112a90613323565b80156111775780601f1061114c57610100808354040283529160200191611177565b820191906000526020600020905b81548152906001019060200180831161115a57829003601f168201915b5050505050905090565b600e5481565b61118f6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906133a1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613433565b60405180910390fd5b6112b78282612764565b5050565b600061137e6112c86118cf565b8461137985604051806060016040528060258152602001613eb460259139600160006112f26118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6118d7565b6001905092915050565b600061139c6113956118cf565b8484611b2f565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b60105481565b6113e76118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906133a1565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161151391906130d2565b60405180910390a25050565b600c60049054906101000a900460ff1681565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6115cd6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611653906133a1565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6116ac6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611732906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906134c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60008082846118809190613514565b9050838110156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc906135b6565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e90613648565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae906136da565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611ac55743600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b229190612f12565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b969061376c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906137fe565b60405180910390fd5b60008111611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990613890565b60405180910390fd5b6000806003600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca19190613514565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541090506000831415611d0057611cf985856000612805565b50506126fb565b600c60009054906101000a900460ff16156121fb57611d1d61109f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611d8b5750611d5b61109f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611dc45750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611dfe575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611e175750600760149054906101000a900460ff16155b156121fa57600c60019054906101000a900460ff16611f1157601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ed15750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f07906138fc565b60405180910390fd5b5b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fb45750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561205b57600954831115611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff59061398e565b60405180910390fd5b600b5461200a85610d31565b846120159190613514565b1115612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d906139fa565b60405180910390fd5b6121f9565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120fe5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561214d57600954831115612148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213f90613a8c565b60405180910390fd5b6121f8565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121f757600b546121aa85610d31565b846121b59190613514565b11156121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed906139fa565b60405180910390fd5b5b5b5b5b5b600061220630610d31565b90506000600a54821015905080801561222b5750600c60029054906101000a900460ff165b80156122445750600760149054906101000a900460ff16155b801561229a5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122f05750601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123465750601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238a576001600760146101000a81548160ff02191690831515021790555061236e612a9a565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124405750601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561244a57600090505b600081156126e957601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124e0576000955084156124b357600895505b6124d9600a6124cb888a612b8090919063ffffffff16565b612bfb90919063ffffffff16565b90506126c5565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125845750601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125c55760009550841561259857600895505b6125be600a6125b0888a612b8090919063ffffffff16565b612bfb90919063ffffffff16565b90506126c4565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126c357600090506000600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414801561267857506101686010546126759190613514565b42105b156126c25743600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b60008111156126da576126d9893083612805565b5b80876126e69190613aac565b96505b6126f4898989612805565b5050505050505b505050565b6000838311158290612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f9190612fc6565b60405180910390fd5b50600083856127579190613aac565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286c9061376c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc906137fe565b60405180910390fd5b6128f0838383612c45565b61295b81604051806060016040528060268152602001613e66602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129ee816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a8d9190612f12565b60405180910390a3505050565b6000612aa530610d31565b9050600080821415612ab8575050612b7e565b600a8054612ac69190613ae0565b821115612ade57600a8054612adb9190613ae0565b91505b6000829050612aec81612c4a565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612b3290613b6b565b60006040518083038185875af1925050503d8060008114612b6f576040519150601f19603f3d011682016040523d82523d6000602084013e612b74565b606091505b5050809250505050505b565b600080831415612b935760009050612bf5565b60008284612ba19190613ae0565b9050828482612bb09190613baf565b14612bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be790613c52565b60405180910390fd5b809150505b92915050565b6000612c3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e96565b905092915050565b505050565b6000600267ffffffffffffffff811115612c6757612c66613c72565b5b604051908082528060200260200182016040528015612c955781602001602082028036833780820191505090505b5090503081600081518110612cad57612cac613ca1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4d57600080fd5b505afa158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d859190613ce5565b81600181518110612d9957612d98613ca1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dfe307f0000000000000000000000000000000000000000000000000000000000000000846118d7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e60959493929190613e0b565b600060405180830381600087803b158015612e7a57600080fd5b505af1158015612e8e573d6000803e3d6000fd5b505050505050565b60008083118290612edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed49190612fc6565b60405180910390fd5b5060008385612eec9190613baf565b9050809150509392505050565b6000819050919050565b612f0c81612ef9565b82525050565b6000602082019050612f276000830184612f03565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f67578082015181840152602081019050612f4c565b83811115612f76576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f9882612f2d565b612fa28185612f38565b9350612fb2818560208601612f49565b612fbb81612f7c565b840191505092915050565b60006020820190508181036000830152612fe08184612f8d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061301882612fed565b9050919050565b6130288161300d565b811461303357600080fd5b50565b6000813590506130458161301f565b92915050565b61305481612ef9565b811461305f57600080fd5b50565b6000813590506130718161304b565b92915050565b6000806040838503121561308e5761308d612fe8565b5b600061309c85828601613036565b92505060206130ad85828601613062565b9150509250929050565b60008115159050919050565b6130cc816130b7565b82525050565b60006020820190506130e760008301846130c3565b92915050565b60006020828403121561310357613102612fe8565b5b600061311184828501613036565b91505092915050565b6000819050919050565b600061313f61313a61313584612fed565b61311a565b612fed565b9050919050565b600061315182613124565b9050919050565b600061316382613146565b9050919050565b61317381613158565b82525050565b600060208201905061318e600083018461316a565b92915050565b6000806000606084860312156131ad576131ac612fe8565b5b60006131bb86828701613036565b93505060206131cc86828701613036565b92505060406131dd86828701613062565b9150509250925092565b6131f08161300d565b82525050565b600060208201905061320b60008301846131e7565b92915050565b600060ff82169050919050565b61322781613211565b82525050565b6000602082019050613242600083018461321e565b92915050565b613251816130b7565b811461325c57600080fd5b50565b60008135905061326e81613248565b92915050565b6000806040838503121561328b5761328a612fe8565b5b600061329985828601613036565b92505060206132aa8582860161325f565b9150509250929050565b600080604083850312156132cb576132ca612fe8565b5b60006132d985828601613036565b92505060206132ea85828601613036565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061333b57607f821691505b6020821081141561334f5761334e6132f4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061338b602083612f38565b915061339682613355565b602082019050919050565b600060208201905081810360008301526133ba8161337e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061341d603983612f38565b9150613428826133c1565b604082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134af602683612f38565b91506134ba82613453565b604082019050919050565b600060208201905081810360008301526134de816134a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351f82612ef9565b915061352a83612ef9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561355f5761355e6134e5565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006135a0601b83612f38565b91506135ab8261356a565b602082019050919050565b600060208201905081810360008301526135cf81613593565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613632602483612f38565b915061363d826135d6565b604082019050919050565b6000602082019050818103600083015261366181613625565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c4602283612f38565b91506136cf82613668565b604082019050919050565b600060208201905081810360008301526136f3816136b7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613756602583612f38565b9150613761826136fa565b604082019050919050565b6000602082019050818103600083015261378581613749565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006137e8602383612f38565b91506137f38261378c565b604082019050919050565b60006020820190508181036000830152613817816137db565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061387a602983612f38565b91506138858261381e565b604082019050919050565b600060208201905081810360008301526138a98161386d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006138e6601683612f38565b91506138f1826138b0565b602082019050919050565b60006020820190508181036000830152613915816138d9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613978603583612f38565b91506139838261391c565b604082019050919050565b600060208201905081810360008301526139a78161396b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006139e4601383612f38565b91506139ef826139ae565b602082019050919050565b60006020820190508181036000830152613a13816139d7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613a76603683612f38565b9150613a8182613a1a565b604082019050919050565b60006020820190508181036000830152613aa581613a69565b9050919050565b6000613ab782612ef9565b9150613ac283612ef9565b925082821015613ad557613ad46134e5565b5b828203905092915050565b6000613aeb82612ef9565b9150613af683612ef9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2f57613b2e6134e5565b5b828202905092915050565b600081905092915050565b50565b6000613b55600083613b3a565b9150613b6082613b45565b600082019050919050565b6000613b7682613b48565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613bba82612ef9565b9150613bc583612ef9565b925082613bd557613bd4613b80565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c3c602183612f38565b9150613c4782613be0565b604082019050919050565b60006020820190508181036000830152613c6b81613c2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613cdf8161301f565b92915050565b600060208284031215613cfb57613cfa612fe8565b5b6000613d0984828501613cd0565b91505092915050565b6000819050919050565b6000613d37613d32613d2d84613d12565b61311a565b612ef9565b9050919050565b613d4781613d1c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d828161300d565b82525050565b6000613d948383613d79565b60208301905092915050565b6000602082019050919050565b6000613db882613d4d565b613dc28185613d58565b9350613dcd83613d69565b8060005b83811015613dfe578151613de58882613d88565b9750613df083613da0565b925050600181019050613dd1565b5085935050505092915050565b600060a082019050613e206000830188612f03565b613e2d6020830187613d3e565b8181036040830152613e3f8186613dad565b9050613e4e60608301856131e7565b613e5b6080830184612f03565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220884b13c80f913784e09e8d092e299f129457119d72e0988eb8841f9d033a60ec64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638a8c523c11610123578063bbc0c742116100ab578063dd62ed3e1161006f578063dd62ed3e14610832578063e2f456051461086f578063edc263531461089a578063f2fde38b146108c3578063f8b45b05146108ec57610230565b8063bbc0c7421461075d578063bf56b37114610788578063c0246668146107b3578063c876d0b9146107dc578063c8c8ebe41461080757610230565b8063975d71e2116100f2578063975d71e2146106525780639a7a23d61461067d578063a457c2d7146106a6578063a9059cbb146106e3578063b62496f51461072057610230565b80638a8c523c146105ba5780638da5cb5b146105d15780638ea5220f146105fc57806395d89b411461062757610230565b8063313ce567116101b15780636ddd1713116101755780636ddd1713146104e757806370a0823114610512578063715018a61461054f5780637571336a146105665780637ab439831461058f57610230565b8063313ce567146103ec578063395093511461041757806349bd5a5e146104545780634a62bb651461047f5780634fbee193146104aa57610230565b80631694505e116101f85780631694505e1461030557806318160ddd146103305780631816467f1461035b57806323b872dd1461038457806327c8f835146103c157610230565b8063047fc9aa1461023557806306fdde0314610260578063095ea7b31461028b57806310d5de53146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610917565b6040516102579190612f12565b60405180910390f35b34801561026c57600080fd5b5061027561091d565b6040516102829190612fc6565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190613077565b6109af565b6040516102bf91906130d2565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea91906130ed565b6109cd565b6040516102fc91906130d2565b60405180910390f35b34801561031157600080fd5b5061031a6109ed565b6040516103279190613179565b60405180910390f35b34801561033c57600080fd5b50610345610a11565b6040516103529190612f12565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d91906130ed565b610a1b565b005b34801561039057600080fd5b506103ab60048036038101906103a69190613194565b610af6565b6040516103b891906130d2565b60405180910390f35b3480156103cd57600080fd5b506103d6610bcf565b6040516103e391906131f6565b60405180910390f35b3480156103f857600080fd5b50610401610bd5565b60405161040e919061322d565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190613077565b610bde565b60405161044b91906130d2565b60405180910390f35b34801561046057600080fd5b50610469610c91565b60405161047691906131f6565b60405180910390f35b34801561048b57600080fd5b50610494610cb5565b6040516104a191906130d2565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc91906130ed565b610cc8565b6040516104de91906130d2565b60405180910390f35b3480156104f357600080fd5b506104fc610d1e565b60405161050991906130d2565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906130ed565b610d31565b6040516105469190612f12565b60405180910390f35b34801561055b57600080fd5b50610564610d79565b005b34801561057257600080fd5b5061058d60048036038101906105889190613274565b610ed1565b005b34801561059b57600080fd5b506105a4610fc3565b6040516105b19190612f12565b60405180910390f35b3480156105c657600080fd5b506105cf610fc9565b005b3480156105dd57600080fd5b506105e661109f565b6040516105f391906131f6565b60405180910390f35b34801561060857600080fd5b506106116110c9565b60405161061e91906131f6565b60405180910390f35b34801561063357600080fd5b5061063c6110ef565b6040516106499190612fc6565b60405180910390f35b34801561065e57600080fd5b50610667611181565b6040516106749190612f12565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190613274565b611187565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190613077565b6112bb565b6040516106da91906130d2565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613077565b611388565b60405161071791906130d2565b60405180910390f35b34801561072c57600080fd5b50610747600480360381019061074291906130ed565b6113a6565b60405161075491906130d2565b60405180910390f35b34801561076957600080fd5b506107726113c6565b60405161077f91906130d2565b60405180910390f35b34801561079457600080fd5b5061079d6113d9565b6040516107aa9190612f12565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613274565b6113df565b005b3480156107e857600080fd5b506107f161151f565b6040516107fe91906130d2565b60405180910390f35b34801561081357600080fd5b5061081c611532565b6040516108299190612f12565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906132b4565b611538565b6040516108669190612f12565b60405180910390f35b34801561087b57600080fd5b506108846115bf565b6040516108919190612f12565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc91906130ed565b6115c5565b005b3480156108cf57600080fd5b506108ea60048036038101906108e591906130ed565b6116a4565b005b3480156108f857600080fd5b5061090161186b565b60405161090e9190612f12565b60405180910390f35b600f5481565b60606005805461092c90613323565b80601f016020809104026020016040519081016040528092919081815260200182805461095890613323565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b60006109c36109bc6118cf565b84846118d7565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600454905090565b610a236118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa9906133a1565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b03848484611b2f565b610bc484610b0f6118cf565b610bbf85604051806060016040528060288152602001613e8c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b756118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6118d7565b600190509392505050565b61dead81565b60006009905090565b6000610c87610beb6118cf565b84610c828560016000610bfc6118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187190919063ffffffff16565b6118d7565b6001905092915050565b7f000000000000000000000000eb898b0e1fd56c97ac23d807acce26f02eeaa35581565b600c60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d816118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e07906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610ed96118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f906133a1565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b610fd16118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611057906133a1565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555042601081905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600680546110fe90613323565b80601f016020809104026020016040519081016040528092919081815260200182805461112a90613323565b80156111775780601f1061114c57610100808354040283529160200191611177565b820191906000526020600020905b81548152906001019060200180831161115a57829003601f168201915b5050505050905090565b600e5481565b61118f6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611215906133a1565b60405180910390fd5b7f000000000000000000000000eb898b0e1fd56c97ac23d807acce26f02eeaa35573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613433565b60405180910390fd5b6112b78282612764565b5050565b600061137e6112c86118cf565b8461137985604051806060016040528060258152602001613eb460259139600160006112f26118cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6118d7565b6001905092915050565b600061139c6113956118cf565b8484611b2f565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b60105481565b6113e76118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906133a1565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161151391906130d2565b60405180910390a25050565b600c60049054906101000a900460ff1681565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6115cd6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611653906133a1565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6116ac6118cf565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611732906133a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906134c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60008082846118809190613514565b9050838110156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc906135b6565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e90613648565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae906136da565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611ac55743600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b229190612f12565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b969061376c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906137fe565b60405180910390fd5b60008111611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990613890565b60405180910390fd5b6000806003600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ca19190613514565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541090506000831415611d0057611cf985856000612805565b50506126fb565b600c60009054906101000a900460ff16156121fb57611d1d61109f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611d8b5750611d5b61109f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611dc45750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611dfe575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611e175750600760149054906101000a900460ff16155b156121fa57600c60019054906101000a900460ff16611f1157601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ed15750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f07906138fc565b60405180910390fd5b5b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fb45750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561205b57600954831115611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff59061398e565b60405180910390fd5b600b5461200a85610d31565b846120159190613514565b1115612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d906139fa565b60405180910390fd5b6121f9565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120fe5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561214d57600954831115612148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213f90613a8c565b60405180910390fd5b6121f8565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121f757600b546121aa85610d31565b846121b59190613514565b11156121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed906139fa565b60405180910390fd5b5b5b5b5b5b600061220630610d31565b90506000600a54821015905080801561222b5750600c60029054906101000a900460ff165b80156122445750600760149054906101000a900460ff16155b801561229a5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122f05750601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123465750601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238a576001600760146101000a81548160ff02191690831515021790555061236e612a9a565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124405750601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561244a57600090505b600081156126e957601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124e0576000955084156124b357600895505b6124d9600a6124cb888a612b8090919063ffffffff16565b612bfb90919063ffffffff16565b90506126c5565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125845750601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125c55760009550841561259857600895505b6125be600a6125b0888a612b8090919063ffffffff16565b612bfb90919063ffffffff16565b90506126c4565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126c357600090506000600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414801561267857506101686010546126759190613514565b42105b156126c25743600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b60008111156126da576126d9893083612805565b5b80876126e69190613aac565b96505b6126f4898989612805565b5050505050505b505050565b6000838311158290612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f9190612fc6565b60405180910390fd5b50600083856127579190613aac565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286c9061376c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc906137fe565b60405180910390fd5b6128f0838383612c45565b61295b81604051806060016040528060268152602001613e66602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127009092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129ee816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a8d9190612f12565b60405180910390a3505050565b6000612aa530610d31565b9050600080821415612ab8575050612b7e565b600a8054612ac69190613ae0565b821115612ade57600a8054612adb9190613ae0565b91505b6000829050612aec81612c4a565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612b3290613b6b565b60006040518083038185875af1925050503d8060008114612b6f576040519150601f19603f3d011682016040523d82523d6000602084013e612b74565b606091505b5050809250505050505b565b600080831415612b935760009050612bf5565b60008284612ba19190613ae0565b9050828482612bb09190613baf565b14612bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be790613c52565b60405180910390fd5b809150505b92915050565b6000612c3d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e96565b905092915050565b505050565b6000600267ffffffffffffffff811115612c6757612c66613c72565b5b604051908082528060200260200182016040528015612c955781602001602082028036833780820191505090505b5090503081600081518110612cad57612cac613ca1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4d57600080fd5b505afa158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d859190613ce5565b81600181518110612d9957612d98613ca1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dfe307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118d7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e60959493929190613e0b565b600060405180830381600087803b158015612e7a57600080fd5b505af1158015612e8e573d6000803e3d6000fd5b505050505050565b60008083118290612edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed49190612fc6565b60405180910390fd5b5060008385612eec9190613baf565b9050809150509392505050565b6000819050919050565b612f0c81612ef9565b82525050565b6000602082019050612f276000830184612f03565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f67578082015181840152602081019050612f4c565b83811115612f76576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f9882612f2d565b612fa28185612f38565b9350612fb2818560208601612f49565b612fbb81612f7c565b840191505092915050565b60006020820190508181036000830152612fe08184612f8d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061301882612fed565b9050919050565b6130288161300d565b811461303357600080fd5b50565b6000813590506130458161301f565b92915050565b61305481612ef9565b811461305f57600080fd5b50565b6000813590506130718161304b565b92915050565b6000806040838503121561308e5761308d612fe8565b5b600061309c85828601613036565b92505060206130ad85828601613062565b9150509250929050565b60008115159050919050565b6130cc816130b7565b82525050565b60006020820190506130e760008301846130c3565b92915050565b60006020828403121561310357613102612fe8565b5b600061311184828501613036565b91505092915050565b6000819050919050565b600061313f61313a61313584612fed565b61311a565b612fed565b9050919050565b600061315182613124565b9050919050565b600061316382613146565b9050919050565b61317381613158565b82525050565b600060208201905061318e600083018461316a565b92915050565b6000806000606084860312156131ad576131ac612fe8565b5b60006131bb86828701613036565b93505060206131cc86828701613036565b92505060406131dd86828701613062565b9150509250925092565b6131f08161300d565b82525050565b600060208201905061320b60008301846131e7565b92915050565b600060ff82169050919050565b61322781613211565b82525050565b6000602082019050613242600083018461321e565b92915050565b613251816130b7565b811461325c57600080fd5b50565b60008135905061326e81613248565b92915050565b6000806040838503121561328b5761328a612fe8565b5b600061329985828601613036565b92505060206132aa8582860161325f565b9150509250929050565b600080604083850312156132cb576132ca612fe8565b5b60006132d985828601613036565b92505060206132ea85828601613036565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061333b57607f821691505b6020821081141561334f5761334e6132f4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061338b602083612f38565b915061339682613355565b602082019050919050565b600060208201905081810360008301526133ba8161337e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061341d603983612f38565b9150613428826133c1565b604082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134af602683612f38565b91506134ba82613453565b604082019050919050565b600060208201905081810360008301526134de816134a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061351f82612ef9565b915061352a83612ef9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561355f5761355e6134e5565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006135a0601b83612f38565b91506135ab8261356a565b602082019050919050565b600060208201905081810360008301526135cf81613593565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613632602483612f38565b915061363d826135d6565b604082019050919050565b6000602082019050818103600083015261366181613625565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c4602283612f38565b91506136cf82613668565b604082019050919050565b600060208201905081810360008301526136f3816136b7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613756602583612f38565b9150613761826136fa565b604082019050919050565b6000602082019050818103600083015261378581613749565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006137e8602383612f38565b91506137f38261378c565b604082019050919050565b60006020820190508181036000830152613817816137db565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061387a602983612f38565b91506138858261381e565b604082019050919050565b600060208201905081810360008301526138a98161386d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006138e6601683612f38565b91506138f1826138b0565b602082019050919050565b60006020820190508181036000830152613915816138d9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613978603583612f38565b91506139838261391c565b604082019050919050565b600060208201905081810360008301526139a78161396b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006139e4601383612f38565b91506139ef826139ae565b602082019050919050565b60006020820190508181036000830152613a13816139d7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613a76603683612f38565b9150613a8182613a1a565b604082019050919050565b60006020820190508181036000830152613aa581613a69565b9050919050565b6000613ab782612ef9565b9150613ac283612ef9565b925082821015613ad557613ad46134e5565b5b828203905092915050565b6000613aeb82612ef9565b9150613af683612ef9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2f57613b2e6134e5565b5b828202905092915050565b600081905092915050565b50565b6000613b55600083613b3a565b9150613b6082613b45565b600082019050919050565b6000613b7682613b48565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613bba82612ef9565b9150613bc583612ef9565b925082613bd557613bd4613b80565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c3c602183612f38565b9150613c4782613be0565b604082019050919050565b60006020820190508181036000830152613c6b81613c2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613cdf8161301f565b92915050565b600060208284031215613cfb57613cfa612fe8565b5b6000613d0984828501613cd0565b91505092915050565b6000819050919050565b6000613d37613d32613d2d84613d12565b61311a565b612ef9565b9050919050565b613d4781613d1c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d828161300d565b82525050565b6000613d948383613d79565b60208301905092915050565b6000602082019050919050565b6000613db882613d4d565b613dc28185613d58565b9350613dcd83613d69565b8060005b83811015613dfe578151613de58882613d88565b9750613df083613da0565b925050600181019050613dd1565b5085935050505092915050565b600060a082019050613e206000830188612f03565b613e2d6020830187613d3e565b8181036040830152613e3f8186613dad565b9050613e4e60608301856131e7565b613e5b6080830184612f03565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220884b13c80f913784e09e8d092e299f129457119d72e0988eb8841f9d033a60ec64736f6c63430008090033

Deployed Bytecode Sourcemap

29585:10216:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30308:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7625:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9791:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30517:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29659:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8744:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34035:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10442:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29762:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8587:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11206:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29717:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30043:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34146:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30123:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8915:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22206:148;;;;;;;;;;;;;:::i;:::-;;33245:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30243:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32970:151;;;;;;;;;;;;;:::i;:::-;;21564:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29854:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7844:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30276:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33587:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11927:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9255:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30739:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30083:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30338:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33397:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30194:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29928:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9493:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29970:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33133:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22509:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30010:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30308:21;;;;:::o;7625:100::-;7679:13;7712:5;7705:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7625:100;:::o;9791:169::-;9874:4;9891:39;9900:12;:10;:12::i;:::-;9914:7;9923:6;9891:8;:39::i;:::-;9948:4;9941:11;;9791:169;;;;:::o;30517:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29659:51::-;;;:::o;8744:108::-;8805:7;8832:12;;8825:19;;8744:108;:::o;34035:103::-;21786:12;:10;:12::i;:::-;21776:22;;:6;;;;;;;;;;;:22;;;21768:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34121:9:::1;34109;;:21;;;;;;;;;;;;;;;;;;34035:103:::0;:::o;10442:355::-;10582:4;10599:36;10609:6;10617:9;10628:6;10599:9;:36::i;:::-;10646:121;10655:6;10663:12;:10;:12::i;:::-;10677:89;10715:6;10677:89;;;;;;;;;;;;;;;;;:11;:19;10689:6;10677:19;;;;;;;;;;;;;;;:33;10697:12;:10;:12::i;:::-;10677:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10646:8;:121::i;:::-;10785:4;10778:11;;10442:355;;;;;:::o;29762:53::-;29808:6;29762:53;:::o;8587:92::-;8645:5;8670:1;8663:8;;8587:92;:::o;11206:218::-;11294:4;11311:83;11320:12;:10;:12::i;:::-;11334:7;11343:50;11382:10;11343:11;:25;11355:12;:10;:12::i;:::-;11343:25;;;;;;;;;;;;;;;:34;11369:7;11343:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11311:8;:83::i;:::-;11412:4;11405:11;;11206:218;;;;:::o;29717:38::-;;;:::o;30043:33::-;;;;;;;;;;;;;:::o;34146:125::-;34211:4;34235:19;:28;34255:7;34235:28;;;;;;;;;;;;;;;;;;;;;;;;;34228:35;;34146:125;;;:::o;30123:31::-;;;;;;;;;;;;;:::o;8915:127::-;8989:7;9016:9;:18;9026:7;9016:18;;;;;;;;;;;;;;;;9009:25;;8915:127;;;:::o;22206:148::-;21786:12;:10;:12::i;:::-;21776:22;;:6;;;;;;;;;;;:22;;;21768:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22313:1:::1;22276:40;;22297:6;;;;;;;;;;;22276:40;;;;;;;;;;;;22344:1;22327:6;;:19;;;;;;;;;;;;;;;;;;22206:148::o:0;33245:144::-;21786:12;:10;:12::i;:::-;21776:22;;:6;;;;;;;;;;;:22;;;21768:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33377:4:::1;33335:31;:39;33367:6;33335:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33245:144:::0;;:::o;30243:26::-;;;;:::o;32970:151::-;21786:12;:10;:12::i;:::-;21776:22;;:6;;;;;;;;;;;:22;;;21768:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33041:4:::1;33025:13;;:20;;;;;;;;;;;;;;;;;;33070:4;33056:11;;:18;;;;;;;;;;;;;;;;;;33098:15;33085:10;:28;;;;32970:151::o:0;21564:79::-;21602:7;21629:6;;;;;;;;;;;21622:13;;21564:79;:::o;29854:24::-;;;;;;;;;;;;;:::o;7844:104::-;7900:13;7933:7;7926:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7844:104;:::o;30276:25::-;;;;:::o;33587:244::-;21786:12;:10;:12::i;:::-;21776:22;;:6;;;;;;;;;;;:22;;;21768:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33694:13:::1;33686:21;;:4;:21;;;;33678:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;33782:41;33811:4;33817:5;33782:28;:41::i;:::-;33587:244:::0;;:::o;11927:269::-;12020:4;12037:129;12046:12;:10;:12::i;:::-;12060:7;12069:96;12108:15;12069:96;;;;;;;;;;;;;;;;;:11;:25;12081:12;:10;:12::i;:::-;12069:25;;;;;;;;;;;;;;;:34;12095:7;12069:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12037:8;:129::i;:::-;12184:4;12177:11;;11927:269;;;;:::o;9255:175::-;9341:4;9358:42;9368:12;:10;:12::i;:::-;9382:9;9393:6;9358:9;:42::i;:::-;9418:4;9411:11;;9255:175;;;;:::o;30739:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30083:33::-;;;;;;;;;;;;;:::o;30338:25::-;;;;:::o;33397:182::-;21786:12;:10;:12::i;:::-;21776:22;;:6;;;;;;;;;;;:22;;;21768:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33513:8:::1;33482:19;:28;33502:7;33482:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33553:7;33537:34;;;33562:8;33537:34;;;;;;:::i;:::-;;;;;;;;33397:182:::0;;:::o;30194:40::-;;;;;;;;;;;;;:::o;29928:35::-;;;;:::o;9493:151::-;9582:7;9609:11;:18;9621:5;9609:18;;;;;;;;;;;;;;;:27;9628:7;9609:27;;;;;;;;;;;;;;;;9602:34;;9493:151;;;;:::o;29970:33::-;;;;:::o;33133:104::-;21786:12;:10;:12::i;:::-;21776:22;;:6;;;;;;;;;;;:22;;;21768:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33228:1:::1;33203:15;:22;33219:5;33203:22;;;;;;;;;;;;;;;:26;;;;33133:104:::0;:::o;22509:244::-;21786:12;:10;:12::i;:::-;21776:22;;:6;;;;;;;;;;;:22;;;21768:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22618:1:::1;22598:22;;:8;:22;;;;22590:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22708:8;22679:38;;22700:6;;;;;;;;;;;22679:38;;;;;;;;;;;;22737:8;22728:6;;:17;;;;;;;;;;;;;;;;;;22509:244:::0;:::o;30010:24::-;;;;:::o;16608:181::-;16666:7;16686:9;16702:1;16698;:5;;;;:::i;:::-;16686:17;;16727:1;16722;:6;;16714:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16780:1;16773:8;;;16608:181;;;;:::o;136:98::-;189:7;216:10;209:17;;136:98;:::o;15113:497::-;15266:1;15249:19;;:5;:19;;;;15241:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15347:1;15328:21;;:7;:21;;;;15320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15431:6;15401:11;:18;15413:5;15401:18;;;;;;;;;;;;;;;:27;15420:7;15401:27;;;;;;;;;;;;;;;:36;;;;15482:1;15451:20;:27;15472:5;15451:27;;;;;;;;;;;;;;;;:32;15448:106;;;15530:12;15500:20;:27;15521:5;15500:27;;;;;;;;;;;;;;;:42;;;;15448:106;15586:7;15570:32;;15579:5;15570:32;;;15595:6;15570:32;;;;;;:::i;:::-;;;;;;;;15113:497;;;:::o;34287:3846::-;34435:1;34419:18;;:4;:18;;;;34411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34512:1;34498:16;;:2;:16;;;;34490:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34584:1;34575:6;:10;34567:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34642:17;34670:12;34757:1;34733:15;:21;34749:4;34733:21;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;34704:20;:26;34725:4;34704:26;;;;;;;;;;;;;;;;:54;34693:66;;34794:1;34784:6;:11;34781:92;;;34812:28;34828:4;34834:2;34838:1;34812:15;:28::i;:::-;34855:7;;;;34781:92;34896:14;;;;;;;;;;;34893:1249;;;34956:7;:5;:7::i;:::-;34948:15;;:4;:15;;;;:49;;;;;34990:7;:5;:7::i;:::-;34984:13;;:2;:13;;;;34948:49;:86;;;;;35032:1;35018:16;;:2;:16;;;;34948:86;:128;;;;;35069:6;35055:21;;:2;:21;;;;34948:128;:158;;;;;35098:8;;;;;;;;;;;35097:9;34948:158;34926:1205;;;35144:13;;;;;;;;;;;35140:148;;35189:19;:25;35209:4;35189:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35218:19;:23;35238:2;35218:23;;;;;;;;;;;;;;;;;;;;;;;;;35189:52;35181:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35140:148;35342:25;:31;35368:4;35342:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;35378:31;:35;35410:2;35378:35;;;;;;;;;;;;;;;;;;;;;;;;;35377:36;35342:71;35338:778;;;35460:20;;35450:6;:30;;35442:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;35599:9;;35582:13;35592:2;35582:9;:13::i;:::-;35573:6;:22;;;;:::i;:::-;:35;;35565:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35338:778;;;35726:25;:29;35752:2;35726:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;35760:31;:37;35792:4;35760:37;;;;;;;;;;;;;;;;;;;;;;;;;35759:38;35726:71;35722:394;;;35844:20;;35834:6;:30;;35826:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;35722:394;;;35970:31;:35;36002:2;35970:35;;;;;;;;;;;;;;;;;;;;;;;;;35966:150;;36063:9;;36046:13;36056:2;36046:9;:13::i;:::-;36037:6;:22;;;;:::i;:::-;:35;;36029:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35966:150;35722:394;35338:778;34926:1205;34893:1249;36176:28;36207:24;36225:4;36207:9;:24::i;:::-;36176:55;;36252:12;36291:18;;36267:20;:42;;36252:57;;36340:7;:35;;;;;36364:11;;;;;;;;;;;36340:35;:61;;;;;36393:8;;;;;;;;;;;36392:9;36340:61;:110;;;;;36419:25;:31;36445:4;36419:31;;;;;;;;;;;;;;;;;;;;;;;;;36418:32;36340:110;:153;;;;;36468:19;:25;36488:4;36468:25;;;;;;;;;;;;;;;;;;;;;;;;;36467:26;36340:153;:194;;;;;36511:19;:23;36531:2;36511:23;;;;;;;;;;;;;;;;;;;;;;;;;36510:24;36340:194;36322:338;;;36572:4;36561:8;;:15;;;;;;;;;;;;;;;;;;36605:10;:8;:10::i;:::-;36643:5;36632:8;;:16;;;;;;;;;;;;;;;;;;36322:338;36680:12;36696:8;;;;;;;;;;;36695:9;36680:24;;36805:19;:25;36825:4;36805:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36834:19;:23;36854:2;36834:23;;;;;;;;;;;;;;;;;;;;;;;;;36805:52;36802:99;;;36884:5;36874:15;;36802:99;36921:12;37025:7;37022:1058;;;37076:25;:29;37102:2;37076:29;;;;;;;;;;;;;;;;;;;;;;;;;37072:841;;;37137:1;37125:13;;37164:7;37161:75;;;37211:1;37199:13;;37161:75;37263:29;37289:2;37263:21;37274:9;37263:6;:10;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;37256:36;;37072:841;;;37332:25;:31;37358:4;37332:31;;;;;;;;;;;;;;;;;;;;;;;;;37331:32;:66;;;;;37368:25;:29;37394:2;37368:29;;;;;;;;;;;;;;;;;;;;;;;;;37367:30;37331:66;37327:586;;;37430:1;37418:13;;37457:7;37454:75;;;37504:1;37492:13;;37454:75;37576:29;37602:2;37576:21;37587:9;37576:6;:10;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;37569:36;;37327:586;;;37668:25;:31;37694:4;37668:31;;;;;;;;;;;;;;;;;;;;;;;;;37665:248;;;37724:1;37717:8;;37771:1;37748:15;:19;37764:2;37748:19;;;;;;;;;;;;;;;;:24;:68;;;;;37807:9;37794:10;;:22;;;;:::i;:::-;37776:15;:40;37748:68;37744:154;;;37866:12;37844:15;:19;37860:2;37844:19;;;;;;;;;;;;;;;:34;;;;37744:154;37665:248;37327:586;37072:841;37951:1;37944:4;:8;37941:91;;;37972:42;37988:4;38002;38009;37972:15;:42::i;:::-;37941:91;38064:4;38054:14;;;;;:::i;:::-;;;37022:1058;38092:33;38108:4;38114:2;38118:6;38092:15;:33::i;:::-;34400:3733;;;;;;34287:3846;;;;:::o;17511:192::-;17597:7;17630:1;17625;:6;;17633:12;17617:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17657:9;17673:1;17669;:5;;;;:::i;:::-;17657:17;;17694:1;17687:8;;;17511:192;;;;;:::o;33839:188::-;33956:5;33922:25;:31;33948:4;33922:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34013:5;33979:40;;34007:4;33979:40;;;;;;;;;;;;33839:188;;:::o;12686:573::-;12844:1;12826:20;;:6;:20;;;;12818:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12928:1;12907:23;;:9;:23;;;;12899:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12983:47;13004:6;13012:9;13023:6;12983:20;:47::i;:::-;13063:71;13085:6;13063:71;;;;;;;;;;;;;;;;;:9;:17;13073:6;13063:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13043:9;:17;13053:6;13043:17;;;;;;;;;;;;;;;:91;;;;13168:32;13193:6;13168:9;:20;13178:9;13168:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13145:9;:20;13155:9;13145:20;;;;;;;;;;;;;;;:55;;;;13233:9;13216:35;;13225:6;13216:35;;;13244:6;13216:35;;;;;;:::i;:::-;;;;;;;;12686:573;;;:::o;39291:503::-;39330:23;39356:24;39374:4;39356:9;:24::i;:::-;39330:50;;39391:12;39446:1;39427:15;:20;39424:34;;;39450:7;;;;39424:34;39512:2;39491:18;;:23;;;;:::i;:::-;39473:15;:41;39470:111;;;39567:2;39546:18;;:23;;;;:::i;:::-;39528:41;;39470:111;39601:26;39630:15;39601:44;;39658:36;39675:18;39658:16;:36::i;:::-;39737:9;;;;;;;;;;;39729:23;;39760:21;39729:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39716:70;;;;;39319:475;;;39291:503;:::o;17962:471::-;18020:7;18270:1;18265;:6;18261:47;;;18295:1;18288:8;;;;18261:47;18320:9;18336:1;18332;:5;;;;:::i;:::-;18320:17;;18365:1;18360;18356;:5;;;;:::i;:::-;:10;18348:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18424:1;18417:8;;;17962:471;;;;;:::o;18909:132::-;18967:7;18994:39;18998:1;19001;18994:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18987:46;;18909:132;;;;:::o;16213:125::-;;;;:::o;38141:601::-;38269:21;38307:1;38293:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38269:40;;38338:4;38320;38325:1;38320:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38364:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38354:4;38359:1;38354:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38399:62;38416:4;38431:15;38449:11;38399:8;:62::i;:::-;38500:15;:66;;;38581:11;38607:1;38651:4;38678;38698:15;38500:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38196:546;38141:601;:::o;19537:278::-;19623:7;19655:1;19651;:5;19658:12;19643:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19682:9;19698:1;19694;:5;;;;:::i;:::-;19682:17;;19806:1;19799:8;;;19537:278;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:116::-;6636:21;6651:5;6636:21;:::i;:::-;6629:5;6626:32;6616:60;;6672:1;6669;6662:12;6616:60;6566:116;:::o;6688:133::-;6731:5;6769:6;6756:20;6747:29;;6785:30;6809:5;6785:30;:::i;:::-;6688:133;;;;:::o;6827:468::-;6892:6;6900;6949:2;6937:9;6928:7;6924:23;6920:32;6917:119;;;6955:79;;:::i;:::-;6917:119;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7202:2;7228:50;7270:7;7261:6;7250:9;7246:22;7228:50;:::i;:::-;7218:60;;7173:115;6827:468;;;;;:::o;7301:474::-;7369:6;7377;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:53;7622:7;7613:6;7602:9;7598:22;7577:53;:::i;:::-;7567:63;;7523:117;7679:2;7705:53;7750:7;7741:6;7730:9;7726:22;7705:53;:::i;:::-;7695:63;;7650:118;7301:474;;;;;:::o;7781:180::-;7829:77;7826:1;7819:88;7926:4;7923:1;7916:15;7950:4;7947:1;7940:15;7967:320;8011:6;8048:1;8042:4;8038:12;8028:22;;8095:1;8089:4;8085:12;8116:18;8106:81;;8172:4;8164:6;8160:17;8150:27;;8106:81;8234:2;8226:6;8223:14;8203:18;8200:38;8197:84;;;8253:18;;:::i;:::-;8197:84;8018:269;7967:320;;;:::o;8293:182::-;8433:34;8429:1;8421:6;8417:14;8410:58;8293:182;:::o;8481:366::-;8623:3;8644:67;8708:2;8703:3;8644:67;:::i;:::-;8637:74;;8720:93;8809:3;8720:93;:::i;:::-;8838:2;8833:3;8829:12;8822:19;;8481:366;;;:::o;8853:419::-;9019:4;9057:2;9046:9;9042:18;9034:26;;9106:9;9100:4;9096:20;9092:1;9081:9;9077:17;9070:47;9134:131;9260:4;9134:131;:::i;:::-;9126:139;;8853:419;;;:::o;9278:244::-;9418:34;9414:1;9406:6;9402:14;9395:58;9487:27;9482:2;9474:6;9470:15;9463:52;9278:244;:::o;9528:366::-;9670:3;9691:67;9755:2;9750:3;9691:67;:::i;:::-;9684:74;;9767:93;9856:3;9767:93;:::i;:::-;9885:2;9880:3;9876:12;9869:19;;9528:366;;;:::o;9900:419::-;10066:4;10104:2;10093:9;10089:18;10081:26;;10153:9;10147:4;10143:20;10139:1;10128:9;10124:17;10117:47;10181:131;10307:4;10181:131;:::i;:::-;10173:139;;9900:419;;;:::o;10325:225::-;10465:34;10461:1;10453:6;10449:14;10442:58;10534:8;10529:2;10521:6;10517:15;10510:33;10325:225;:::o;10556:366::-;10698:3;10719:67;10783:2;10778:3;10719:67;:::i;:::-;10712:74;;10795:93;10884:3;10795:93;:::i;:::-;10913:2;10908:3;10904:12;10897:19;;10556:366;;;:::o;10928:419::-;11094:4;11132:2;11121:9;11117:18;11109:26;;11181:9;11175:4;11171:20;11167:1;11156:9;11152:17;11145:47;11209:131;11335:4;11209:131;:::i;:::-;11201:139;;10928:419;;;:::o;11353:180::-;11401:77;11398:1;11391:88;11498:4;11495:1;11488:15;11522:4;11519:1;11512:15;11539:305;11579:3;11598:20;11616:1;11598:20;:::i;:::-;11593:25;;11632:20;11650:1;11632:20;:::i;:::-;11627:25;;11786:1;11718:66;11714:74;11711:1;11708:81;11705:107;;;11792:18;;:::i;:::-;11705:107;11836:1;11833;11829:9;11822:16;;11539:305;;;;:::o;11850:177::-;11990:29;11986:1;11978:6;11974:14;11967:53;11850:177;:::o;12033:366::-;12175:3;12196:67;12260:2;12255:3;12196:67;:::i;:::-;12189:74;;12272:93;12361:3;12272:93;:::i;:::-;12390:2;12385:3;12381:12;12374:19;;12033:366;;;:::o;12405:419::-;12571:4;12609:2;12598:9;12594:18;12586:26;;12658:9;12652:4;12648:20;12644:1;12633:9;12629:17;12622:47;12686:131;12812:4;12686:131;:::i;:::-;12678:139;;12405:419;;;:::o;12830:223::-;12970:34;12966:1;12958:6;12954:14;12947:58;13039:6;13034:2;13026:6;13022:15;13015:31;12830:223;:::o;13059:366::-;13201:3;13222:67;13286:2;13281:3;13222:67;:::i;:::-;13215:74;;13298:93;13387:3;13298:93;:::i;:::-;13416:2;13411:3;13407:12;13400:19;;13059:366;;;:::o;13431:419::-;13597:4;13635:2;13624:9;13620:18;13612:26;;13684:9;13678:4;13674:20;13670:1;13659:9;13655:17;13648:47;13712:131;13838:4;13712:131;:::i;:::-;13704:139;;13431:419;;;:::o;13856:221::-;13996:34;13992:1;13984:6;13980:14;13973:58;14065:4;14060:2;14052:6;14048:15;14041:29;13856:221;:::o;14083:366::-;14225:3;14246:67;14310:2;14305:3;14246:67;:::i;:::-;14239:74;;14322:93;14411:3;14322:93;:::i;:::-;14440:2;14435:3;14431:12;14424:19;;14083:366;;;:::o;14455:419::-;14621:4;14659:2;14648:9;14644:18;14636:26;;14708:9;14702:4;14698:20;14694:1;14683:9;14679:17;14672:47;14736:131;14862:4;14736:131;:::i;:::-;14728:139;;14455:419;;;:::o;14880:224::-;15020:34;15016:1;15008:6;15004:14;14997:58;15089:7;15084:2;15076:6;15072:15;15065:32;14880:224;:::o;15110:366::-;15252:3;15273:67;15337:2;15332:3;15273:67;:::i;:::-;15266:74;;15349:93;15438:3;15349:93;:::i;:::-;15467:2;15462:3;15458:12;15451:19;;15110:366;;;:::o;15482:419::-;15648:4;15686:2;15675:9;15671:18;15663:26;;15735:9;15729:4;15725:20;15721:1;15710:9;15706:17;15699:47;15763:131;15889:4;15763:131;:::i;:::-;15755:139;;15482:419;;;:::o;15907:222::-;16047:34;16043:1;16035:6;16031:14;16024:58;16116:5;16111:2;16103:6;16099:15;16092:30;15907:222;:::o;16135:366::-;16277:3;16298:67;16362:2;16357:3;16298:67;:::i;:::-;16291:74;;16374:93;16463:3;16374:93;:::i;:::-;16492:2;16487:3;16483:12;16476:19;;16135:366;;;:::o;16507:419::-;16673:4;16711:2;16700:9;16696:18;16688:26;;16760:9;16754:4;16750:20;16746:1;16735:9;16731:17;16724:47;16788:131;16914:4;16788:131;:::i;:::-;16780:139;;16507:419;;;:::o;16932:228::-;17072:34;17068:1;17060:6;17056:14;17049:58;17141:11;17136:2;17128:6;17124:15;17117:36;16932:228;:::o;17166:366::-;17308:3;17329:67;17393:2;17388:3;17329:67;:::i;:::-;17322:74;;17405:93;17494:3;17405:93;:::i;:::-;17523:2;17518:3;17514:12;17507:19;;17166:366;;;:::o;17538:419::-;17704:4;17742:2;17731:9;17727:18;17719:26;;17791:9;17785:4;17781:20;17777:1;17766:9;17762:17;17755:47;17819:131;17945:4;17819:131;:::i;:::-;17811:139;;17538:419;;;:::o;17963:172::-;18103:24;18099:1;18091:6;18087:14;18080:48;17963:172;:::o;18141:366::-;18283:3;18304:67;18368:2;18363:3;18304:67;:::i;:::-;18297:74;;18380:93;18469:3;18380:93;:::i;:::-;18498:2;18493:3;18489:12;18482:19;;18141:366;;;:::o;18513:419::-;18679:4;18717:2;18706:9;18702:18;18694:26;;18766:9;18760:4;18756:20;18752:1;18741:9;18737:17;18730:47;18794:131;18920:4;18794:131;:::i;:::-;18786:139;;18513:419;;;:::o;18938:240::-;19078:34;19074:1;19066:6;19062:14;19055:58;19147:23;19142:2;19134:6;19130:15;19123:48;18938:240;:::o;19184:366::-;19326:3;19347:67;19411:2;19406:3;19347:67;:::i;:::-;19340:74;;19423:93;19512:3;19423:93;:::i;:::-;19541:2;19536:3;19532:12;19525:19;;19184:366;;;:::o;19556:419::-;19722:4;19760:2;19749:9;19745:18;19737:26;;19809:9;19803:4;19799:20;19795:1;19784:9;19780:17;19773:47;19837:131;19963:4;19837:131;:::i;:::-;19829:139;;19556:419;;;:::o;19981:169::-;20121:21;20117:1;20109:6;20105:14;20098:45;19981:169;:::o;20156:366::-;20298:3;20319:67;20383:2;20378:3;20319:67;:::i;:::-;20312:74;;20395:93;20484:3;20395:93;:::i;:::-;20513:2;20508:3;20504:12;20497:19;;20156:366;;;:::o;20528:419::-;20694:4;20732:2;20721:9;20717:18;20709:26;;20781:9;20775:4;20771:20;20767:1;20756:9;20752:17;20745:47;20809:131;20935:4;20809:131;:::i;:::-;20801:139;;20528:419;;;:::o;20953:241::-;21093:34;21089:1;21081:6;21077:14;21070:58;21162:24;21157:2;21149:6;21145:15;21138:49;20953:241;:::o;21200:366::-;21342:3;21363:67;21427:2;21422:3;21363:67;:::i;:::-;21356:74;;21439:93;21528:3;21439:93;:::i;:::-;21557:2;21552:3;21548:12;21541:19;;21200:366;;;:::o;21572:419::-;21738:4;21776:2;21765:9;21761:18;21753:26;;21825:9;21819:4;21815:20;21811:1;21800:9;21796:17;21789:47;21853:131;21979:4;21853:131;:::i;:::-;21845:139;;21572:419;;;:::o;21997:191::-;22037:4;22057:20;22075:1;22057:20;:::i;:::-;22052:25;;22091:20;22109:1;22091:20;:::i;:::-;22086:25;;22130:1;22127;22124:8;22121:34;;;22135:18;;:::i;:::-;22121:34;22180:1;22177;22173:9;22165:17;;21997:191;;;;:::o;22194:348::-;22234:7;22257:20;22275:1;22257:20;:::i;:::-;22252:25;;22291:20;22309:1;22291:20;:::i;:::-;22286:25;;22479:1;22411:66;22407:74;22404:1;22401:81;22396:1;22389:9;22382:17;22378:105;22375:131;;;22486:18;;:::i;:::-;22375:131;22534:1;22531;22527:9;22516:20;;22194:348;;;;:::o;22548:147::-;22649:11;22686:3;22671:18;;22548:147;;;;:::o;22701:114::-;;:::o;22821:398::-;22980:3;23001:83;23082:1;23077:3;23001:83;:::i;:::-;22994:90;;23093:93;23182:3;23093:93;:::i;:::-;23211:1;23206:3;23202:11;23195:18;;22821:398;;;:::o;23225:379::-;23409:3;23431:147;23574:3;23431:147;:::i;:::-;23424:154;;23595:3;23588:10;;23225:379;;;:::o;23610:180::-;23658:77;23655:1;23648:88;23755:4;23752:1;23745:15;23779:4;23776:1;23769:15;23796:185;23836:1;23853:20;23871:1;23853:20;:::i;:::-;23848:25;;23887:20;23905:1;23887:20;:::i;:::-;23882:25;;23926:1;23916:35;;23931:18;;:::i;:::-;23916:35;23973:1;23970;23966:9;23961:14;;23796:185;;;;:::o;23987:220::-;24127:34;24123:1;24115:6;24111:14;24104:58;24196:3;24191:2;24183:6;24179:15;24172:28;23987:220;:::o;24213:366::-;24355:3;24376:67;24440:2;24435:3;24376:67;:::i;:::-;24369:74;;24452:93;24541:3;24452:93;:::i;:::-;24570:2;24565:3;24561:12;24554:19;;24213:366;;;:::o;24585:419::-;24751:4;24789:2;24778:9;24774:18;24766:26;;24838:9;24832:4;24828:20;24824:1;24813:9;24809:17;24802:47;24866:131;24992:4;24866:131;:::i;:::-;24858:139;;24585:419;;;:::o;25010:180::-;25058:77;25055:1;25048:88;25155:4;25152:1;25145:15;25179:4;25176:1;25169:15;25196:180;25244:77;25241:1;25234:88;25341:4;25338:1;25331:15;25365:4;25362:1;25355:15;25382:143;25439:5;25470:6;25464:13;25455:22;;25486:33;25513:5;25486:33;:::i;:::-;25382:143;;;;:::o;25531:351::-;25601:6;25650:2;25638:9;25629:7;25625:23;25621:32;25618:119;;;25656:79;;:::i;:::-;25618:119;25776:1;25801:64;25857:7;25848:6;25837:9;25833:22;25801:64;:::i;:::-;25791:74;;25747:128;25531:351;;;;:::o;25888:85::-;25933:7;25962:5;25951:16;;25888:85;;;:::o;25979:158::-;26037:9;26070:61;26088:42;26097:32;26123:5;26097:32;:::i;:::-;26088:42;:::i;:::-;26070:61;:::i;:::-;26057:74;;25979:158;;;:::o;26143:147::-;26238:45;26277:5;26238:45;:::i;:::-;26233:3;26226:58;26143:147;;:::o;26296:114::-;26363:6;26397:5;26391:12;26381:22;;26296:114;;;:::o;26416:184::-;26515:11;26549:6;26544:3;26537:19;26589:4;26584:3;26580:14;26565:29;;26416:184;;;;:::o;26606:132::-;26673:4;26696:3;26688:11;;26726:4;26721:3;26717:14;26709:22;;26606:132;;;:::o;26744:108::-;26821:24;26839:5;26821:24;:::i;:::-;26816:3;26809:37;26744:108;;:::o;26858:179::-;26927:10;26948:46;26990:3;26982:6;26948:46;:::i;:::-;27026:4;27021:3;27017:14;27003:28;;26858:179;;;;:::o;27043:113::-;27113:4;27145;27140:3;27136:14;27128:22;;27043:113;;;:::o;27192:732::-;27311:3;27340:54;27388:5;27340:54;:::i;:::-;27410:86;27489:6;27484:3;27410:86;:::i;:::-;27403:93;;27520:56;27570:5;27520:56;:::i;:::-;27599:7;27630:1;27615:284;27640:6;27637:1;27634:13;27615:284;;;27716:6;27710:13;27743:63;27802:3;27787:13;27743:63;:::i;:::-;27736:70;;27829:60;27882:6;27829:60;:::i;:::-;27819:70;;27675:224;27662:1;27659;27655:9;27650:14;;27615:284;;;27619:14;27915:3;27908:10;;27316:608;;;27192:732;;;;:::o;27930:831::-;28193:4;28231:3;28220:9;28216:19;28208:27;;28245:71;28313:1;28302:9;28298:17;28289:6;28245:71;:::i;:::-;28326:80;28402:2;28391:9;28387:18;28378:6;28326:80;:::i;:::-;28453:9;28447:4;28443:20;28438:2;28427:9;28423:18;28416:48;28481:108;28584:4;28575:6;28481:108;:::i;:::-;28473:116;;28599:72;28667:2;28656:9;28652:18;28643:6;28599:72;:::i;:::-;28681:73;28749:3;28738:9;28734:19;28725:6;28681:73;:::i;:::-;27930:831;;;;;;;;:::o

Swarm Source

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