ETH Price: $3,494.74 (+3.04%)
Gas: 4 Gwei

Token

UNITY (UNITY)
 

Overview

Max Total Supply

100,000,000,000 UNITY

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.71938866120950477 UNITY

Value
$0.00
0x29b88ee1b8592e26b3876aa0546dfa6e7754da30
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:
UNITY

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-04
*/

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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



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 UNITY 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 marketingWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;

    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    
    uint256 public tokensForMarketing;
    
    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event BuyBackTriggered(uint256 amount);

    constructor() ERC20("UNITY", "UNITY") {

        address newOwner = address(msg.sender);
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 2;
        
        uint256 _sellMarketingFee = 2;
        
        uint256 totalSupply = 1 * 1e11 * 1e18;
        
        maxTransactionAmount = totalSupply * 2 / 100; // 1% maxTransactionAmountTxn
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyTotalFees = buyMarketingFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellMarketingFee;
        
    	marketingWallet = address(0xE435d07076C0e6476f9278329e65a02Ff781e655); // set as marketing wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(newOwner, 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
        */
        _mint(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {

  	}
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
        maxTransactionAmount = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyTotalFees = buyMarketingFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }
    
    function updateSellFees(uint256 _marketingFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellTotalFees = sellMarketingFee;
        require(sellTotalFees <= 15, "Must keep fees at 30% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){   
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
        }
        
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        bool takeFee = !swapping;

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing ;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        uint256 amountToSwapForETH = contractBalance;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        
        tokensForMarketing = 0;
        
        (bool success,) = address(marketingWallet).call{value: ethForMarketing}("");
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600960006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600581526020017f554e4954590000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f554e4954590000000000000000000000000000000000000000000000000000008152508160039080519060200190620000b192919062000c32565b508060049080519060200190620000ca92919062000c32565b5050506000620000df6200055360201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001af8160016200055b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022a57600080fd5b505afa1580156200023f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000265919062000d4c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c857600080fd5b505afa158015620002dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000303919062000d4c565b6040518363ffffffff1660e01b81526004016200032292919062000d8f565b602060405180830381600087803b1580156200033d57600080fd5b505af115801562000352573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000378919062000d4c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003c060a05160016200055b60201b60201c565b620003d560a05160016200065860201b60201c565b60006002905060006002905060006c01431e0fae6d7217caa00000009050606460028262000404919062000df5565b62000410919062000e85565b60078190555061271060058262000428919062000df5565b62000434919062000e85565b60088190555082600b81905550600b54600a8190555081600d81905550600d54600c8190555073e435d07076c0e6476f9278329e65a02ff781e655600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004c2856001620006f960201b60201c565b620004d5306001620006f960201b60201c565b620004ea61dead6001620006f960201b60201c565b620004fd8560016200055b60201b60201c565b620005103060016200055b60201b60201c565b6200052561dead60016200055b60201b60201c565b6200053785826200084660201b60201c565b6200054885620009f560201b60201c565b5050505050620011e6565b600033905090565b6200056b6200055360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005f49062000f1e565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620007096200055360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200079b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007929062000f1e565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200083a919062000f5d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b09062000fca565b60405180910390fd5b620008cd6000838362000bca60201b60201c565b620008e98160025462000bcf60201b62001c4d1790919060201c565b60028190555062000947816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000bcf60201b62001c4d1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009e9919062000ffd565b60405180910390a35050565b62000a056200055360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8e9062000f1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b019062001090565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000be09190620010b2565b90508381101562000c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1f906200115f565b60405180910390fd5b8091505092915050565b82805462000c4090620011b0565b90600052602060002090601f01602090048101928262000c64576000855562000cb0565b82601f1062000c7f57805160ff191683800117855562000cb0565b8280016001018555821562000cb0579182015b8281111562000caf57825182559160200191906001019062000c92565b5b50905062000cbf919062000cc3565b5090565b5b8082111562000cde57600081600090555060010162000cc4565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d148262000ce7565b9050919050565b62000d268162000d07565b811462000d3257600080fd5b50565b60008151905062000d468162000d1b565b92915050565b60006020828403121562000d655762000d6462000ce2565b5b600062000d758482850162000d35565b91505092915050565b62000d898162000d07565b82525050565b600060408201905062000da6600083018562000d7e565b62000db5602083018462000d7e565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e028262000dbc565b915062000e0f8362000dbc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e4b5762000e4a62000dc6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e928262000dbc565b915062000e9f8362000dbc565b92508262000eb25762000eb162000e56565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f0660208362000ebd565b915062000f138262000ece565b602082019050919050565b6000602082019050818103600083015262000f398162000ef7565b9050919050565b60008115159050919050565b62000f578162000f40565b82525050565b600060208201905062000f74600083018462000f4c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fb2601f8362000ebd565b915062000fbf8262000f7a565b602082019050919050565b6000602082019050818103600083015262000fe58162000fa3565b9050919050565b62000ff78162000dbc565b82525050565b600060208201905062001014600083018462000fec565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200107860268362000ebd565b915062001085826200101a565b604082019050919050565b60006020820190508181036000830152620010ab8162001069565b9050919050565b6000620010bf8262000dbc565b9150620010cc8362000dbc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001104576200110362000dc6565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001147601b8362000ebd565b915062001154826200110f565b602082019050919050565b600060208201905081810360008301526200117a8162001138565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620011c957607f821691505b60208210811415620011e057620011df62001181565b5b50919050565b60805160a0516140866200122860003960008181610d020152611350015260008181610b3301528181612c9901528181612d890152612db001526140866000f3fe6080604052600436106102295760003560e01c806375f0a87411610123578063aacebbe3116100ab578063d85ba0631161006f578063d85ba06314610852578063dd62ed3e1461087d578063e2f45605146108ba578063eba4c333146108e5578063f2fde38b1461090e57610230565b8063aacebbe31461075b578063b62496f514610784578063c0246668146107c1578063c8c8ebe4146107ea578063d257b34f1461081557610230565b8063924de9b7116100f2578063924de9b71461066457806395d89b411461068d5780639a7a23d6146106b8578063a457c2d7146106e1578063a9059cbb1461071e57610230565b806375f0a874146105b85780637bce5a04146105e35780638da5cb5b1461060e578063921369131461063957610230565b8063313ce567116101b15780636ddd1713116101755780636ddd1713146104e757806370a0823114610512578063715018a61461054f57806371fc4688146105665780637571336a1461058f57610230565b8063313ce567146103ec578063395093511461041757806349bd5a5e146104545780634fbee1931461047f5780636a486a8e146104bc57610230565b80631694505e116101f85780631694505e1461030357806318160ddd1461032e5780631f3fed8f1461035957806323b872dd1461038457806327c8f835146103c157610230565b806306fdde0314610235578063095ea7b314610260578063106b5da11461029d57806310d5de53146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610937565b6040516102579190612f8c565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613047565b6109c9565b60405161029491906130a2565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906130bd565b6109e7565b005b3480156102d257600080fd5b506102ed60048036038101906102e891906130ea565b610b11565b6040516102fa91906130a2565b60405180910390f35b34801561030f57600080fd5b50610318610b31565b6040516103259190613176565b60405180910390f35b34801561033a57600080fd5b50610343610b55565b60405161035091906131a0565b60405180910390f35b34801561036557600080fd5b5061036e610b5f565b60405161037b91906131a0565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a691906131bb565b610b65565b6040516103b891906130a2565b60405180910390f35b3480156103cd57600080fd5b506103d6610c3e565b6040516103e3919061321d565b60405180910390f35b3480156103f857600080fd5b50610401610c44565b60405161040e9190613254565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190613047565b610c4d565b60405161044b91906130a2565b60405180910390f35b34801561046057600080fd5b50610469610d00565b604051610476919061321d565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a191906130ea565b610d24565b6040516104b391906130a2565b60405180910390f35b3480156104c857600080fd5b506104d1610d7a565b6040516104de91906131a0565b60405180910390f35b3480156104f357600080fd5b506104fc610d80565b60405161050991906130a2565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906130ea565b610d93565b60405161054691906131a0565b60405180910390f35b34801561055b57600080fd5b50610564610ddb565b005b34801561057257600080fd5b5061058d600480360381019061058891906130bd565b610f33565b005b34801561059b57600080fd5b506105b660048036038101906105b1919061329b565b611023565b005b3480156105c457600080fd5b506105cd611115565b6040516105da919061321d565b60405180910390f35b3480156105ef57600080fd5b506105f861113b565b60405161060591906131a0565b60405180910390f35b34801561061a57600080fd5b50610623611141565b604051610630919061321d565b60405180910390f35b34801561064557600080fd5b5061064e61116b565b60405161065b91906131a0565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906132db565b611171565b005b34801561069957600080fd5b506106a2611225565b6040516106af9190612f8c565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da919061329b565b6112b7565b005b3480156106ed57600080fd5b5061070860048036038101906107039190613047565b6113eb565b60405161071591906130a2565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190613047565b6114b8565b60405161075291906130a2565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d91906130ea565b6114d6565b005b34801561079057600080fd5b506107ab60048036038101906107a691906130ea565b61162d565b6040516107b891906130a2565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e3919061329b565b61164d565b005b3480156107f657600080fd5b506107ff61178d565b60405161080c91906131a0565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906130bd565b611793565b60405161084991906130a2565b60405180910390f35b34801561085e57600080fd5b50610867611903565b60405161087491906131a0565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f9190613308565b611909565b6040516108b191906131a0565b60405180910390f35b3480156108c657600080fd5b506108cf611990565b6040516108dc91906131a0565b60405180910390f35b3480156108f157600080fd5b5061090c600480360381019061090791906130bd565b611996565b005b34801561091a57600080fd5b50610935600480360381019061093091906130ea565b611a86565b005b60606003805461094690613377565b80601f016020809104026020016040519081016040528092919081815260200182805461097290613377565b80156109bf5780601f10610994576101008083540402835291602001916109bf565b820191906000526020600020905b8154815290600101906020018083116109a257829003601f168201915b5050505050905090565b60006109dd6109d6611cab565b8484611cb3565b6001905092915050565b6109ef611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a75906133f5565b60405180910390fd5b670de0b6b3a76400006103e86005610a94610b55565b610a9e9190613444565b610aa891906134cd565b610ab291906134cd565b811015610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb90613570565b60405180910390fd5b670de0b6b3a764000081610b089190613444565b60078190555050565b60106020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600e5481565b6000610b72848484611e7e565b610c3384610b7e611cab565b610c2e8560405180606001604052806028815260200161400460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610be4611cab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126729092919063ffffffff16565b611cb3565b600190509392505050565b61dead81565b60006012905090565b6000610cf6610c5a611cab565b84610cf18560016000610c6b611cab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4d90919063ffffffff16565b611cb3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b600960009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610de3611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e69906133f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f3b611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc1906133f5565b60405180910390fd5b80600b81905550600b54600a81905550600f600a541115611020576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611017906135dc565b60405180910390fd5b50565b61102b611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b1906133f5565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b611179611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff906133f5565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60606004805461123490613377565b80601f016020809104026020016040519081016040528092919081815260200182805461126090613377565b80156112ad5780601f10611282576101008083540402835291602001916112ad565b820191906000526020600020905b81548152906001019060200180831161129057829003601f168201915b5050505050905090565b6112bf611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461134e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611345906133f5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d49061366e565b60405180910390fd5b6113e782826126d6565b5050565b60006114ae6113f8611cab565b846114a98560405180606001604052806025815260200161402c6025913960016000611422611cab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126729092919063ffffffff16565b611cb3565b6001905092915050565b60006114cc6114c5611cab565b8484611e7e565b6001905092915050565b6114de611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611564906133f5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60116020528060005260406000206000915054906101000a900460ff1681565b611655611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db906133f5565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161178191906130a2565b60405180910390a25050565b60075481565b600061179d611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611823906133f5565b60405180910390fd5b620186a0600161183a610b55565b6118449190613444565b61184e91906134cd565b821015611890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188790613700565b60405180910390fd5b6103e8600561189d610b55565b6118a79190613444565b6118b191906134cd565b8211156118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90613792565b60405180910390fd5b8160088190555060019050919050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b61199e611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a24906133f5565b60405180910390fd5b80600d81905550600d54600c81905550600f600c541115611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a906137fe565b60405180910390fd5b50565b611a8e611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b14906133f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490613890565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611c5c91906138b0565b905083811015611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890613952565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a906139e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90613a76565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e7191906131a0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee590613b08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5590613b9a565b60405180910390fd5b6000811415611f7857611f7383836000612777565b61266d565b611f80611141565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fee5750611fbe611141565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120275750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612061575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561207a5750600560149054906101000a900460ff16155b1561226157601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121225750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121715760075481111561216c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216390613c2c565b60405180910390fd5b612260565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122145750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561225f5760075481111561225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590613cbe565b60405180910390fd5b5b5b5b600061226c30610d93565b9050600060085482101590508080156122915750600960009054906101000a900460ff165b80156122aa5750600560149054906101000a900460ff16155b80156123005750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123565750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123ac5750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123f0576001600560146101000a81548160ff0219169083151502179055506123d4612a0c565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124a65750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124b057600090505b6000811561265d57601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561251357506000600c54115b1561257a576125406064612532600c5488612b3090919063ffffffff16565b612bab90919063ffffffff16565b9050600c54600d54826125539190613444565b61255d91906134cd565b600e600082825461256e91906138b0565b92505081905550612639565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125d557506000600a54115b156126385761260260646125f4600a5488612b3090919063ffffffff16565b612bab90919063ffffffff16565b9050600a54600b54826126159190613444565b61261f91906134cd565b600e600082825461263091906138b0565b925050819055505b5b600081111561264e5761264d873083612777565b5b808561265a9190613cde565b94505b612668878787612777565b505050505b505050565b60008383111582906126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b19190612f8c565b60405180910390fd5b50600083856126c99190613cde565b9050809150509392505050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127de90613b08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e90613b9a565b60405180910390fd5b612862838383612bf5565b6128cd81604051806060016040528060268152602001613fde602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126729092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612960816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129ff91906131a0565b60405180910390a3505050565b6000612a1730610d93565b90506000600e5490506000821480612a2f5750600081145b15612a3b575050612b2e565b60008290506000479050612a4e82612bfa565b6000612a638247612e4690919063ffffffff16565b90506000612a8e85612a80600e5485612b3090919063ffffffff16565b612bab90919063ffffffff16565b90506000600e819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612ae090613d43565b60006040518083038185875af1925050503d8060008114612b1d576040519150601f19603f3d011682016040523d82523d6000602084013e612b22565b606091505b50509050505050505050505b565b600080831415612b435760009050612ba5565b60008284612b519190613444565b9050828482612b6091906134cd565b14612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9790613dca565b60405180910390fd5b809150505b92915050565b6000612bed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e90565b905092915050565b505050565b6000600267ffffffffffffffff811115612c1757612c16613dea565b5b604051908082528060200260200182016040528015612c455781602001602082028036833780820191505090505b5090503081600081518110612c5d57612c5c613e19565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612cfd57600080fd5b505afa158015612d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d359190613e5d565b81600181518110612d4957612d48613e19565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dae307f000000000000000000000000000000000000000000000000000000000000000084611cb3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e10959493929190613f83565b600060405180830381600087803b158015612e2a57600080fd5b505af1158015612e3e573d6000803e3d6000fd5b505050505050565b6000612e8883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612672565b905092915050565b60008083118290612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece9190612f8c565b60405180910390fd5b5060008385612ee691906134cd565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f2d578082015181840152602081019050612f12565b83811115612f3c576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f5e82612ef3565b612f688185612efe565b9350612f78818560208601612f0f565b612f8181612f42565b840191505092915050565b60006020820190508181036000830152612fa68184612f53565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fde82612fb3565b9050919050565b612fee81612fd3565b8114612ff957600080fd5b50565b60008135905061300b81612fe5565b92915050565b6000819050919050565b61302481613011565b811461302f57600080fd5b50565b6000813590506130418161301b565b92915050565b6000806040838503121561305e5761305d612fae565b5b600061306c85828601612ffc565b925050602061307d85828601613032565b9150509250929050565b60008115159050919050565b61309c81613087565b82525050565b60006020820190506130b76000830184613093565b92915050565b6000602082840312156130d3576130d2612fae565b5b60006130e184828501613032565b91505092915050565b600060208284031215613100576130ff612fae565b5b600061310e84828501612ffc565b91505092915050565b6000819050919050565b600061313c61313761313284612fb3565b613117565b612fb3565b9050919050565b600061314e82613121565b9050919050565b600061316082613143565b9050919050565b61317081613155565b82525050565b600060208201905061318b6000830184613167565b92915050565b61319a81613011565b82525050565b60006020820190506131b56000830184613191565b92915050565b6000806000606084860312156131d4576131d3612fae565b5b60006131e286828701612ffc565b93505060206131f386828701612ffc565b925050604061320486828701613032565b9150509250925092565b61321781612fd3565b82525050565b6000602082019050613232600083018461320e565b92915050565b600060ff82169050919050565b61324e81613238565b82525050565b60006020820190506132696000830184613245565b92915050565b61327881613087565b811461328357600080fd5b50565b6000813590506132958161326f565b92915050565b600080604083850312156132b2576132b1612fae565b5b60006132c085828601612ffc565b92505060206132d185828601613286565b9150509250929050565b6000602082840312156132f1576132f0612fae565b5b60006132ff84828501613286565b91505092915050565b6000806040838503121561331f5761331e612fae565b5b600061332d85828601612ffc565b925050602061333e85828601612ffc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061338f57607f821691505b602082108114156133a3576133a2613348565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133df602083612efe565b91506133ea826133a9565b602082019050919050565b6000602082019050818103600083015261340e816133d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061344f82613011565b915061345a83613011565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561349357613492613415565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134d882613011565b91506134e383613011565b9250826134f3576134f261349e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061355a602f83612efe565b9150613565826134fe565b604082019050919050565b600060208201905081810360008301526135898161354d565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b60006135c6601d83612efe565b91506135d182613590565b602082019050919050565b600060208201905081810360008301526135f5816135b9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613658603983612efe565b9150613663826135fc565b604082019050919050565b600060208201905081810360008301526136878161364b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006136ea603583612efe565b91506136f58261368e565b604082019050919050565b60006020820190508181036000830152613719816136dd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061377c603483612efe565b915061378782613720565b604082019050919050565b600060208201905081810360008301526137ab8161376f565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006137e8601d83612efe565b91506137f3826137b2565b602082019050919050565b60006020820190508181036000830152613817816137db565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061387a602683612efe565b91506138858261381e565b604082019050919050565b600060208201905081810360008301526138a98161386d565b9050919050565b60006138bb82613011565b91506138c683613011565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138fb576138fa613415565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061393c601b83612efe565b915061394782613906565b602082019050919050565b6000602082019050818103600083015261396b8161392f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139ce602483612efe565b91506139d982613972565b604082019050919050565b600060208201905081810360008301526139fd816139c1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a60602283612efe565b9150613a6b82613a04565b604082019050919050565b60006020820190508181036000830152613a8f81613a53565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613af2602583612efe565b9150613afd82613a96565b604082019050919050565b60006020820190508181036000830152613b2181613ae5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b84602383612efe565b9150613b8f82613b28565b604082019050919050565b60006020820190508181036000830152613bb381613b77565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613c16603583612efe565b9150613c2182613bba565b604082019050919050565b60006020820190508181036000830152613c4581613c09565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613ca8603683612efe565b9150613cb382613c4c565b604082019050919050565b60006020820190508181036000830152613cd781613c9b565b9050919050565b6000613ce982613011565b9150613cf483613011565b925082821015613d0757613d06613415565b5b828203905092915050565b600081905092915050565b50565b6000613d2d600083613d12565b9150613d3882613d1d565b600082019050919050565b6000613d4e82613d20565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613db4602183612efe565b9150613dbf82613d58565b604082019050919050565b60006020820190508181036000830152613de381613da7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613e5781612fe5565b92915050565b600060208284031215613e7357613e72612fae565b5b6000613e8184828501613e48565b91505092915050565b6000819050919050565b6000613eaf613eaa613ea584613e8a565b613117565b613011565b9050919050565b613ebf81613e94565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613efa81612fd3565b82525050565b6000613f0c8383613ef1565b60208301905092915050565b6000602082019050919050565b6000613f3082613ec5565b613f3a8185613ed0565b9350613f4583613ee1565b8060005b83811015613f76578151613f5d8882613f00565b9750613f6883613f18565b925050600181019050613f49565b5085935050505092915050565b600060a082019050613f986000830188613191565b613fa56020830187613eb6565b8181036040830152613fb78186613f25565b9050613fc6606083018561320e565b613fd36080830184613191565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201a457a4df8cb1991846b0e6af966381b797eb07d98f8a3b4c6608ffeab78454f64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102295760003560e01c806375f0a87411610123578063aacebbe3116100ab578063d85ba0631161006f578063d85ba06314610852578063dd62ed3e1461087d578063e2f45605146108ba578063eba4c333146108e5578063f2fde38b1461090e57610230565b8063aacebbe31461075b578063b62496f514610784578063c0246668146107c1578063c8c8ebe4146107ea578063d257b34f1461081557610230565b8063924de9b7116100f2578063924de9b71461066457806395d89b411461068d5780639a7a23d6146106b8578063a457c2d7146106e1578063a9059cbb1461071e57610230565b806375f0a874146105b85780637bce5a04146105e35780638da5cb5b1461060e578063921369131461063957610230565b8063313ce567116101b15780636ddd1713116101755780636ddd1713146104e757806370a0823114610512578063715018a61461054f57806371fc4688146105665780637571336a1461058f57610230565b8063313ce567146103ec578063395093511461041757806349bd5a5e146104545780634fbee1931461047f5780636a486a8e146104bc57610230565b80631694505e116101f85780631694505e1461030357806318160ddd1461032e5780631f3fed8f1461035957806323b872dd1461038457806327c8f835146103c157610230565b806306fdde0314610235578063095ea7b314610260578063106b5da11461029d57806310d5de53146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610937565b6040516102579190612f8c565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613047565b6109c9565b60405161029491906130a2565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906130bd565b6109e7565b005b3480156102d257600080fd5b506102ed60048036038101906102e891906130ea565b610b11565b6040516102fa91906130a2565b60405180910390f35b34801561030f57600080fd5b50610318610b31565b6040516103259190613176565b60405180910390f35b34801561033a57600080fd5b50610343610b55565b60405161035091906131a0565b60405180910390f35b34801561036557600080fd5b5061036e610b5f565b60405161037b91906131a0565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a691906131bb565b610b65565b6040516103b891906130a2565b60405180910390f35b3480156103cd57600080fd5b506103d6610c3e565b6040516103e3919061321d565b60405180910390f35b3480156103f857600080fd5b50610401610c44565b60405161040e9190613254565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190613047565b610c4d565b60405161044b91906130a2565b60405180910390f35b34801561046057600080fd5b50610469610d00565b604051610476919061321d565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a191906130ea565b610d24565b6040516104b391906130a2565b60405180910390f35b3480156104c857600080fd5b506104d1610d7a565b6040516104de91906131a0565b60405180910390f35b3480156104f357600080fd5b506104fc610d80565b60405161050991906130a2565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906130ea565b610d93565b60405161054691906131a0565b60405180910390f35b34801561055b57600080fd5b50610564610ddb565b005b34801561057257600080fd5b5061058d600480360381019061058891906130bd565b610f33565b005b34801561059b57600080fd5b506105b660048036038101906105b1919061329b565b611023565b005b3480156105c457600080fd5b506105cd611115565b6040516105da919061321d565b60405180910390f35b3480156105ef57600080fd5b506105f861113b565b60405161060591906131a0565b60405180910390f35b34801561061a57600080fd5b50610623611141565b604051610630919061321d565b60405180910390f35b34801561064557600080fd5b5061064e61116b565b60405161065b91906131a0565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906132db565b611171565b005b34801561069957600080fd5b506106a2611225565b6040516106af9190612f8c565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da919061329b565b6112b7565b005b3480156106ed57600080fd5b5061070860048036038101906107039190613047565b6113eb565b60405161071591906130a2565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190613047565b6114b8565b60405161075291906130a2565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d91906130ea565b6114d6565b005b34801561079057600080fd5b506107ab60048036038101906107a691906130ea565b61162d565b6040516107b891906130a2565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e3919061329b565b61164d565b005b3480156107f657600080fd5b506107ff61178d565b60405161080c91906131a0565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906130bd565b611793565b60405161084991906130a2565b60405180910390f35b34801561085e57600080fd5b50610867611903565b60405161087491906131a0565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f9190613308565b611909565b6040516108b191906131a0565b60405180910390f35b3480156108c657600080fd5b506108cf611990565b6040516108dc91906131a0565b60405180910390f35b3480156108f157600080fd5b5061090c600480360381019061090791906130bd565b611996565b005b34801561091a57600080fd5b50610935600480360381019061093091906130ea565b611a86565b005b60606003805461094690613377565b80601f016020809104026020016040519081016040528092919081815260200182805461097290613377565b80156109bf5780601f10610994576101008083540402835291602001916109bf565b820191906000526020600020905b8154815290600101906020018083116109a257829003601f168201915b5050505050905090565b60006109dd6109d6611cab565b8484611cb3565b6001905092915050565b6109ef611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a75906133f5565b60405180910390fd5b670de0b6b3a76400006103e86005610a94610b55565b610a9e9190613444565b610aa891906134cd565b610ab291906134cd565b811015610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb90613570565b60405180910390fd5b670de0b6b3a764000081610b089190613444565b60078190555050565b60106020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600e5481565b6000610b72848484611e7e565b610c3384610b7e611cab565b610c2e8560405180606001604052806028815260200161400460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610be4611cab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126729092919063ffffffff16565b611cb3565b600190509392505050565b61dead81565b60006012905090565b6000610cf6610c5a611cab565b84610cf18560016000610c6b611cab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4d90919063ffffffff16565b611cb3565b6001905092915050565b7f000000000000000000000000fd56ac74a2e2b5fea7ce1b346d552de8b21852fa81565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b600960009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610de3611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e69906133f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f3b611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc1906133f5565b60405180910390fd5b80600b81905550600b54600a81905550600f600a541115611020576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611017906135dc565b60405180910390fd5b50565b61102b611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b1906133f5565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b611179611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff906133f5565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60606004805461123490613377565b80601f016020809104026020016040519081016040528092919081815260200182805461126090613377565b80156112ad5780601f10611282576101008083540402835291602001916112ad565b820191906000526020600020905b81548152906001019060200180831161129057829003601f168201915b5050505050905090565b6112bf611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461134e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611345906133f5565b60405180910390fd5b7f000000000000000000000000fd56ac74a2e2b5fea7ce1b346d552de8b21852fa73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d49061366e565b60405180910390fd5b6113e782826126d6565b5050565b60006114ae6113f8611cab565b846114a98560405180606001604052806025815260200161402c6025913960016000611422611cab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126729092919063ffffffff16565b611cb3565b6001905092915050565b60006114cc6114c5611cab565b8484611e7e565b6001905092915050565b6114de611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611564906133f5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60116020528060005260406000206000915054906101000a900460ff1681565b611655611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db906133f5565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161178191906130a2565b60405180910390a25050565b60075481565b600061179d611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611823906133f5565b60405180910390fd5b620186a0600161183a610b55565b6118449190613444565b61184e91906134cd565b821015611890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188790613700565b60405180910390fd5b6103e8600561189d610b55565b6118a79190613444565b6118b191906134cd565b8211156118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90613792565b60405180910390fd5b8160088190555060019050919050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b61199e611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a24906133f5565b60405180910390fd5b80600d81905550600d54600c81905550600f600c541115611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a906137fe565b60405180910390fd5b50565b611a8e611cab565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b14906133f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490613890565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611c5c91906138b0565b905083811015611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890613952565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a906139e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90613a76565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e7191906131a0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee590613b08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5590613b9a565b60405180910390fd5b6000811415611f7857611f7383836000612777565b61266d565b611f80611141565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fee5750611fbe611141565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120275750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612061575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561207a5750600560149054906101000a900460ff16155b1561226157601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121225750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121715760075481111561216c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216390613c2c565b60405180910390fd5b612260565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122145750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561225f5760075481111561225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590613cbe565b60405180910390fd5b5b5b5b600061226c30610d93565b9050600060085482101590508080156122915750600960009054906101000a900460ff165b80156122aa5750600560149054906101000a900460ff16155b80156123005750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123565750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123ac5750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123f0576001600560146101000a81548160ff0219169083151502179055506123d4612a0c565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124a65750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124b057600090505b6000811561265d57601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561251357506000600c54115b1561257a576125406064612532600c5488612b3090919063ffffffff16565b612bab90919063ffffffff16565b9050600c54600d54826125539190613444565b61255d91906134cd565b600e600082825461256e91906138b0565b92505081905550612639565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125d557506000600a54115b156126385761260260646125f4600a5488612b3090919063ffffffff16565b612bab90919063ffffffff16565b9050600a54600b54826126159190613444565b61261f91906134cd565b600e600082825461263091906138b0565b925050819055505b5b600081111561264e5761264d873083612777565b5b808561265a9190613cde565b94505b612668878787612777565b505050505b505050565b60008383111582906126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b19190612f8c565b60405180910390fd5b50600083856126c99190613cde565b9050809150509392505050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127de90613b08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e90613b9a565b60405180910390fd5b612862838383612bf5565b6128cd81604051806060016040528060268152602001613fde602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126729092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612960816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129ff91906131a0565b60405180910390a3505050565b6000612a1730610d93565b90506000600e5490506000821480612a2f5750600081145b15612a3b575050612b2e565b60008290506000479050612a4e82612bfa565b6000612a638247612e4690919063ffffffff16565b90506000612a8e85612a80600e5485612b3090919063ffffffff16565b612bab90919063ffffffff16565b90506000600e819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612ae090613d43565b60006040518083038185875af1925050503d8060008114612b1d576040519150601f19603f3d011682016040523d82523d6000602084013e612b22565b606091505b50509050505050505050505b565b600080831415612b435760009050612ba5565b60008284612b519190613444565b9050828482612b6091906134cd565b14612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9790613dca565b60405180910390fd5b809150505b92915050565b6000612bed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e90565b905092915050565b505050565b6000600267ffffffffffffffff811115612c1757612c16613dea565b5b604051908082528060200260200182016040528015612c455781602001602082028036833780820191505090505b5090503081600081518110612c5d57612c5c613e19565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612cfd57600080fd5b505afa158015612d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d359190613e5d565b81600181518110612d4957612d48613e19565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dae307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611cb3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e10959493929190613f83565b600060405180830381600087803b158015612e2a57600080fd5b505af1158015612e3e573d6000803e3d6000fd5b505050505050565b6000612e8883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612672565b905092915050565b60008083118290612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece9190612f8c565b60405180910390fd5b5060008385612ee691906134cd565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f2d578082015181840152602081019050612f12565b83811115612f3c576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f5e82612ef3565b612f688185612efe565b9350612f78818560208601612f0f565b612f8181612f42565b840191505092915050565b60006020820190508181036000830152612fa68184612f53565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fde82612fb3565b9050919050565b612fee81612fd3565b8114612ff957600080fd5b50565b60008135905061300b81612fe5565b92915050565b6000819050919050565b61302481613011565b811461302f57600080fd5b50565b6000813590506130418161301b565b92915050565b6000806040838503121561305e5761305d612fae565b5b600061306c85828601612ffc565b925050602061307d85828601613032565b9150509250929050565b60008115159050919050565b61309c81613087565b82525050565b60006020820190506130b76000830184613093565b92915050565b6000602082840312156130d3576130d2612fae565b5b60006130e184828501613032565b91505092915050565b600060208284031215613100576130ff612fae565b5b600061310e84828501612ffc565b91505092915050565b6000819050919050565b600061313c61313761313284612fb3565b613117565b612fb3565b9050919050565b600061314e82613121565b9050919050565b600061316082613143565b9050919050565b61317081613155565b82525050565b600060208201905061318b6000830184613167565b92915050565b61319a81613011565b82525050565b60006020820190506131b56000830184613191565b92915050565b6000806000606084860312156131d4576131d3612fae565b5b60006131e286828701612ffc565b93505060206131f386828701612ffc565b925050604061320486828701613032565b9150509250925092565b61321781612fd3565b82525050565b6000602082019050613232600083018461320e565b92915050565b600060ff82169050919050565b61324e81613238565b82525050565b60006020820190506132696000830184613245565b92915050565b61327881613087565b811461328357600080fd5b50565b6000813590506132958161326f565b92915050565b600080604083850312156132b2576132b1612fae565b5b60006132c085828601612ffc565b92505060206132d185828601613286565b9150509250929050565b6000602082840312156132f1576132f0612fae565b5b60006132ff84828501613286565b91505092915050565b6000806040838503121561331f5761331e612fae565b5b600061332d85828601612ffc565b925050602061333e85828601612ffc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061338f57607f821691505b602082108114156133a3576133a2613348565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133df602083612efe565b91506133ea826133a9565b602082019050919050565b6000602082019050818103600083015261340e816133d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061344f82613011565b915061345a83613011565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561349357613492613415565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134d882613011565b91506134e383613011565b9250826134f3576134f261349e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061355a602f83612efe565b9150613565826134fe565b604082019050919050565b600060208201905081810360008301526135898161354d565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b60006135c6601d83612efe565b91506135d182613590565b602082019050919050565b600060208201905081810360008301526135f5816135b9565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613658603983612efe565b9150613663826135fc565b604082019050919050565b600060208201905081810360008301526136878161364b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006136ea603583612efe565b91506136f58261368e565b604082019050919050565b60006020820190508181036000830152613719816136dd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061377c603483612efe565b915061378782613720565b604082019050919050565b600060208201905081810360008301526137ab8161376f565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006137e8601d83612efe565b91506137f3826137b2565b602082019050919050565b60006020820190508181036000830152613817816137db565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061387a602683612efe565b91506138858261381e565b604082019050919050565b600060208201905081810360008301526138a98161386d565b9050919050565b60006138bb82613011565b91506138c683613011565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138fb576138fa613415565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061393c601b83612efe565b915061394782613906565b602082019050919050565b6000602082019050818103600083015261396b8161392f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139ce602483612efe565b91506139d982613972565b604082019050919050565b600060208201905081810360008301526139fd816139c1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a60602283612efe565b9150613a6b82613a04565b604082019050919050565b60006020820190508181036000830152613a8f81613a53565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613af2602583612efe565b9150613afd82613a96565b604082019050919050565b60006020820190508181036000830152613b2181613ae5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b84602383612efe565b9150613b8f82613b28565b604082019050919050565b60006020820190508181036000830152613bb381613b77565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613c16603583612efe565b9150613c2182613bba565b604082019050919050565b60006020820190508181036000830152613c4581613c09565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613ca8603683612efe565b9150613cb382613c4c565b604082019050919050565b60006020820190508181036000830152613cd781613c9b565b9050919050565b6000613ce982613011565b9150613cf483613011565b925082821015613d0757613d06613415565b5b828203905092915050565b600081905092915050565b50565b6000613d2d600083613d12565b9150613d3882613d1d565b600082019050919050565b6000613d4e82613d20565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613db4602183612efe565b9150613dbf82613d58565b604082019050919050565b60006020820190508181036000830152613de381613da7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613e5781612fe5565b92915050565b600060208284031215613e7357613e72612fae565b5b6000613e8184828501613e48565b91505092915050565b6000819050919050565b6000613eaf613eaa613ea584613e8a565b613117565b613011565b9050919050565b613ebf81613e94565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613efa81612fd3565b82525050565b6000613f0c8383613ef1565b60208301905092915050565b6000602082019050919050565b6000613f3082613ec5565b613f3a8185613ed0565b9350613f4583613ee1565b8060005b83811015613f76578151613f5d8882613f00565b9750613f6883613f18565b925050600181019050613f49565b5085935050505092915050565b600060a082019050613f986000830188613191565b613fa56020830187613eb6565b8181036040830152613fb78186613f25565b9050613fc6606083018561320e565b613fd36080830184613191565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201a457a4df8cb1991846b0e6af966381b797eb07d98f8a3b4c6608ffeab78454f64736f6c63430008090033

Deployed Bytecode Sourcemap

29433:10729:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7589:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9756:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33401:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30212:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29508:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8709:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30025:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10407:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29611:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8551:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11171:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29566:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35334:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29946:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29830:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8880:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22054:148;;;;;;;;;;;;;:::i;:::-;;34001:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33644:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29703:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29903;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21412:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29981:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33888:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7808:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34670:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11892:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9220:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35118:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30434:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34480:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29746:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33008:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29869:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9458:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29788:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34240:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22357:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7589:100;7643:13;7676:5;7669:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7589:100;:::o;9756:169::-;9839:4;9856:39;9865:12;:10;:12::i;:::-;9879:7;9888:6;9856:8;:39::i;:::-;9913:4;9906:11;;9756:169;;;;:::o;33401:231::-;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33517:4:::1;33511;33507:1;33491:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;33490:31;;;;:::i;:::-;33480:6;:41;;33472:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;33617:6;33607;:17;;;;:::i;:::-;33584:20;:40;;;;33401:231:::0;:::o;30212:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29508:51::-;;;:::o;8709:108::-;8770:7;8797:12;;8790:19;;8709:108;:::o;30025:33::-;;;;:::o;10407:355::-;10547:4;10564:36;10574:6;10582:9;10593:6;10564:9;:36::i;:::-;10611:121;10620:6;10628:12;:10;:12::i;:::-;10642:89;10680:6;10642:89;;;;;;;;;;;;;;;;;:11;:19;10654:6;10642:19;;;;;;;;;;;;;;;:33;10662:12;:10;:12::i;:::-;10642:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10611:8;:121::i;:::-;10750:4;10743:11;;10407:355;;;;;:::o;29611:53::-;29657:6;29611:53;:::o;8551:93::-;8609:5;8634:2;8627:9;;8551:93;:::o;11171:218::-;11259:4;11276:83;11285:12;:10;:12::i;:::-;11299:7;11308:50;11347:10;11308:11;:25;11320:12;:10;:12::i;:::-;11308:25;;;;;;;;;;;;;;;:34;11334:7;11308:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11276:8;:83::i;:::-;11377:4;11370:11;;11171:218;;;;:::o;29566:38::-;;;:::o;35334:125::-;35399:4;35423:19;:28;35443:7;35423:28;;;;;;;;;;;;;;;;;;;;;;;;;35416:35;;35334:125;;;:::o;29946:28::-;;;;:::o;29830:30::-;;;;;;;;;;;;;:::o;8880:127::-;8954:7;8981:9;:18;8991:7;8981:18;;;;;;;;;;;;;;;;8974:25;;8880:127;;;:::o;22054:148::-;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22161:1:::1;22124:40;;22145:6;;;;;;;;;;;22124:40;;;;;;;;;;;;22192:1;22175:6;;:19;;;;;;;;;;;;;;;;;;22054:148::o:0;34001:227::-;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34095:13:::1;34077:15;:31;;;;34134:15;;34119:12;:30;;;;34184:2;34168:12;;:18;;34160:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34001:227:::0;:::o;33644:144::-;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33776:4:::1;33734:31;:39;33766:6;33734:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33644:144:::0;;:::o;29703:30::-;;;;;;;;;;;;;:::o;29903:::-;;;;:::o;21412:79::-;21450:7;21477:6;;;;;;;;;;;21470:13;;21412:79;:::o;29981:31::-;;;;:::o;33888:101::-;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33974:7:::1;33960:11;;:21;;;;;;;;;;;;;;;;;;33888:101:::0;:::o;7808:104::-;7864:13;7897:7;7890:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7808:104;:::o;34670:244::-;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34777:13:::1;34769:21;;:4;:21;;;;34761:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;34865:41;34894:4;34900:5;34865:28;:41::i;:::-;34670:244:::0;;:::o;11892:269::-;11985:4;12002:129;12011:12;:10;:12::i;:::-;12025:7;12034:96;12073:15;12034:96;;;;;;;;;;;;;;;;;:11;:25;12046:12;:10;:12::i;:::-;12034:25;;;;;;;;;;;;;;;:34;12060:7;12034:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12002:8;:129::i;:::-;12149:4;12142:11;;11892:269;;;;:::o;9220:175::-;9306:4;9323:42;9333:12;:10;:12::i;:::-;9347:9;9358:6;9323:9;:42::i;:::-;9383:4;9376:11;;9220:175;;;;:::o;35118:208::-;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35255:15:::1;;;;;;;;;;;35212:59;;35235:18;35212:59;;;;;;;;;;;;35300:18;35282:15;;:36;;;;;;;;;;;;;;;;;;35118:208:::0;:::o;30434:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34480:182::-;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34596:8:::1;34565:19;:28;34585:7;34565:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34636:7;34620:34;;;34645:8;34620:34;;;;;;:::i;:::-;;;;;;;;34480:182:::0;;:::o;29746:35::-;;;;:::o;33008:381::-;33089:4;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33145:6:::1;33141:1;33125:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;33112:9;:39;;33104:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;33260:4;33256:1;33240:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;33227:9;:37;;33219:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;33352:9;33331:18;:30;;;;33378:4;33371:11;;33008:381:::0;;;:::o;29869:27::-;;;;:::o;9458:151::-;9547:7;9574:11;:18;9586:5;9574:18;;;;;;;;;;;;;;;:27;9593:7;9574:27;;;;;;;;;;;;;;;;9567:34;;9458:151;;;;:::o;29788:33::-;;;;:::o;34240:232::-;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34336:13:::1;34317:16;:32;;;;34376:16;;34360:13;:32;;;;34428:2;34411:13;;:19;;34403:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34240:232:::0;:::o;22357:244::-;21634:12;:10;:12::i;:::-;21624:22;;:6;;;;;;;;;;;:22;;;21616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22466:1:::1;22446:22;;:8;:22;;;;22438:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22556:8;22527:38;;22548:6;;;;;;;;;;;22527:38;;;;;;;;;;;;22585:8;22576:6;;:17;;;;;;;;;;;;;;;;;;22357:244:::0;:::o;16456:181::-;16514:7;16534:9;16550:1;16546;:5;;;;:::i;:::-;16534:17;;16575:1;16570;:6;;16562:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16628:1;16621:8;;;16456:181;;;;:::o;225:98::-;278:7;305:10;298:17;;225:98;:::o;15078:380::-;15231:1;15214:19;;:5;:19;;;;15206:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15312:1;15293:21;;:7;:21;;;;15285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15396:6;15366:11;:18;15378:5;15366:18;;;;;;;;;;;;;;;:27;15385:7;15366:27;;;;;;;;;;;;;;;:36;;;;15434:7;15418:32;;15427:5;15418:32;;;15443:6;15418:32;;;;;;:::i;:::-;;;;;;;;15078:380;;;:::o;35467:2779::-;35615:1;35599:18;;:4;:18;;;;35591:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35692:1;35678:16;;:2;:16;;;;35670:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35769:1;35759:6;:11;35756:92;;;35787:28;35803:4;35809:2;35813:1;35787:15;:28::i;:::-;35830:7;;35756:92;35898:7;:5;:7::i;:::-;35890:15;;:4;:15;;;;:49;;;;;35932:7;:5;:7::i;:::-;35926:13;;:2;:13;;;;35890:49;:86;;;;;35974:1;35960:16;;:2;:16;;;;35890:86;:128;;;;;36011:6;35997:21;;:2;:21;;;;35890:128;:158;;;;;36040:8;;;;;;;;;;;36039:9;35890:158;35868:767;;;36117:25;:31;36143:4;36117:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36153:31;:35;36185:2;36153:35;;;;;;;;;;;;;;;;;;;;;;;;;36152:36;36117:71;36113:511;;;36235:20;;36225:6;:30;;36217:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;36113:511;;;36407:25;:29;36433:2;36407:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36441:31;:37;36473:4;36441:37;;;;;;;;;;;;;;;;;;;;;;;;;36440:38;36407:71;36403:221;;;36525:20;;36515:6;:30;;36507:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;36403:221;36113:511;35868:767;36669:28;36700:24;36718:4;36700:9;:24::i;:::-;36669:55;;36745:12;36784:18;;36760:20;:42;;36745:57;;36833:7;:35;;;;;36857:11;;;;;;;;;;;36833:35;:61;;;;;36886:8;;;;;;;;;;;36885:9;36833:61;:110;;;;;36912:25;:31;36938:4;36912:31;;;;;;;;;;;;;;;;;;;;;;;;;36911:32;36833:110;:153;;;;;36961:19;:25;36981:4;36961:25;;;;;;;;;;;;;;;;;;;;;;;;;36960:26;36833:153;:194;;;;;37004:19;:23;37024:2;37004:23;;;;;;;;;;;;;;;;;;;;;;;;;37003:24;36833:194;36815:338;;;37065:4;37054:8;;:15;;;;;;;;;;;;;;;;;;37098:10;:8;:10::i;:::-;37136:5;37125:8;;:16;;;;;;;;;;;;;;;;;;36815:338;37173:12;37189:8;;;;;;;;;;;37188:9;37173:24;;37298:19;:25;37318:4;37298:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37327:19;:23;37347:2;37327:23;;;;;;;;;;;;;;;;;;;;;;;;;37298:52;37295:99;;;37377:5;37367:15;;37295:99;37414:12;37518:7;37515:678;;;37569:25;:29;37595:2;37569:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;37618:1;37602:13;;:17;37569:50;37565:459;;;37646:34;37676:3;37646:25;37657:13;;37646:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;37639:41;;37747:13;;37728:16;;37721:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;37699:18;;:61;;;;;;;:::i;:::-;;;;;;;;37565:459;;;37821:25;:31;37847:4;37821:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;37871:1;37856:12;;:16;37821:51;37818:206;;;37897:33;37926:3;37897:24;37908:12;;37897:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;37890:40;;37996:12;;37978:15;;37971:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;37949:18;;:59;;;;;;;:::i;:::-;;;;;;;;37818:206;37565:459;38062:1;38055:4;:8;38052:93;;;38087:42;38103:4;38117;38124;38087:15;:42::i;:::-;38052:93;38177:4;38167:14;;;;;:::i;:::-;;;37515:678;38205:33;38221:4;38227:2;38231:6;38205:15;:33::i;:::-;35580:2666;;;;35467:2779;;;;:::o;17359:192::-;17445:7;17478:1;17473;:6;;17481:12;17465:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17505:9;17521:1;17517;:5;;;;:::i;:::-;17505:17;;17542:1;17535:8;;;17359:192;;;;;:::o;34922:188::-;35039:5;35005:25;:31;35031:4;35005:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35096:5;35062:40;;35090:4;35062:40;;;;;;;;;;;;34922:188;;:::o;12651:573::-;12809:1;12791:20;;:6;:20;;;;12783:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12893:1;12872:23;;:9;:23;;;;12864:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12948:47;12969:6;12977:9;12988:6;12948:20;:47::i;:::-;13028:71;13050:6;13028:71;;;;;;;;;;;;;;;;;:9;:17;13038:6;13028:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13008:9;:17;13018:6;13008:17;;;;;;;;;;;;;;;:91;;;;13133:32;13158:6;13133:9;:20;13143:9;13133:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13110:9;:20;13120:9;13110:20;;;;;;;;;;;;;;;:55;;;;13198:9;13181:35;;13190:6;13181:35;;;13209:6;13181:35;;;;;;:::i;:::-;;;;;;;;12651:573;;;:::o;39404:749::-;39443:23;39469:24;39487:4;39469:9;:24::i;:::-;39443:50;;39504:25;39532:18;;39504:46;;39594:1;39575:15;:20;:46;;;;39620:1;39599:17;:22;39575:46;39572:60;;;39624:7;;;;39572:60;39652:26;39681:15;39652:44;;39717:25;39745:21;39717:49;;39779:36;39796:18;39779:16;:36::i;:::-;39837:18;39858:44;39884:17;39858:21;:25;;:44;;;;:::i;:::-;39837:65;;39923:23;39949:57;39988:17;39949:34;39964:18;;39949:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;39923:83;;40048:1;40027:18;:22;;;;40071:12;40096:15;;;;;;;;;;;40088:29;;40125:15;40088:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40070:75;;;39432:721;;;;;;;39404:749;:::o;17810:471::-;17868:7;18118:1;18113;:6;18109:47;;;18143:1;18136:8;;;;18109:47;18168:9;18184:1;18180;:5;;;;:::i;:::-;18168:17;;18213:1;18208;18204;:5;;;;:::i;:::-;:10;18196:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18272:1;18265:8;;;17810:471;;;;;:::o;18757:132::-;18815:7;18842:39;18846:1;18849;18842:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18835:46;;18757:132;;;;:::o;16061:125::-;;;;:::o;38254:601::-;38382:21;38420:1;38406:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38382:40;;38451:4;38433;38438:1;38433:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38477:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38467:4;38472:1;38467:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38512:62;38529:4;38544:15;38562:11;38512:8;:62::i;:::-;38613:15;:66;;;38694:11;38720:1;38764:4;38791;38811:15;38613:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38309:546;38254:601;:::o;16920:136::-;16978:7;17005:43;17009:1;17012;17005:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16998:50;;16920:136;;;;:::o;19385:278::-;19471:7;19503:1;19499;:5;19506:12;19491:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19530:9;19546:1;19542;:5;;;;:::i;:::-;19530:17;;19654:1;19647:8;;;19385:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:::-;3888:6;3937:2;3925:9;3916:7;3912:23;3908:32;3905:119;;;3943:79;;:::i;:::-;3905:119;4063:1;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4034:117;3829:329;;;;:::o;4164:60::-;4192:3;4213:5;4206:12;;4164:60;;;:::o;4230:142::-;4280:9;4313:53;4331:34;4340:24;4358:5;4340:24;:::i;:::-;4331:34;:::i;:::-;4313:53;:::i;:::-;4300:66;;4230:142;;;:::o;4378:126::-;4428:9;4461:37;4492:5;4461:37;:::i;:::-;4448:50;;4378:126;;;:::o;4510:153::-;4587:9;4620:37;4651:5;4620:37;:::i;:::-;4607:50;;4510:153;;;:::o;4669:185::-;4783:64;4841:5;4783:64;:::i;:::-;4778:3;4771:77;4669:185;;:::o;4860:276::-;4980:4;5018:2;5007:9;5003:18;4995:26;;5031:98;5126:1;5115:9;5111:17;5102:6;5031:98;:::i;:::-;4860:276;;;;:::o;5142:118::-;5229:24;5247:5;5229:24;:::i;:::-;5224:3;5217:37;5142:118;;:::o;5266:222::-;5359:4;5397:2;5386:9;5382:18;5374:26;;5410:71;5478:1;5467:9;5463:17;5454:6;5410:71;:::i;:::-;5266:222;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:323::-;7692:6;7741:2;7729:9;7720:7;7716:23;7712:32;7709:119;;;7747:79;;:::i;:::-;7709:119;7867:1;7892:50;7934:7;7925:6;7914:9;7910:22;7892:50;:::i;:::-;7882:60;;7838:114;7636:323;;;;:::o;7965:474::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;7965:474;;;;;:::o;8445:180::-;8493:77;8490:1;8483:88;8590:4;8587:1;8580:15;8614:4;8611:1;8604:15;8631:320;8675:6;8712:1;8706:4;8702:12;8692:22;;8759:1;8753:4;8749:12;8780:18;8770:81;;8836:4;8828:6;8824:17;8814:27;;8770:81;8898:2;8890:6;8887:14;8867:18;8864:38;8861:84;;;8917:18;;:::i;:::-;8861:84;8682:269;8631:320;;;:::o;8957:182::-;9097:34;9093:1;9085:6;9081:14;9074:58;8957:182;:::o;9145:366::-;9287:3;9308:67;9372:2;9367:3;9308:67;:::i;:::-;9301:74;;9384:93;9473:3;9384:93;:::i;:::-;9502:2;9497:3;9493:12;9486:19;;9145:366;;;:::o;9517:419::-;9683:4;9721:2;9710:9;9706:18;9698:26;;9770:9;9764:4;9760:20;9756:1;9745:9;9741:17;9734:47;9798:131;9924:4;9798:131;:::i;:::-;9790:139;;9517:419;;;:::o;9942:180::-;9990:77;9987:1;9980:88;10087:4;10084:1;10077:15;10111:4;10108:1;10101:15;10128:348;10168:7;10191:20;10209:1;10191:20;:::i;:::-;10186:25;;10225:20;10243:1;10225:20;:::i;:::-;10220:25;;10413:1;10345:66;10341:74;10338:1;10335:81;10330:1;10323:9;10316:17;10312:105;10309:131;;;10420:18;;:::i;:::-;10309:131;10468:1;10465;10461:9;10450:20;;10128:348;;;;:::o;10482:180::-;10530:77;10527:1;10520:88;10627:4;10624:1;10617:15;10651:4;10648:1;10641:15;10668:185;10708:1;10725:20;10743:1;10725:20;:::i;:::-;10720:25;;10759:20;10777:1;10759:20;:::i;:::-;10754:25;;10798:1;10788:35;;10803:18;;:::i;:::-;10788:35;10845:1;10842;10838:9;10833:14;;10668:185;;;;:::o;10859:234::-;10999:34;10995:1;10987:6;10983:14;10976:58;11068:17;11063:2;11055:6;11051:15;11044:42;10859:234;:::o;11099:366::-;11241:3;11262:67;11326:2;11321:3;11262:67;:::i;:::-;11255:74;;11338:93;11427:3;11338:93;:::i;:::-;11456:2;11451:3;11447:12;11440:19;;11099:366;;;:::o;11471:419::-;11637:4;11675:2;11664:9;11660:18;11652:26;;11724:9;11718:4;11714:20;11710:1;11699:9;11695:17;11688:47;11752:131;11878:4;11752:131;:::i;:::-;11744:139;;11471:419;;;:::o;11896:179::-;12036:31;12032:1;12024:6;12020:14;12013:55;11896:179;:::o;12081:366::-;12223:3;12244:67;12308:2;12303:3;12244:67;:::i;:::-;12237:74;;12320:93;12409:3;12320:93;:::i;:::-;12438:2;12433:3;12429:12;12422:19;;12081:366;;;:::o;12453:419::-;12619:4;12657:2;12646:9;12642:18;12634:26;;12706:9;12700:4;12696:20;12692:1;12681:9;12677:17;12670:47;12734:131;12860:4;12734:131;:::i;:::-;12726:139;;12453:419;;;:::o;12878:244::-;13018:34;13014:1;13006:6;13002:14;12995:58;13087:27;13082:2;13074:6;13070:15;13063:52;12878:244;:::o;13128:366::-;13270:3;13291:67;13355:2;13350:3;13291:67;:::i;:::-;13284:74;;13367:93;13456:3;13367:93;:::i;:::-;13485:2;13480:3;13476:12;13469:19;;13128:366;;;:::o;13500:419::-;13666:4;13704:2;13693:9;13689:18;13681:26;;13753:9;13747:4;13743:20;13739:1;13728:9;13724:17;13717:47;13781:131;13907:4;13781:131;:::i;:::-;13773:139;;13500:419;;;:::o;13925:240::-;14065:34;14061:1;14053:6;14049:14;14042:58;14134:23;14129:2;14121:6;14117:15;14110:48;13925:240;:::o;14171:366::-;14313:3;14334:67;14398:2;14393:3;14334:67;:::i;:::-;14327:74;;14410:93;14499:3;14410:93;:::i;:::-;14528:2;14523:3;14519:12;14512:19;;14171:366;;;:::o;14543:419::-;14709:4;14747:2;14736:9;14732:18;14724:26;;14796:9;14790:4;14786:20;14782:1;14771:9;14767:17;14760:47;14824:131;14950:4;14824:131;:::i;:::-;14816:139;;14543:419;;;:::o;14968:239::-;15108:34;15104:1;15096:6;15092:14;15085:58;15177:22;15172:2;15164:6;15160:15;15153:47;14968:239;:::o;15213:366::-;15355:3;15376:67;15440:2;15435:3;15376:67;:::i;:::-;15369:74;;15452:93;15541:3;15452:93;:::i;:::-;15570:2;15565:3;15561:12;15554:19;;15213:366;;;:::o;15585:419::-;15751:4;15789:2;15778:9;15774:18;15766:26;;15838:9;15832:4;15828:20;15824:1;15813:9;15809:17;15802:47;15866:131;15992:4;15866:131;:::i;:::-;15858:139;;15585:419;;;:::o;16010:179::-;16150:31;16146:1;16138:6;16134:14;16127:55;16010:179;:::o;16195:366::-;16337:3;16358:67;16422:2;16417:3;16358:67;:::i;:::-;16351:74;;16434:93;16523:3;16434:93;:::i;:::-;16552:2;16547:3;16543:12;16536:19;;16195:366;;;:::o;16567:419::-;16733:4;16771:2;16760:9;16756:18;16748:26;;16820:9;16814:4;16810:20;16806:1;16795:9;16791:17;16784:47;16848:131;16974:4;16848:131;:::i;:::-;16840:139;;16567:419;;;:::o;16992:225::-;17132:34;17128:1;17120:6;17116:14;17109:58;17201:8;17196:2;17188:6;17184:15;17177:33;16992:225;:::o;17223:366::-;17365:3;17386:67;17450:2;17445:3;17386:67;:::i;:::-;17379:74;;17462:93;17551:3;17462:93;:::i;:::-;17580:2;17575:3;17571:12;17564:19;;17223:366;;;:::o;17595:419::-;17761:4;17799:2;17788:9;17784:18;17776:26;;17848:9;17842:4;17838:20;17834:1;17823:9;17819:17;17812:47;17876:131;18002:4;17876:131;:::i;:::-;17868:139;;17595:419;;;:::o;18020:305::-;18060:3;18079:20;18097:1;18079:20;:::i;:::-;18074:25;;18113:20;18131:1;18113:20;:::i;:::-;18108:25;;18267:1;18199:66;18195:74;18192:1;18189:81;18186:107;;;18273:18;;:::i;:::-;18186:107;18317:1;18314;18310:9;18303:16;;18020:305;;;;:::o;18331:177::-;18471:29;18467:1;18459:6;18455:14;18448:53;18331:177;:::o;18514:366::-;18656:3;18677:67;18741:2;18736:3;18677:67;:::i;:::-;18670:74;;18753:93;18842:3;18753:93;:::i;:::-;18871:2;18866:3;18862:12;18855:19;;18514:366;;;:::o;18886:419::-;19052:4;19090:2;19079:9;19075:18;19067:26;;19139:9;19133:4;19129:20;19125:1;19114:9;19110:17;19103:47;19167:131;19293:4;19167:131;:::i;:::-;19159:139;;18886:419;;;:::o;19311:223::-;19451:34;19447:1;19439:6;19435:14;19428:58;19520:6;19515:2;19507:6;19503:15;19496:31;19311:223;:::o;19540:366::-;19682:3;19703:67;19767:2;19762:3;19703:67;:::i;:::-;19696:74;;19779:93;19868:3;19779:93;:::i;:::-;19897:2;19892:3;19888:12;19881:19;;19540:366;;;:::o;19912:419::-;20078:4;20116:2;20105:9;20101:18;20093:26;;20165:9;20159:4;20155:20;20151:1;20140:9;20136:17;20129:47;20193:131;20319:4;20193:131;:::i;:::-;20185:139;;19912:419;;;:::o;20337:221::-;20477:34;20473:1;20465:6;20461:14;20454:58;20546:4;20541:2;20533:6;20529:15;20522:29;20337:221;:::o;20564:366::-;20706:3;20727:67;20791:2;20786:3;20727:67;:::i;:::-;20720:74;;20803:93;20892:3;20803:93;:::i;:::-;20921:2;20916:3;20912:12;20905:19;;20564:366;;;:::o;20936:419::-;21102:4;21140:2;21129:9;21125:18;21117:26;;21189:9;21183:4;21179:20;21175:1;21164:9;21160:17;21153:47;21217:131;21343:4;21217:131;:::i;:::-;21209:139;;20936:419;;;:::o;21361:224::-;21501:34;21497:1;21489:6;21485:14;21478:58;21570:7;21565:2;21557:6;21553:15;21546:32;21361:224;:::o;21591:366::-;21733:3;21754:67;21818:2;21813:3;21754:67;:::i;:::-;21747:74;;21830:93;21919:3;21830:93;:::i;:::-;21948:2;21943:3;21939:12;21932:19;;21591:366;;;:::o;21963:419::-;22129:4;22167:2;22156:9;22152:18;22144:26;;22216:9;22210:4;22206:20;22202:1;22191:9;22187:17;22180:47;22244:131;22370:4;22244:131;:::i;:::-;22236:139;;21963:419;;;:::o;22388:222::-;22528:34;22524:1;22516:6;22512:14;22505:58;22597:5;22592:2;22584:6;22580:15;22573:30;22388:222;:::o;22616:366::-;22758:3;22779:67;22843:2;22838:3;22779:67;:::i;:::-;22772:74;;22855:93;22944:3;22855:93;:::i;:::-;22973:2;22968:3;22964:12;22957:19;;22616:366;;;:::o;22988:419::-;23154:4;23192:2;23181:9;23177:18;23169:26;;23241:9;23235:4;23231:20;23227:1;23216:9;23212:17;23205:47;23269:131;23395:4;23269:131;:::i;:::-;23261:139;;22988:419;;;:::o;23413:240::-;23553:34;23549:1;23541:6;23537:14;23530:58;23622:23;23617:2;23609:6;23605:15;23598:48;23413:240;:::o;23659:366::-;23801:3;23822:67;23886:2;23881:3;23822:67;:::i;:::-;23815:74;;23898:93;23987:3;23898:93;:::i;:::-;24016:2;24011:3;24007:12;24000:19;;23659:366;;;:::o;24031:419::-;24197:4;24235:2;24224:9;24220:18;24212:26;;24284:9;24278:4;24274:20;24270:1;24259:9;24255:17;24248:47;24312:131;24438:4;24312:131;:::i;:::-;24304:139;;24031:419;;;:::o;24456:241::-;24596:34;24592:1;24584:6;24580:14;24573:58;24665:24;24660:2;24652:6;24648:15;24641:49;24456:241;:::o;24703:366::-;24845:3;24866:67;24930:2;24925:3;24866:67;:::i;:::-;24859:74;;24942:93;25031:3;24942:93;:::i;:::-;25060:2;25055:3;25051:12;25044:19;;24703:366;;;:::o;25075:419::-;25241:4;25279:2;25268:9;25264:18;25256:26;;25328:9;25322:4;25318:20;25314:1;25303:9;25299:17;25292:47;25356:131;25482:4;25356:131;:::i;:::-;25348:139;;25075:419;;;:::o;25500:191::-;25540:4;25560:20;25578:1;25560:20;:::i;:::-;25555:25;;25594:20;25612:1;25594:20;:::i;:::-;25589:25;;25633:1;25630;25627:8;25624:34;;;25638:18;;:::i;:::-;25624:34;25683:1;25680;25676:9;25668:17;;25500:191;;;;:::o;25697:147::-;25798:11;25835:3;25820:18;;25697:147;;;;:::o;25850:114::-;;:::o;25970:398::-;26129:3;26150:83;26231:1;26226:3;26150:83;:::i;:::-;26143:90;;26242:93;26331:3;26242:93;:::i;:::-;26360:1;26355:3;26351:11;26344:18;;25970:398;;;:::o;26374:379::-;26558:3;26580:147;26723:3;26580:147;:::i;:::-;26573:154;;26744:3;26737:10;;26374:379;;;:::o;26759:220::-;26899:34;26895:1;26887:6;26883:14;26876:58;26968:3;26963:2;26955:6;26951:15;26944:28;26759:220;:::o;26985:366::-;27127:3;27148:67;27212:2;27207:3;27148:67;:::i;:::-;27141:74;;27224:93;27313:3;27224:93;:::i;:::-;27342:2;27337:3;27333:12;27326:19;;26985:366;;;:::o;27357:419::-;27523:4;27561:2;27550:9;27546:18;27538:26;;27610:9;27604:4;27600:20;27596:1;27585:9;27581:17;27574:47;27638:131;27764:4;27638:131;:::i;:::-;27630:139;;27357:419;;;:::o;27782:180::-;27830:77;27827:1;27820:88;27927:4;27924:1;27917:15;27951:4;27948:1;27941:15;27968:180;28016:77;28013:1;28006:88;28113:4;28110:1;28103:15;28137:4;28134:1;28127:15;28154:143;28211:5;28242:6;28236:13;28227:22;;28258:33;28285:5;28258:33;:::i;:::-;28154:143;;;;:::o;28303:351::-;28373:6;28422:2;28410:9;28401:7;28397:23;28393:32;28390:119;;;28428:79;;:::i;:::-;28390:119;28548:1;28573:64;28629:7;28620:6;28609:9;28605:22;28573:64;:::i;:::-;28563:74;;28519:128;28303:351;;;;:::o;28660:85::-;28705:7;28734:5;28723:16;;28660:85;;;:::o;28751:158::-;28809:9;28842:61;28860:42;28869:32;28895:5;28869:32;:::i;:::-;28860:42;:::i;:::-;28842:61;:::i;:::-;28829:74;;28751:158;;;:::o;28915:147::-;29010:45;29049:5;29010:45;:::i;:::-;29005:3;28998:58;28915:147;;:::o;29068:114::-;29135:6;29169:5;29163:12;29153:22;;29068:114;;;:::o;29188:184::-;29287:11;29321:6;29316:3;29309:19;29361:4;29356:3;29352:14;29337:29;;29188:184;;;;:::o;29378:132::-;29445:4;29468:3;29460:11;;29498:4;29493:3;29489:14;29481:22;;29378:132;;;:::o;29516:108::-;29593:24;29611:5;29593:24;:::i;:::-;29588:3;29581:37;29516:108;;:::o;29630:179::-;29699:10;29720:46;29762:3;29754:6;29720:46;:::i;:::-;29798:4;29793:3;29789:14;29775:28;;29630:179;;;;:::o;29815:113::-;29885:4;29917;29912:3;29908:14;29900:22;;29815:113;;;:::o;29964:732::-;30083:3;30112:54;30160:5;30112:54;:::i;:::-;30182:86;30261:6;30256:3;30182:86;:::i;:::-;30175:93;;30292:56;30342:5;30292:56;:::i;:::-;30371:7;30402:1;30387:284;30412:6;30409:1;30406:13;30387:284;;;30488:6;30482:13;30515:63;30574:3;30559:13;30515:63;:::i;:::-;30508:70;;30601:60;30654:6;30601:60;:::i;:::-;30591:70;;30447:224;30434:1;30431;30427:9;30422:14;;30387:284;;;30391:14;30687:3;30680:10;;30088:608;;;29964:732;;;;:::o;30702:831::-;30965:4;31003:3;30992:9;30988:19;30980:27;;31017:71;31085:1;31074:9;31070:17;31061:6;31017:71;:::i;:::-;31098:80;31174:2;31163:9;31159:18;31150:6;31098:80;:::i;:::-;31225:9;31219:4;31215:20;31210:2;31199:9;31195:18;31188:48;31253:108;31356:4;31347:6;31253:108;:::i;:::-;31245:116;;31371:72;31439:2;31428:9;31424:18;31415:6;31371:72;:::i;:::-;31453:73;31521:3;31510:9;31506:19;31497:6;31453:73;:::i;:::-;30702:831;;;;;;;;:::o

Swarm Source

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