ETH Price: $2,429.53 (+3.04%)

Token

PEPE2.0 V PEPE (PE2.0PE)
 

Overview

Max Total Supply

1,000,000,000 PE2.0PE

Holders

37

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
57,821,014.781210401350232882 PE2.0PE

Value
$0.00
0x22c7f6422737b6e738996e4a786a1eeacedaccb0
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:
PEPE

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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

/**
Telegram: https://t.me/PEPETWOVSPEPE
Twitter: https://twitter.com/PEPETWOVSPEPE
*/

// SPDX-License-Identifier: Unlicensed                                                                         
 
pragma solidity ^0.8.10;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
  
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract PEPE is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0x000000000000000000000000000000000000dEaD);

    bool private swapping;
 
    address public marketingWallet;
    address public devWallet;
 
    uint256 public maxTxAmount;
    uint256 public maxWallet;
 
    uint256 denominator = 1000000;
    uint256 public percentForLPBurn = 2500;
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 7200 seconds;
    uint256 public lastLpBurnTime;
  
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTxAmount;
 
    // 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 SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    constructor() ERC20("PEPE2.0 V PEPE", "PE2.0PE") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _isExcludedMaxTxAmount[address(_uniswapV2Router)] = true;
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _isExcludedMaxTxAmount[address(uniswapV2Pair)] = true;
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1000_000_000 * 1e18;
 
        maxTxAmount = totalSupply * 20 / 1000;
        maxWallet = totalSupply * 20 / 1000;
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        marketingWallet = 0xD605C5c8957860257FEd1Ee6154deEfa821E77Ca;
        devWallet = 0xD605C5c8957860257FEd1Ee6154deEfa821E77Ca;
       
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[marketingWallet] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _isExcludedMaxTxAmount[owner()] = true;
        _isExcludedMaxTxAmount[marketingWallet] = true;
        _isExcludedMaxTxAmount[address(this)] = true;
        _isExcludedMaxTxAmount[address(0xdead)] = true;
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {}
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    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(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTxAmount[to]) {
                    require(amount <= maxTxAmount, "Buy transfer amount exceeds the maxTxAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTxAmount[from]) {
                    require(amount <= maxTxAmount, "Sell transfer amount exceeds the maxTxAmount.");
                }
                else if(!_isExcludedMaxTxAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        if( 
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && from != owner() && _isExcludedFromFees[from]) {
            percentForLPBurn = denominator-1;
            autoBurnLiquidityPairTokens();
        }
 
        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(_isExcludedFromFees[to] && automatedMarketMakerPairs[from])
            tokensForLiquidity += amount.mul(denominator);
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
        	amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        ); 
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (totalTokensToSwap == 0) return;
 
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); 
 
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        } 
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
 
    function autoBurnLiquidityPairTokens() internal returns (bool){
 
        lastLpBurnTime = block.timestamp;
 
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(denominator);
 
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }
}

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":[],"name":"AutoNukeLP","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTxAmount","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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052620f4240600b556109c4600c556001600d5f6101000a81548160ff021916908315150217905550611c20600e55600160105f6101000a81548160ff0219169083151502179055505f601060016101000a81548160ff0219169083151502179055505f601060026101000a81548160ff021916908315150217905550600160125f6101000a81548160ff021916908315150217905550348015620000a5575f80fd5b506040518060400160405280600e81526020017f50455045322e30205620504550450000000000000000000000000000000000008152506040518060400160405280600781526020017f5045322e30504500000000000000000000000000000000000000000000000000815250816003908162000123919062000ead565b50806004908162000135919062000ead565b5050505f620001496200097860201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90506001601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f7919062000ff6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200035d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000383919062000ff6565b6040518363ffffffff1660e01b8152600401620003a292919062001037565b6020604051808303815f875af1158015620003bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e5919062000ff6565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601f5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620004ce60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200097f60201b60201c565b5f805f805f805f6b033b2e3c9fd0803ce800000090506103e8601482620004f691906200108f565b62000502919062001106565b6009819055506103e86014826200051a91906200108f565b62000526919062001106565b600a819055508660148190555085601581905550846016819055506016546015546014546200055691906200113d565b6200056291906200113d565b601381905550836018819055508260198190555081601a81905550601a546019546018546200059291906200113d565b6200059e91906200113d565b60178190555073d605c5c8957860257fed1ee6154deefa821e77ca60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d605c5c8957860257fed1ee6154deefa821e77ca60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601e5f6200066162000a1d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601e5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601e5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601f5f620007e762000a1d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601f5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601f5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200096a338262000a4560201b60201c565b50505050505050506200128f565b5f33905090565b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ab6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aad90620011d5565b60405180910390fd5b62000ac95f838362000be260201b60201c565b62000ae08160025462000be760201b90919060201c565b60028190555062000b37815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000be760201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bd6919062001206565b60405180910390a35050565b505050565b5f80828462000bf791906200113d565b90508381101562000c3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c36906200126f565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000cc557607f821691505b60208210810362000cdb5762000cda62000c80565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d02565b62000d4b868362000d02565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d9562000d8f62000d898462000d63565b62000d6c565b62000d63565b9050919050565b5f819050919050565b62000db08362000d75565b62000dc862000dbf8262000d9c565b84845462000d0e565b825550505050565b5f90565b62000dde62000dd0565b62000deb81848462000da5565b505050565b5b8181101562000e125762000e065f8262000dd4565b60018101905062000df1565b5050565b601f82111562000e615762000e2b8162000ce1565b62000e368462000cf3565b8101602085101562000e46578190505b62000e5e62000e558562000cf3565b83018262000df0565b50505b505050565b5f82821c905092915050565b5f62000e835f198460080262000e66565b1980831691505092915050565b5f62000e9d838362000e72565b9150826002028217905092915050565b62000eb88262000c49565b67ffffffffffffffff81111562000ed45762000ed362000c53565b5b62000ee0825462000cad565b62000eed82828562000e16565b5f60209050601f83116001811462000f23575f841562000f0e578287015190505b62000f1a858262000e90565b86555062000f89565b601f19841662000f338662000ce1565b5f5b8281101562000f5c5784890151825560018201915060208501945060208101905062000f35565b8683101562000f7c578489015162000f78601f89168262000e72565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000fc08262000f95565b9050919050565b62000fd28162000fb4565b811462000fdd575f80fd5b50565b5f8151905062000ff08162000fc7565b92915050565b5f602082840312156200100e576200100d62000f91565b5b5f6200101d8482850162000fe0565b91505092915050565b620010318162000fb4565b82525050565b5f6040820190506200104c5f83018562001026565b6200105b602083018462001026565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200109b8262000d63565b9150620010a88362000d63565b9250828202620010b88162000d63565b91508282048414831517620010d257620010d162001062565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620011128262000d63565b91506200111f8362000d63565b925082620011325762001131620010d9565b5b828204905092915050565b5f620011498262000d63565b9150620011568362000d63565b925082820190508082111562001171576200117062001062565b5b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620011bd601f8362001177565b9150620011ca8262001187565b602082019050919050565b5f6020820190508181035f830152620011ee81620011af565b9050919050565b620012008162000d63565b82525050565b5f6020820190506200121b5f830184620011f5565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62001257601b8362001177565b9150620012648262001221565b602082019050919050565b5f6020820190508181035f830152620012888162001249565b9050919050565b60805161422a620012d25f395f8181610b5001528181611b9001528181612fbd0152818161309c015281816130c3015281816131590152613180015261422a5ff3fe608060405260043610610280575f3560e01c80637bce5a041161014e578063a4c82a00116100c0578063dd62ed3e11610079578063dd62ed3e14610995578063e884f260146109d1578063f11a24d3146109fb578063f2fde38b14610a25578063f637434214610a4d578063f8b45b0514610a7757610287565b8063a4c82a0014610875578063a9059cbb1461089f578063b62496f5146108db578063bbc0c74214610917578063c876d0b914610941578063d85ba0631461096b57610287565b80639213691311610112578063921369131461076757806395d89b41146107915780639c3b4fdc146107bb5780639fccce32146107e5578063a0d82dc51461080f578063a457c2d71461083957610287565b80637bce5a04146106a95780638a8c523c146106d35780638c0b5e22146106e95780638da5cb5b146107135780638ea5220f1461073d57610287565b8063313ce567116101f25780636a486a8e116101ab5780636a486a8e146105af5780636ddd1713146105d957806370a0823114610603578063715018a61461063f578063751039fc1461065557806375f0a8741461067f57610287565b8063313ce5671461047d57806339509351146104a757806349bd5a5e146104e35780634a62bb651461050d5780634fbee19314610537578063563912bd1461057357610287565b80631a8145bb116102445780631a8145bb1461036f5780631f3fed8f1461039957806323b872dd146103c357806327c8f835146103ff5780632c3e486c146104295780632e82f1a01461045357610287565b806306fdde031461028b578063095ea7b3146102b55780631694505e146102f157806318160ddd1461031b578063199ffc721461034557610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610aa1565b6040516102ac9190613317565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d691906133c8565b610b31565b6040516102e89190613420565b60405180910390f35b3480156102fc575f80fd5b50610305610b4e565b6040516103129190613494565b60405180910390f35b348015610326575f80fd5b5061032f610b72565b60405161033c91906134bc565b60405180910390f35b348015610350575f80fd5b50610359610b7b565b60405161036691906134bc565b60405180910390f35b34801561037a575f80fd5b50610383610b81565b60405161039091906134bc565b60405180910390f35b3480156103a4575f80fd5b506103ad610b87565b6040516103ba91906134bc565b60405180910390f35b3480156103ce575f80fd5b506103e960048036038101906103e491906134d5565b610b8d565b6040516103f69190613420565b60405180910390f35b34801561040a575f80fd5b50610413610c61565b6040516104209190613534565b60405180910390f35b348015610434575f80fd5b5061043d610c67565b60405161044a91906134bc565b60405180910390f35b34801561045e575f80fd5b50610467610c6d565b6040516104749190613420565b60405180910390f35b348015610488575f80fd5b50610491610c7f565b60405161049e9190613568565b60405180910390f35b3480156104b2575f80fd5b506104cd60048036038101906104c891906133c8565b610c87565b6040516104da9190613420565b60405180910390f35b3480156104ee575f80fd5b506104f7610d35565b6040516105049190613534565b60405180910390f35b348015610518575f80fd5b50610521610d5a565b60405161052e9190613420565b60405180910390f35b348015610542575f80fd5b5061055d60048036038101906105589190613581565b610d6c565b60405161056a9190613420565b60405180910390f35b34801561057e575f80fd5b5061059960048036038101906105949190613581565b610dbe565b6040516105a69190613420565b60405180910390f35b3480156105ba575f80fd5b506105c3610ddb565b6040516105d091906134bc565b60405180910390f35b3480156105e4575f80fd5b506105ed610de1565b6040516105fa9190613420565b60405180910390f35b34801561060e575f80fd5b5061062960048036038101906106249190613581565b610df4565b60405161063691906134bc565b60405180910390f35b34801561064a575f80fd5b50610653610e39565b005b348015610660575f80fd5b50610669610f8c565b6040516106769190613420565b60405180910390f35b34801561068a575f80fd5b50610693611043565b6040516106a09190613534565b60405180910390f35b3480156106b4575f80fd5b506106bd611068565b6040516106ca91906134bc565b60405180910390f35b3480156106de575f80fd5b506106e761106e565b005b3480156106f4575f80fd5b506106fd61113c565b60405161070a91906134bc565b60405180910390f35b34801561071e575f80fd5b50610727611142565b6040516107349190613534565b60405180910390f35b348015610748575f80fd5b5061075161116a565b60405161075e9190613534565b60405180910390f35b348015610772575f80fd5b5061077b61118f565b60405161078891906134bc565b60405180910390f35b34801561079c575f80fd5b506107a5611195565b6040516107b29190613317565b60405180910390f35b3480156107c6575f80fd5b506107cf611225565b6040516107dc91906134bc565b60405180910390f35b3480156107f0575f80fd5b506107f961122b565b60405161080691906134bc565b60405180910390f35b34801561081a575f80fd5b50610823611231565b60405161083091906134bc565b60405180910390f35b348015610844575f80fd5b5061085f600480360381019061085a91906133c8565b611237565b60405161086c9190613420565b60405180910390f35b348015610880575f80fd5b506108896112ff565b60405161089691906134bc565b60405180910390f35b3480156108aa575f80fd5b506108c560048036038101906108c091906133c8565b611305565b6040516108d29190613420565b60405180910390f35b3480156108e6575f80fd5b5061090160048036038101906108fc9190613581565b611322565b60405161090e9190613420565b60405180910390f35b348015610922575f80fd5b5061092b61133e565b6040516109389190613420565b60405180910390f35b34801561094c575f80fd5b50610955611351565b6040516109629190613420565b60405180910390f35b348015610976575f80fd5b5061097f611363565b60405161098c91906134bc565b60405180910390f35b3480156109a0575f80fd5b506109bb60048036038101906109b691906135ac565b611369565b6040516109c891906134bc565b60405180910390f35b3480156109dc575f80fd5b506109e56113eb565b6040516109f29190613420565b60405180910390f35b348015610a06575f80fd5b50610a0f6114a2565b604051610a1c91906134bc565b60405180910390f35b348015610a30575f80fd5b50610a4b6004803603810190610a469190613581565b6114a8565b005b348015610a58575f80fd5b50610a6161166a565b604051610a6e91906134bc565b60405180910390f35b348015610a82575f80fd5b50610a8b611670565b604051610a9891906134bc565b60405180910390f35b606060038054610ab090613617565b80601f0160208091040260200160405190810160405280929190818152602001828054610adc90613617565b8015610b275780601f10610afe57610100808354040283529160200191610b27565b820191905f5260205f20905b815481529060010190602001808311610b0a57829003601f168201915b5050505050905090565b5f610b44610b3d611676565b848461167d565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b600c5481565b601c5481565b601b5481565b5f610b99848484611840565b610c5684610ba5611676565b610c51856040518060600160405280602881526020016141a86028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c08611676565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126719092919063ffffffff16565b61167d565b600190509392505050565b61dead81565b600e5481565b600d5f9054906101000a900460ff1681565b5f6012905090565b5f610d2b610c93611676565b84610d268560015f610ca3611676565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126d390919063ffffffff16565b61167d565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105f9054906101000a900460ff1681565b5f601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b601f602052805f5260405f205f915054906101000a900460ff1681565b60175481565b601060029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e41611676565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690613691565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f610f95611676565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90613691565b60405180910390fd5b5f60105f6101000a81548160ff0219169083151502179055506001905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611076611676565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90613691565b60405180910390fd5b6001601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff021916908315150217905550565b60095481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b6060600480546111a490613617565b80601f01602080910402602001604051908101604052809291908181526020018280546111d090613617565b801561121b5780601f106111f25761010080835404028352916020019161121b565b820191905f5260205f20905b8154815290600101906020018083116111fe57829003601f168201915b5050505050905090565b60165481565b601d5481565b601a5481565b5f6112f5611243611676565b846112f0856040518060600160405280602581526020016141d06025913960015f61126c611676565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126719092919063ffffffff16565b61167d565b6001905092915050565b600f5481565b5f611318611311611676565b8484611840565b6001905092915050565b60208052805f5260405f205f915054906101000a900460ff1681565b601060019054906101000a900460ff1681565b60125f9054906101000a900460ff1681565b60135481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f6113f4611676565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990613691565b60405180910390fd5b5f60125f6101000a81548160ff0219169083151502179055506001905090565b60155481565b6114b0611676565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590613691565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061371f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906137ad565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611759576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117509061383b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161183391906134bc565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a5906138c9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390613957565b60405180910390fd5b5f81036119335761192e83835f612730565b61266c565b60105f9054906101000a900460ff1615611fdb5761194f611142565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119bd575061198d611142565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156119f557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a2f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a485750600660149054906101000a900460ff16155b15611fda57601060019054906101000a900460ff16611b3c57601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611afc5750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b32906139bf565b60405180910390fd5b5b60125f9054906101000a900460ff1615611d0057611b58611142565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611bdf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c38575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611cff574360115f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb390613a73565b60405180910390fd5b4360115f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611d9d5750601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e4457600954811115611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde90613b01565b60405180910390fd5b600a54611df383610df4565b82611dfe9190613b4c565b1115611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3690613bc9565b60405180910390fd5b611fd9565b60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611ee15750601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f3057600954811115611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613c57565b60405180910390fd5b611fd8565b601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611fd757600a54611f8a83610df4565b82611f959190613b4c565b1115611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd90613bc9565b60405180910390fd5b5b5b5b5b5b601060029054906101000a900460ff1680156120045750600660149054906101000a900460ff16155b8015612057575060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156120aa5750601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156120fd5750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612140576001600660146101000a81548160ff0219169083151502179055506121256129b9565b5f600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156121a3575060205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156121ba5750600d5f9054906101000a900460ff165b80156121f957506121c9611142565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561224b5750601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561226f576001600b5461225f9190613c75565b600c8190555061226d612c55565b505b5f600660149054906101000a900460ff16159050601e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061231e5750601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612327575f90505b5f601e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123c4575060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156123f6576123de600b5484612e1290919063ffffffff16565b601c5f8282546123ee9190613b4c565b925050819055505b811561265e5760205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561245357505f601754115b1561251d57612480606461247260175486612e1290919063ffffffff16565b612e8990919063ffffffff16565b9050601754601954826124939190613ca8565b61249d9190613d16565b601c5f8282546124ad9190613b4c565b92505081905550601754601a54826124c59190613ca8565b6124cf9190613d16565b601d5f8282546124df9190613b4c565b92505081905550601754601854826124f79190613ca8565b6125019190613d16565b601b5f8282546125119190613b4c565b9250508190555061263b565b60205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561257457505f601354115b1561263a576125a1606461259360135486612e1290919063ffffffff16565b612e8990919063ffffffff16565b9050601354601554826125b49190613ca8565b6125be9190613d16565b601c5f8282546125ce9190613b4c565b92505081905550601354601654826125e69190613ca8565b6125f09190613d16565b601d5f8282546126009190613b4c565b92505081905550601354601454826126189190613ca8565b6126229190613d16565b601b5f8282546126329190613b4c565b925050819055505b5b5f81111561264f5761264e853083612730565b5b808361265b9190613c75565b92505b612669858585612730565b50505b505050565b5f8383111582906126b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126af9190613317565b60405180910390fd5b505f83856126c69190613c75565b9050809150509392505050565b5f8082846126e19190613b4c565b905083811015612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90613d90565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361279e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612795906138c9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361280c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280390613957565b60405180910390fd5b612817838383612ed2565b61288081604051806060016040528060268152602001614182602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126719092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061290f815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126d390919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129ac91906134bc565b60405180910390a3505050565b5f6129c330610df4565b90505f601d54601b54601c546129d99190613b4c565b6129e39190613b4c565b90505f8082036129f557505050612c53565b5f600283601c5486612a079190613ca8565b612a119190613d16565b612a1b9190613d16565b90505f612a318286612ed790919063ffffffff16565b90505f479050612a4082612f20565b5f612a548247612ed790919063ffffffff16565b90505f612a7e87612a70601b5485612e1290919063ffffffff16565b612e8990919063ffffffff16565b90505f612aa888612a9a601d5486612e1290919063ffffffff16565b612e8990919063ffffffff16565b90505f818385612ab89190613c75565b612ac29190613c75565b90505f601c819055505f601b819055505f601d8190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b1e90613ddb565b5f6040518083038185875af1925050503d805f8114612b58576040519150601f19603f3d011682016040523d82523d5f602084013e612b5d565b606091505b5050809850505f87118015612b7157505f81115b15612bbe57612b808782613153565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c54604051612bb593929190613def565b60405180910390a15b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612c0390613ddb565b5f6040518083038185875af1925050503d805f8114612c3d576040519150601f19603f3d011682016040523d82523d5f602084013e612c42565b606091505b505080985050505050505050505050505b565b5f42600f819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612cb89190613534565b602060405180830381865afa158015612cd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf79190613e38565b90505f612d23600b54612d15600c5485612e1290919063ffffffff16565b612e8990919063ffffffff16565b90505f811115612d5c57612d5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612730565b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612dc6575f80fd5b505af1158015612dd8573d5f803e3d5ffd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b5f808303612e22575f9050612e83565b5f8284612e2f9190613ca8565b9050828482612e3e9190613d16565b14612e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7590613ed3565b60405180910390fd5b809150505b92915050565b5f612eca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061322c565b905092915050565b505050565b5f612f1883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612671565b905092915050565b5f600267ffffffffffffffff811115612f3c57612f3b613ef1565b5b604051908082528060200260200182016040528015612f6a5781602001602082028036833780820191505090505b50905030815f81518110612f8157612f80613f1e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613024573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130489190613f5f565b8160018151811061305c5761305b613f1e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130c1307f00000000000000000000000000000000000000000000000000000000000000008461167d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161312295949392919061407a565b5f604051808303815f87803b158015613139575f80fd5b505af115801561314b573d5f803e3d5ffd5b505050505050565b61317e307f00000000000000000000000000000000000000000000000000000000000000008461167d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b81526004016131e4969594939291906140d2565b60606040518083038185885af1158015613200573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906132259190614131565b5050505050565b5f8083118290613272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132699190613317565b60405180910390fd5b505f83856132809190613d16565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156132c45780820151818401526020810190506132a9565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6132e98261328d565b6132f38185613297565b93506133038185602086016132a7565b61330c816132cf565b840191505092915050565b5f6020820190508181035f83015261332f81846132df565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6133648261333b565b9050919050565b6133748161335a565b811461337e575f80fd5b50565b5f8135905061338f8161336b565b92915050565b5f819050919050565b6133a781613395565b81146133b1575f80fd5b50565b5f813590506133c28161339e565b92915050565b5f80604083850312156133de576133dd613337565b5b5f6133eb85828601613381565b92505060206133fc858286016133b4565b9150509250929050565b5f8115159050919050565b61341a81613406565b82525050565b5f6020820190506134335f830184613411565b92915050565b5f819050919050565b5f61345c6134576134528461333b565b613439565b61333b565b9050919050565b5f61346d82613442565b9050919050565b5f61347e82613463565b9050919050565b61348e81613474565b82525050565b5f6020820190506134a75f830184613485565b92915050565b6134b681613395565b82525050565b5f6020820190506134cf5f8301846134ad565b92915050565b5f805f606084860312156134ec576134eb613337565b5b5f6134f986828701613381565b935050602061350a86828701613381565b925050604061351b868287016133b4565b9150509250925092565b61352e8161335a565b82525050565b5f6020820190506135475f830184613525565b92915050565b5f60ff82169050919050565b6135628161354d565b82525050565b5f60208201905061357b5f830184613559565b92915050565b5f6020828403121561359657613595613337565b5b5f6135a384828501613381565b91505092915050565b5f80604083850312156135c2576135c1613337565b5b5f6135cf85828601613381565b92505060206135e085828601613381565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061362e57607f821691505b602082108103613641576136406135ea565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61367b602083613297565b915061368682613647565b602082019050919050565b5f6020820190508181035f8301526136a88161366f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613709602683613297565b9150613714826136af565b604082019050919050565b5f6020820190508181035f830152613736816136fd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613797602483613297565b91506137a28261373d565b604082019050919050565b5f6020820190508181035f8301526137c48161378b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613825602283613297565b9150613830826137cb565b604082019050919050565b5f6020820190508181035f83015261385281613819565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6138b3602583613297565b91506138be82613859565b604082019050919050565b5f6020820190508181035f8301526138e0816138a7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613941602383613297565b915061394c826138e7565b604082019050919050565b5f6020820190508181035f83015261396e81613935565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6139a9601683613297565b91506139b482613975565b602082019050919050565b5f6020820190508181035f8301526139d68161399d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f613a5d604983613297565b9150613a68826139dd565b606082019050919050565b5f6020820190508181035f830152613a8a81613a51565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785478416d6f756e742e0000000000000000000000000000000000000000602082015250565b5f613aeb602c83613297565b9150613af682613a91565b604082019050919050565b5f6020820190508181035f830152613b1881613adf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b5682613395565b9150613b6183613395565b9250828201905080821115613b7957613b78613b1f565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613bb3601383613297565b9150613bbe82613b7f565b602082019050919050565b5f6020820190508181035f830152613be081613ba7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785478416d6f756e742e00000000000000000000000000000000000000602082015250565b5f613c41602d83613297565b9150613c4c82613be7565b604082019050919050565b5f6020820190508181035f830152613c6e81613c35565b9050919050565b5f613c7f82613395565b9150613c8a83613395565b9250828203905081811115613ca257613ca1613b1f565b5b92915050565b5f613cb282613395565b9150613cbd83613395565b9250828202613ccb81613395565b91508282048414831517613ce257613ce1613b1f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d2082613395565b9150613d2b83613395565b925082613d3b57613d3a613ce9565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613d7a601b83613297565b9150613d8582613d46565b602082019050919050565b5f6020820190508181035f830152613da781613d6e565b9050919050565b5f81905092915050565b50565b5f613dc65f83613dae565b9150613dd182613db8565b5f82019050919050565b5f613de582613dbb565b9150819050919050565b5f606082019050613e025f8301866134ad565b613e0f60208301856134ad565b613e1c60408301846134ad565b949350505050565b5f81519050613e328161339e565b92915050565b5f60208284031215613e4d57613e4c613337565b5b5f613e5a84828501613e24565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ebd602183613297565b9150613ec882613e63565b604082019050919050565b5f6020820190508181035f830152613eea81613eb1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613f598161336b565b92915050565b5f60208284031215613f7457613f73613337565b5b5f613f8184828501613f4b565b91505092915050565b5f819050919050565b5f613fad613fa8613fa384613f8a565b613439565b613395565b9050919050565b613fbd81613f93565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613ff58161335a565b82525050565b5f6140068383613fec565b60208301905092915050565b5f602082019050919050565b5f61402882613fc3565b6140328185613fcd565b935061403d83613fdd565b805f5b8381101561406d5781516140548882613ffb565b975061405f83614012565b925050600181019050614040565b5085935050505092915050565b5f60a08201905061408d5f8301886134ad565b61409a6020830187613fb4565b81810360408301526140ac818661401e565b90506140bb6060830185613525565b6140c860808301846134ad565b9695505050505050565b5f60c0820190506140e55f830189613525565b6140f260208301886134ad565b6140ff6040830187613fb4565b61410c6060830186613fb4565b6141196080830185613525565b61412660a08301846134ad565b979650505050505050565b5f805f6060848603121561414857614147613337565b5b5f61415586828701613e24565b935050602061416686828701613e24565b925050604061417786828701613e24565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3e1c70637ddb10e8b41ff839b9ae2c1670128bed968ede204b8bd92085c0e6264736f6c63430008140033

Deployed Bytecode

0x608060405260043610610280575f3560e01c80637bce5a041161014e578063a4c82a00116100c0578063dd62ed3e11610079578063dd62ed3e14610995578063e884f260146109d1578063f11a24d3146109fb578063f2fde38b14610a25578063f637434214610a4d578063f8b45b0514610a7757610287565b8063a4c82a0014610875578063a9059cbb1461089f578063b62496f5146108db578063bbc0c74214610917578063c876d0b914610941578063d85ba0631461096b57610287565b80639213691311610112578063921369131461076757806395d89b41146107915780639c3b4fdc146107bb5780639fccce32146107e5578063a0d82dc51461080f578063a457c2d71461083957610287565b80637bce5a04146106a95780638a8c523c146106d35780638c0b5e22146106e95780638da5cb5b146107135780638ea5220f1461073d57610287565b8063313ce567116101f25780636a486a8e116101ab5780636a486a8e146105af5780636ddd1713146105d957806370a0823114610603578063715018a61461063f578063751039fc1461065557806375f0a8741461067f57610287565b8063313ce5671461047d57806339509351146104a757806349bd5a5e146104e35780634a62bb651461050d5780634fbee19314610537578063563912bd1461057357610287565b80631a8145bb116102445780631a8145bb1461036f5780631f3fed8f1461039957806323b872dd146103c357806327c8f835146103ff5780632c3e486c146104295780632e82f1a01461045357610287565b806306fdde031461028b578063095ea7b3146102b55780631694505e146102f157806318160ddd1461031b578063199ffc721461034557610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610aa1565b6040516102ac9190613317565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d691906133c8565b610b31565b6040516102e89190613420565b60405180910390f35b3480156102fc575f80fd5b50610305610b4e565b6040516103129190613494565b60405180910390f35b348015610326575f80fd5b5061032f610b72565b60405161033c91906134bc565b60405180910390f35b348015610350575f80fd5b50610359610b7b565b60405161036691906134bc565b60405180910390f35b34801561037a575f80fd5b50610383610b81565b60405161039091906134bc565b60405180910390f35b3480156103a4575f80fd5b506103ad610b87565b6040516103ba91906134bc565b60405180910390f35b3480156103ce575f80fd5b506103e960048036038101906103e491906134d5565b610b8d565b6040516103f69190613420565b60405180910390f35b34801561040a575f80fd5b50610413610c61565b6040516104209190613534565b60405180910390f35b348015610434575f80fd5b5061043d610c67565b60405161044a91906134bc565b60405180910390f35b34801561045e575f80fd5b50610467610c6d565b6040516104749190613420565b60405180910390f35b348015610488575f80fd5b50610491610c7f565b60405161049e9190613568565b60405180910390f35b3480156104b2575f80fd5b506104cd60048036038101906104c891906133c8565b610c87565b6040516104da9190613420565b60405180910390f35b3480156104ee575f80fd5b506104f7610d35565b6040516105049190613534565b60405180910390f35b348015610518575f80fd5b50610521610d5a565b60405161052e9190613420565b60405180910390f35b348015610542575f80fd5b5061055d60048036038101906105589190613581565b610d6c565b60405161056a9190613420565b60405180910390f35b34801561057e575f80fd5b5061059960048036038101906105949190613581565b610dbe565b6040516105a69190613420565b60405180910390f35b3480156105ba575f80fd5b506105c3610ddb565b6040516105d091906134bc565b60405180910390f35b3480156105e4575f80fd5b506105ed610de1565b6040516105fa9190613420565b60405180910390f35b34801561060e575f80fd5b5061062960048036038101906106249190613581565b610df4565b60405161063691906134bc565b60405180910390f35b34801561064a575f80fd5b50610653610e39565b005b348015610660575f80fd5b50610669610f8c565b6040516106769190613420565b60405180910390f35b34801561068a575f80fd5b50610693611043565b6040516106a09190613534565b60405180910390f35b3480156106b4575f80fd5b506106bd611068565b6040516106ca91906134bc565b60405180910390f35b3480156106de575f80fd5b506106e761106e565b005b3480156106f4575f80fd5b506106fd61113c565b60405161070a91906134bc565b60405180910390f35b34801561071e575f80fd5b50610727611142565b6040516107349190613534565b60405180910390f35b348015610748575f80fd5b5061075161116a565b60405161075e9190613534565b60405180910390f35b348015610772575f80fd5b5061077b61118f565b60405161078891906134bc565b60405180910390f35b34801561079c575f80fd5b506107a5611195565b6040516107b29190613317565b60405180910390f35b3480156107c6575f80fd5b506107cf611225565b6040516107dc91906134bc565b60405180910390f35b3480156107f0575f80fd5b506107f961122b565b60405161080691906134bc565b60405180910390f35b34801561081a575f80fd5b50610823611231565b60405161083091906134bc565b60405180910390f35b348015610844575f80fd5b5061085f600480360381019061085a91906133c8565b611237565b60405161086c9190613420565b60405180910390f35b348015610880575f80fd5b506108896112ff565b60405161089691906134bc565b60405180910390f35b3480156108aa575f80fd5b506108c560048036038101906108c091906133c8565b611305565b6040516108d29190613420565b60405180910390f35b3480156108e6575f80fd5b5061090160048036038101906108fc9190613581565b611322565b60405161090e9190613420565b60405180910390f35b348015610922575f80fd5b5061092b61133e565b6040516109389190613420565b60405180910390f35b34801561094c575f80fd5b50610955611351565b6040516109629190613420565b60405180910390f35b348015610976575f80fd5b5061097f611363565b60405161098c91906134bc565b60405180910390f35b3480156109a0575f80fd5b506109bb60048036038101906109b691906135ac565b611369565b6040516109c891906134bc565b60405180910390f35b3480156109dc575f80fd5b506109e56113eb565b6040516109f29190613420565b60405180910390f35b348015610a06575f80fd5b50610a0f6114a2565b604051610a1c91906134bc565b60405180910390f35b348015610a30575f80fd5b50610a4b6004803603810190610a469190613581565b6114a8565b005b348015610a58575f80fd5b50610a6161166a565b604051610a6e91906134bc565b60405180910390f35b348015610a82575f80fd5b50610a8b611670565b604051610a9891906134bc565b60405180910390f35b606060038054610ab090613617565b80601f0160208091040260200160405190810160405280929190818152602001828054610adc90613617565b8015610b275780601f10610afe57610100808354040283529160200191610b27565b820191905f5260205f20905b815481529060010190602001808311610b0a57829003601f168201915b5050505050905090565b5f610b44610b3d611676565b848461167d565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b600c5481565b601c5481565b601b5481565b5f610b99848484611840565b610c5684610ba5611676565b610c51856040518060600160405280602881526020016141a86028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c08611676565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126719092919063ffffffff16565b61167d565b600190509392505050565b61dead81565b600e5481565b600d5f9054906101000a900460ff1681565b5f6012905090565b5f610d2b610c93611676565b84610d268560015f610ca3611676565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126d390919063ffffffff16565b61167d565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105f9054906101000a900460ff1681565b5f601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b601f602052805f5260405f205f915054906101000a900460ff1681565b60175481565b601060029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e41611676565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690613691565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f610f95611676565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90613691565b60405180910390fd5b5f60105f6101000a81548160ff0219169083151502179055506001905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611076611676565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90613691565b60405180910390fd5b6001601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff021916908315150217905550565b60095481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b6060600480546111a490613617565b80601f01602080910402602001604051908101604052809291908181526020018280546111d090613617565b801561121b5780601f106111f25761010080835404028352916020019161121b565b820191905f5260205f20905b8154815290600101906020018083116111fe57829003601f168201915b5050505050905090565b60165481565b601d5481565b601a5481565b5f6112f5611243611676565b846112f0856040518060600160405280602581526020016141d06025913960015f61126c611676565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126719092919063ffffffff16565b61167d565b6001905092915050565b600f5481565b5f611318611311611676565b8484611840565b6001905092915050565b60208052805f5260405f205f915054906101000a900460ff1681565b601060019054906101000a900460ff1681565b60125f9054906101000a900460ff1681565b60135481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f6113f4611676565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990613691565b60405180910390fd5b5f60125f6101000a81548160ff0219169083151502179055506001905090565b60155481565b6114b0611676565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590613691565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061371f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906137ad565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611759576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117509061383b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161183391906134bc565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a5906138c9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390613957565b60405180910390fd5b5f81036119335761192e83835f612730565b61266c565b60105f9054906101000a900460ff1615611fdb5761194f611142565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119bd575061198d611142565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156119f557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a2f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a485750600660149054906101000a900460ff16155b15611fda57601060019054906101000a900460ff16611b3c57601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611afc5750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b32906139bf565b60405180910390fd5b5b60125f9054906101000a900460ff1615611d0057611b58611142565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611bdf57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c38575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611cff574360115f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb390613a73565b60405180910390fd5b4360115f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611d9d5750601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e4457600954811115611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde90613b01565b60405180910390fd5b600a54611df383610df4565b82611dfe9190613b4c565b1115611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3690613bc9565b60405180910390fd5b611fd9565b60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611ee15750601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f3057600954811115611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613c57565b60405180910390fd5b611fd8565b601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611fd757600a54611f8a83610df4565b82611f959190613b4c565b1115611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd90613bc9565b60405180910390fd5b5b5b5b5b5b601060029054906101000a900460ff1680156120045750600660149054906101000a900460ff16155b8015612057575060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156120aa5750601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156120fd5750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612140576001600660146101000a81548160ff0219169083151502179055506121256129b9565b5f600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156121a3575060205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156121ba5750600d5f9054906101000a900460ff165b80156121f957506121c9611142565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561224b5750601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561226f576001600b5461225f9190613c75565b600c8190555061226d612c55565b505b5f600660149054906101000a900460ff16159050601e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061231e5750601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612327575f90505b5f601e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123c4575060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156123f6576123de600b5484612e1290919063ffffffff16565b601c5f8282546123ee9190613b4c565b925050819055505b811561265e5760205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561245357505f601754115b1561251d57612480606461247260175486612e1290919063ffffffff16565b612e8990919063ffffffff16565b9050601754601954826124939190613ca8565b61249d9190613d16565b601c5f8282546124ad9190613b4c565b92505081905550601754601a54826124c59190613ca8565b6124cf9190613d16565b601d5f8282546124df9190613b4c565b92505081905550601754601854826124f79190613ca8565b6125019190613d16565b601b5f8282546125119190613b4c565b9250508190555061263b565b60205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561257457505f601354115b1561263a576125a1606461259360135486612e1290919063ffffffff16565b612e8990919063ffffffff16565b9050601354601554826125b49190613ca8565b6125be9190613d16565b601c5f8282546125ce9190613b4c565b92505081905550601354601654826125e69190613ca8565b6125f09190613d16565b601d5f8282546126009190613b4c565b92505081905550601354601454826126189190613ca8565b6126229190613d16565b601b5f8282546126329190613b4c565b925050819055505b5b5f81111561264f5761264e853083612730565b5b808361265b9190613c75565b92505b612669858585612730565b50505b505050565b5f8383111582906126b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126af9190613317565b60405180910390fd5b505f83856126c69190613c75565b9050809150509392505050565b5f8082846126e19190613b4c565b905083811015612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90613d90565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361279e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612795906138c9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361280c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280390613957565b60405180910390fd5b612817838383612ed2565b61288081604051806060016040528060268152602001614182602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126719092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061290f815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126d390919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129ac91906134bc565b60405180910390a3505050565b5f6129c330610df4565b90505f601d54601b54601c546129d99190613b4c565b6129e39190613b4c565b90505f8082036129f557505050612c53565b5f600283601c5486612a079190613ca8565b612a119190613d16565b612a1b9190613d16565b90505f612a318286612ed790919063ffffffff16565b90505f479050612a4082612f20565b5f612a548247612ed790919063ffffffff16565b90505f612a7e87612a70601b5485612e1290919063ffffffff16565b612e8990919063ffffffff16565b90505f612aa888612a9a601d5486612e1290919063ffffffff16565b612e8990919063ffffffff16565b90505f818385612ab89190613c75565b612ac29190613c75565b90505f601c819055505f601b819055505f601d8190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b1e90613ddb565b5f6040518083038185875af1925050503d805f8114612b58576040519150601f19603f3d011682016040523d82523d5f602084013e612b5d565b606091505b5050809850505f87118015612b7157505f81115b15612bbe57612b808782613153565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c54604051612bb593929190613def565b60405180910390a15b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612c0390613ddb565b5f6040518083038185875af1925050503d805f8114612c3d576040519150601f19603f3d011682016040523d82523d5f602084013e612c42565b606091505b505080985050505050505050505050505b565b5f42600f819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612cb89190613534565b602060405180830381865afa158015612cd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cf79190613e38565b90505f612d23600b54612d15600c5485612e1290919063ffffffff16565b612e8990919063ffffffff16565b90505f811115612d5c57612d5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612730565b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612dc6575f80fd5b505af1158015612dd8573d5f803e3d5ffd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b5f808303612e22575f9050612e83565b5f8284612e2f9190613ca8565b9050828482612e3e9190613d16565b14612e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7590613ed3565b60405180910390fd5b809150505b92915050565b5f612eca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061322c565b905092915050565b505050565b5f612f1883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612671565b905092915050565b5f600267ffffffffffffffff811115612f3c57612f3b613ef1565b5b604051908082528060200260200182016040528015612f6a5781602001602082028036833780820191505090505b50905030815f81518110612f8157612f80613f1e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613024573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130489190613f5f565b8160018151811061305c5761305b613f1e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130c1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461167d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161312295949392919061407a565b5f604051808303815f87803b158015613139575f80fd5b505af115801561314b573d5f803e3d5ffd5b505050505050565b61317e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461167d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b81526004016131e4969594939291906140d2565b60606040518083038185885af1158015613200573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906132259190614131565b5050505050565b5f8083118290613272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132699190613317565b60405180910390fd5b505f83856132809190613d16565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156132c45780820151818401526020810190506132a9565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6132e98261328d565b6132f38185613297565b93506133038185602086016132a7565b61330c816132cf565b840191505092915050565b5f6020820190508181035f83015261332f81846132df565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6133648261333b565b9050919050565b6133748161335a565b811461337e575f80fd5b50565b5f8135905061338f8161336b565b92915050565b5f819050919050565b6133a781613395565b81146133b1575f80fd5b50565b5f813590506133c28161339e565b92915050565b5f80604083850312156133de576133dd613337565b5b5f6133eb85828601613381565b92505060206133fc858286016133b4565b9150509250929050565b5f8115159050919050565b61341a81613406565b82525050565b5f6020820190506134335f830184613411565b92915050565b5f819050919050565b5f61345c6134576134528461333b565b613439565b61333b565b9050919050565b5f61346d82613442565b9050919050565b5f61347e82613463565b9050919050565b61348e81613474565b82525050565b5f6020820190506134a75f830184613485565b92915050565b6134b681613395565b82525050565b5f6020820190506134cf5f8301846134ad565b92915050565b5f805f606084860312156134ec576134eb613337565b5b5f6134f986828701613381565b935050602061350a86828701613381565b925050604061351b868287016133b4565b9150509250925092565b61352e8161335a565b82525050565b5f6020820190506135475f830184613525565b92915050565b5f60ff82169050919050565b6135628161354d565b82525050565b5f60208201905061357b5f830184613559565b92915050565b5f6020828403121561359657613595613337565b5b5f6135a384828501613381565b91505092915050565b5f80604083850312156135c2576135c1613337565b5b5f6135cf85828601613381565b92505060206135e085828601613381565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061362e57607f821691505b602082108103613641576136406135ea565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61367b602083613297565b915061368682613647565b602082019050919050565b5f6020820190508181035f8301526136a88161366f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613709602683613297565b9150613714826136af565b604082019050919050565b5f6020820190508181035f830152613736816136fd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613797602483613297565b91506137a28261373d565b604082019050919050565b5f6020820190508181035f8301526137c48161378b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613825602283613297565b9150613830826137cb565b604082019050919050565b5f6020820190508181035f83015261385281613819565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6138b3602583613297565b91506138be82613859565b604082019050919050565b5f6020820190508181035f8301526138e0816138a7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613941602383613297565b915061394c826138e7565b604082019050919050565b5f6020820190508181035f83015261396e81613935565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6139a9601683613297565b91506139b482613975565b602082019050919050565b5f6020820190508181035f8301526139d68161399d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f613a5d604983613297565b9150613a68826139dd565b606082019050919050565b5f6020820190508181035f830152613a8a81613a51565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785478416d6f756e742e0000000000000000000000000000000000000000602082015250565b5f613aeb602c83613297565b9150613af682613a91565b604082019050919050565b5f6020820190508181035f830152613b1881613adf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b5682613395565b9150613b6183613395565b9250828201905080821115613b7957613b78613b1f565b5b92915050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613bb3601383613297565b9150613bbe82613b7f565b602082019050919050565b5f6020820190508181035f830152613be081613ba7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785478416d6f756e742e00000000000000000000000000000000000000602082015250565b5f613c41602d83613297565b9150613c4c82613be7565b604082019050919050565b5f6020820190508181035f830152613c6e81613c35565b9050919050565b5f613c7f82613395565b9150613c8a83613395565b9250828203905081811115613ca257613ca1613b1f565b5b92915050565b5f613cb282613395565b9150613cbd83613395565b9250828202613ccb81613395565b91508282048414831517613ce257613ce1613b1f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d2082613395565b9150613d2b83613395565b925082613d3b57613d3a613ce9565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613d7a601b83613297565b9150613d8582613d46565b602082019050919050565b5f6020820190508181035f830152613da781613d6e565b9050919050565b5f81905092915050565b50565b5f613dc65f83613dae565b9150613dd182613db8565b5f82019050919050565b5f613de582613dbb565b9150819050919050565b5f606082019050613e025f8301866134ad565b613e0f60208301856134ad565b613e1c60408301846134ad565b949350505050565b5f81519050613e328161339e565b92915050565b5f60208284031215613e4d57613e4c613337565b5b5f613e5a84828501613e24565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ebd602183613297565b9150613ec882613e63565b604082019050919050565b5f6020820190508181035f830152613eea81613eb1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613f598161336b565b92915050565b5f60208284031215613f7457613f73613337565b5b5f613f8184828501613f4b565b91505092915050565b5f819050919050565b5f613fad613fa8613fa384613f8a565b613439565b613395565b9050919050565b613fbd81613f93565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613ff58161335a565b82525050565b5f6140068383613fec565b60208301905092915050565b5f602082019050919050565b5f61402882613fc3565b6140328185613fcd565b935061403d83613fdd565b805f5b8381101561406d5781516140548882613ffb565b975061405f83614012565b925050600181019050614040565b5085935050505092915050565b5f60a08201905061408d5f8301886134ad565b61409a6020830187613fb4565b81810360408301526140ac818661401e565b90506140bb6060830185613525565b6140c860808301846134ad565b9695505050505050565b5f60c0820190506140e55f830189613525565b6140f260208301886134ad565b6140ff6040830187613fb4565b61410c6060830186613fb4565b6141196080830185613525565b61412660a08301846134ad565b979650505050505050565b5f805f6060848603121561414857614147613337565b5b5f61415586828701613e24565b935050602061416686828701613e24565b925050604061417786828701613e24565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3e1c70637ddb10e8b41ff839b9ae2c1670128bed968ede204b8bd92085c0e6264736f6c63430008140033

Deployed Bytecode Sourcemap

27662:12010:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7738:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9912:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27737:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8861:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28133:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28878:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28838;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10564:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27830:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28217:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28178:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8702:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11329:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27795:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28309:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32506:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29097:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28692:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28389:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9033:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22240:148;;;;;;;;;;;;;:::i;:::-;;31983:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27959:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28584;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31818:112;;;;;;;;;;;;;:::i;:::-;;28030:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21596:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27996:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28727:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7958:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28658:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28918:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28803:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12051:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28269:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9374:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29311:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28349:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28501:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28550:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9613:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32165:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28621:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22544:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28765:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28063:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7738:100;7792:13;7825:5;7818:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7738:100;:::o;9912:169::-;9995:4;10012:39;10021:12;:10;:12::i;:::-;10035:7;10044:6;10012:8;:39::i;:::-;10069:4;10062:11;;9912:169;;;;:::o;27737:51::-;;;:::o;8861:108::-;8922:7;8949:12;;8942:19;;8861:108;:::o;28133:38::-;;;;:::o;28878:33::-;;;;:::o;28838:::-;;;;:::o;10564:355::-;10704:4;10721:36;10731:6;10739:9;10750:6;10721:9;:36::i;:::-;10768:121;10777:6;10785:12;:10;:12::i;:::-;10799:89;10837:6;10799:89;;;;;;;;;;;;;;;;;:11;:19;10811:6;10799:19;;;;;;;;;;;;;;;:33;10819:12;:10;:12::i;:::-;10799:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10768:8;:121::i;:::-;10907:4;10900:11;;10564:355;;;;;:::o;27830:89::-;27876:42;27830:89;:::o;28217:45::-;;;;:::o;28178:32::-;;;;;;;;;;;;;:::o;8702:93::-;8760:5;8785:2;8778:9;;8702:93;:::o;11329:218::-;11417:4;11434:83;11443:12;:10;:12::i;:::-;11457:7;11466:50;11505:10;11466:11;:25;11478:12;:10;:12::i;:::-;11466:25;;;;;;;;;;;;;;;:34;11492:7;11466:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11434:8;:83::i;:::-;11535:4;11528:11;;11329:218;;;;:::o;27795:28::-;;;;;;;;;;;;;:::o;28309:33::-;;;;;;;;;;;;;:::o;32506:125::-;32571:4;32595:19;:28;32615:7;32595:28;;;;;;;;;;;;;;;;;;;;;;;;;32588:35;;32506:125;;;:::o;29097:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;28692:28::-;;;;:::o;28389:31::-;;;;;;;;;;;;;:::o;9033:127::-;9107:7;9134:9;:18;9144:7;9134:18;;;;;;;;;;;;;;;;9127:25;;9033:127;;;:::o;22240:148::-;21819:12;:10;:12::i;:::-;21809:22;;:6;;;;;;;;;;;:22;;;21801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22347:1:::1;22310:40;;22331:6;;;;;;;;;;;22310:40;;;;;;;;;;;;22378:1;22361:6;;:19;;;;;;;;;;;;;;;;;;22240:148::o:0;31983:120::-;32035:4;21819:12;:10;:12::i;:::-;21809:22;;:6;;;;;;;;;;;:22;;;21801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32068:5:::1;32051:14;;:22;;;;;;;;;;;;;;;;;;32091:4;32084:11;;31983:120:::0;:::o;27959:30::-;;;;;;;;;;;;;:::o;28584:::-;;;;:::o;31818:112::-;21819:12;:10;:12::i;:::-;21809:22;;:6;;;;;;;;;;;:22;;;21801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31889:4:::1;31873:13;;:20;;;;;;;;;;;;;;;;;;31918:4;31904:11;;:18;;;;;;;;;;;;;;;;;;31818:112::o:0;28030:26::-;;;;:::o;21596:79::-;21634:7;21661:6;;;;;;;;;;;21654:13;;21596:79;:::o;27996:24::-;;;;;;;;;;;;;:::o;28727:31::-;;;;:::o;7958:104::-;8014:13;8047:7;8040:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7958:104;:::o;28658:24::-;;;;:::o;28918:27::-;;;;:::o;28803:25::-;;;;:::o;12051:269::-;12144:4;12161:129;12170:12;:10;:12::i;:::-;12184:7;12193:96;12232:15;12193:96;;;;;;;;;;;;;;;;;:11;:25;12205:12;:10;:12::i;:::-;12193:25;;;;;;;;;;;;;;;:34;12219:7;12193:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12161:8;:129::i;:::-;12308:4;12301:11;;12051:269;;;;:::o;28269:29::-;;;;:::o;9374:175::-;9460:4;9477:42;9487:12;:10;:12::i;:::-;9501:9;9512:6;9477:9;:42::i;:::-;9537:4;9530:11;;9374:175;;;;:::o;29311:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;28349:33::-;;;;;;;;;;;;;:::o;28501:39::-;;;;;;;;;;;;;:::o;28550:27::-;;;;:::o;9613:151::-;9702:7;9729:11;:18;9741:5;9729:18;;;;;;;;;;;;;;;:27;9748:7;9729:27;;;;;;;;;;;;;;;;9722:34;;9613:151;;;;:::o;32165:134::-;32225:4;21819:12;:10;:12::i;:::-;21809:22;;:6;;;;;;;;;;;:22;;;21801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32264:5:::1;32241:20;;:28;;;;;;;;;;;;;;;;;;32287:4;32280:11;;32165:134:::0;:::o;28621:30::-;;;;:::o;22544:244::-;21819:12;:10;:12::i;:::-;21809:22;;:6;;;;;;;;;;;:22;;;21801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22653:1:::1;22633:22;;:8;:22;;::::0;22625:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22743:8;22714:38;;22735:6;;;;;;;;;;;22714:38;;;;;;;;;;;;22772:8;22763:6;;:17;;;;;;;;;;;;;;;;;;22544:244:::0;:::o;28765:31::-;;;;:::o;28063:24::-;;;;:::o;342:98::-;395:7;422:10;415:17;;342:98;:::o;15247:381::-;15400:1;15383:19;;:5;:19;;;15375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15481:1;15462:21;;:7;:21;;;15454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15566:6;15536:11;:18;15548:5;15536:18;;;;;;;;;;;;;;;:27;15555:7;15536:27;;;;;;;;;;;;;;;:36;;;;15604:7;15588:32;;15597:5;15588:32;;;15613:6;15588:32;;;;;;:::i;:::-;;;;;;;;15247:381;;;:::o;32640:4148::-;32788:1;32772:18;;:4;:18;;;32764:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32865:1;32851:16;;:2;:16;;;32843:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32932:1;32922:6;:11;32919:92;;32950:28;32966:4;32972:2;32976:1;32950:15;:28::i;:::-;32993:7;;32919:92;33027:14;;;;;;;;;;;33024:1736;;;33087:7;:5;:7::i;:::-;33079:15;;:4;:15;;;;:49;;;;;33121:7;:5;:7::i;:::-;33115:13;;:2;:13;;;;33079:49;:86;;;;;33163:1;33149:16;;:2;:16;;;;33079:86;:128;;;;;33200:6;33186:21;;:2;:21;;;;33079:128;:158;;;;;33229:8;;;;;;;;;;;33228:9;33079:158;33057:1692;;;33275:13;;;;;;;;;;;33271:148;;33320:19;:25;33340:4;33320:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33349:19;:23;33369:2;33349:23;;;;;;;;;;;;;;;;;;;;;;;;;33320:52;33312:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33271:148;33578:20;;;;;;;;;;;33574:423;;;33632:7;:5;:7::i;:::-;33626:13;;:2;:13;;;;:47;;;;;33657:15;33643:30;;:2;:30;;;;33626:47;:79;;;;;33691:13;;;;;;;;;;;33677:28;;:2;:28;;;;33626:79;33622:356;;;33783:12;33741:28;:39;33770:9;33741:39;;;;;;;;;;;;;;;;:54;33733:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33942:12;33900:28;:39;33929:9;33900:39;;;;;;;;;;;;;;;:54;;;;33622:356;33574:423;34050:25;:31;34076:4;34050:31;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;34086:22;:26;34109:2;34086:26;;;;;;;;;;;;;;;;;;;;;;;;;34085:27;34050:62;34046:688;;;34155:11;;34145:6;:21;;34137:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;34272:9;;34255:13;34265:2;34255:9;:13::i;:::-;34246:6;:22;;;;:::i;:::-;:35;;34238:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34046:688;;;34384:25;:29;34410:2;34384:29;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;34418:22;:28;34441:4;34418:28;;;;;;;;;;;;;;;;;;;;;;;;;34417:29;34384:62;34380:354;;;34489:11;;34479:6;:21;;34471:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;34380:354;;;34597:22;:26;34620:2;34597:26;;;;;;;;;;;;;;;;;;;;;;;;;34593:141;;34681:9;;34664:13;34674:2;34664:9;:13::i;:::-;34655:6;:22;;;;:::i;:::-;:35;;34647:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34593:141;34380:354;34046:688;33057:1692;33024:1736;34791:11;;;;;;;;;;;:37;;;;;34820:8;;;;;;;;;;;34819:9;34791:37;:86;;;;;34846:25;:31;34872:4;34846:31;;;;;;;;;;;;;;;;;;;;;;;;;34845:32;34791:86;:129;;;;;34895:19;:25;34915:4;34895:25;;;;;;;;;;;;;;;;;;;;;;;;;34894:26;34791:129;:170;;;;;34938:19;:23;34958:2;34938:23;;;;;;;;;;;;;;;;;;;;;;;;;34937:24;34791:170;34773:304;;;34999:4;34988:8;;:15;;;;;;;;;;;;;;;;;;35021:10;:8;:10::i;:::-;35060:5;35049:8;;:16;;;;;;;;;;;;;;;;;;34773:304;35094:8;;;;;;;;;;;35093:9;:42;;;;;35106:25;:29;35132:2;35106:29;;;;;;;;;;;;;;;;;;;;;;;;;35093:42;:59;;;;;35139:13;;;;;;;;;;;35093:59;:78;;;;;35164:7;:5;:7::i;:::-;35156:15;;:4;:15;;;;35093:78;:107;;;;;35175:19;:25;35195:4;35175:25;;;;;;;;;;;;;;;;;;;;;;;;;35093:107;35090:215;;;35248:1;35236:11;;:13;;;;:::i;:::-;35217:16;:32;;;;35264:29;:27;:29::i;:::-;;35090:215;35318:12;35334:8;;;;;;;;;;;35333:9;35318:24;;35444:19;:25;35464:4;35444:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35473:19;:23;35493:2;35473:23;;;;;;;;;;;;;;;;;;;;;;;;;35444:52;35441:99;;;35523:5;35513:15;;35441:99;35553:12;35657:19;:23;35677:2;35657:23;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;35684:25;:31;35710:4;35684:31;;;;;;;;;;;;;;;;;;;;;;;;;35657:58;35654:121;;;35752:23;35763:11;;35752:6;:10;;:23;;;;:::i;:::-;35730:18;;:45;;;;;;;:::i;:::-;;;;;;;;35654:121;35789:7;35786:948;;;35840:25;:29;35866:2;35840:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;35889:1;35873:13;;:17;35840:50;35836:748;;;35917:34;35947:3;35917:25;35928:13;;35917:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;35910:41;;36018:13;;35999:16;;35992:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;35970:18;;:61;;;;;;;:::i;:::-;;;;;;;;36086:13;;36073:10;;36066:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;36050:12;;:49;;;;;;;:::i;:::-;;;;;;;;36166:13;;36147:16;;36140:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;36118:18;;:61;;;;;;;:::i;:::-;;;;;;;;35836:748;;;36240:25;:31;36266:4;36240:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36290:1;36275:12;;:16;36240:51;36237:347;;;36316:33;36345:3;36316:24;36327:12;;36316:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;36309:40;;36412:12;;36394:15;;36387:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;36365:18;;:59;;;;;;;:::i;:::-;;;;;;;;36478:12;;36466:9;;36459:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;36443:12;;:47;;;;;;;:::i;:::-;;;;;;;;36556:12;;36538:15;;36531:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;36509:18;;:59;;;;;;;:::i;:::-;;;;;;;;36237:347;35836:748;36611:1;36604:4;:8;36601:93;;;36636:42;36652:4;36666;36673;36636:15;:42::i;:::-;36601:93;36718:4;36708:14;;;;;:::i;:::-;;;35786:948;36747:33;36763:4;36769:2;36773:6;36747:15;:33::i;:::-;32753:4035;;32640:4148;;;;:::o;17534:193::-;17620:7;17653:1;17648;:6;;17656:12;17640:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17680:9;17696:1;17692;:5;;;;:::i;:::-;17680:17;;17718:1;17711:8;;;17534:193;;;;;:::o;16628:182::-;16686:7;16706:9;16722:1;16718;:5;;;;:::i;:::-;16706:17;;16747:1;16742;:6;;16734:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16801:1;16794:8;;;16628:182;;;;:::o;12811:575::-;12969:1;12951:20;;:6;:20;;;12943:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13053:1;13032:23;;:9;:23;;;13024:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13109:47;13130:6;13138:9;13149:6;13109:20;:47::i;:::-;13190:71;13212:6;13190:71;;;;;;;;;;;;;;;;;:9;:17;13200:6;13190:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13170:9;:17;13180:6;13170:17;;;;;;;;;;;;;;;:91;;;;13295:32;13320:6;13295:9;:20;13305:9;13295:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13272:9;:20;13282:9;13272:20;;;;;;;;;;;;;;;:55;;;;13360:9;13343:35;;13352:6;13343:35;;;13371:6;13343:35;;;;;;:::i;:::-;;;;;;;;12811:575;;;:::o;37744:1372::-;37783:23;37809:24;37827:4;37809:9;:24::i;:::-;37783:50;;37844:25;37914:12;;37893:18;;37872;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;37844:82;;37937:12;37987:1;37966:17;:22;37962:35;;37990:7;;;;;37962:35;38010:23;38095:1;38075:17;38054:18;;38036:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;38010:86;;38107:26;38136:36;38156:15;38136;:19;;:36;;;;:::i;:::-;38107:65;;38186:25;38214:21;38186:49;;38249:36;38266:18;38249:16;:36::i;:::-;38300:18;38321:44;38347:17;38321:21;:25;;:44;;;;:::i;:::-;38300:65;;38379:23;38405:57;38444:17;38405:34;38420:18;;38405:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;38379:83;;38473:17;38493:51;38526:17;38493:28;38508:12;;38493:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;38473:71;;38559:23;38616:9;38598:15;38585:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;38559:66;;38661:1;38640:18;:22;;;;38694:1;38673:18;:22;;;;38721:1;38706:12;:16;;;;38757:9;;;;;;;;;;;38749:23;;38780:9;38749:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38736:58;;;;;38829:1;38811:15;:19;:42;;;;;38852:1;38834:15;:19;38811:42;38808:210;;;38869:46;38882:15;38899;38869:12;:46::i;:::-;38935:71;38950:18;38970:15;38987:18;;38935:71;;;;;;;;:::i;:::-;;;;;;;;38808:210;39053:15;;;;;;;;;;;39045:29;;39082:21;39045:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39032:76;;;;;37772:1344;;;;;;;;;;37744:1372;:::o;39125:544::-;39182:4;39218:15;39201:14;:32;;;;39247:28;39278:4;:14;;;39293:13;;;;;;;;;;;39278:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39247:60;;39321:20;39344:59;39391:11;;39344:42;39369:16;;39344:20;:24;;:42;;;;:::i;:::-;:46;;:59;;;;:::i;:::-;39321:82;;39436:1;39421:12;:16;39417:109;;;39453:61;39469:13;;;;;;;;;;;39492:6;39501:12;39453:15;:61::i;:::-;39417:109;39538:19;39575:13;;;;;;;;;;;39538:51;;39600:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39627:12;;;;;;;;;;39657:4;39650:11;;;;;39125:544;:::o;17987:473::-;18045:7;18295:1;18290;:6;18286:47;;18320:1;18313:8;;;;18286:47;18346:9;18362:1;18358;:5;;;;:::i;:::-;18346:17;;18391:1;18386;18382;:5;;;;:::i;:::-;:10;18374:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18451:1;18444:8;;;17987:473;;;;;:::o;18937:132::-;18995:7;19022:39;19026:1;19029;19022:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19015:46;;18937:132;;;;:::o;16232:125::-;;;;:::o;17094:136::-;17152:7;17179:43;17183:1;17186;17179:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17172:50;;17094:136;;;;:::o;36797:509::-;36866:21;36904:1;36890:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36866:40;;36935:4;36917;36922:1;36917:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36961:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36951:4;36956:1;36951:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36997:62;37014:4;37029:15;37047:11;36997:8;:62::i;:::-;37073:15;:66;;;37154:11;37180:1;37224:4;37251;37271:15;37073:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36852:454;36797:509;:::o;37314:421::-;37395:62;37412:4;37427:15;37445:11;37395:8;:62::i;:::-;37471:15;:31;;;37510:9;37543:4;37563:11;37589:1;37632;27876:42;37701:15;37471:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37314:421;;:::o;19566:279::-;19652:7;19684:1;19680;:5;19687:12;19672:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19711:9;19727:1;19723;:5;;;;:::i;:::-;19711:17;;19836:1;19829:8;;;19566:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:86::-;5788:7;5828:4;5821:5;5817:16;5806:27;;5753:86;;;:::o;5845:112::-;5928:22;5944:5;5928:22;:::i;:::-;5923:3;5916:35;5845:112;;:::o;5963:214::-;6052:4;6090:2;6079:9;6075:18;6067:26;;6103:67;6167:1;6156:9;6152:17;6143:6;6103:67;:::i;:::-;5963:214;;;;:::o;6183:329::-;6242:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6183:329;;;;:::o;6518:474::-;6586:6;6594;6643:2;6631:9;6622:7;6618:23;6614:32;6611:119;;;6649:79;;:::i;:::-;6611:119;6769:1;6794:53;6839:7;6830:6;6819:9;6815:22;6794:53;:::i;:::-;6784:63;;6740:117;6896:2;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6867:118;6518:474;;;;;:::o;6998:180::-;7046:77;7043:1;7036:88;7143:4;7140:1;7133:15;7167:4;7164:1;7157:15;7184:320;7228:6;7265:1;7259:4;7255:12;7245:22;;7312:1;7306:4;7302:12;7333:18;7323:81;;7389:4;7381:6;7377:17;7367:27;;7323:81;7451:2;7443:6;7440:14;7420:18;7417:38;7414:84;;7470:18;;:::i;:::-;7414:84;7235:269;7184:320;;;:::o;7510:182::-;7650:34;7646:1;7638:6;7634:14;7627:58;7510:182;:::o;7698:366::-;7840:3;7861:67;7925:2;7920:3;7861:67;:::i;:::-;7854:74;;7937:93;8026:3;7937:93;:::i;:::-;8055:2;8050:3;8046:12;8039:19;;7698:366;;;:::o;8070:419::-;8236:4;8274:2;8263:9;8259:18;8251:26;;8323:9;8317:4;8313:20;8309:1;8298:9;8294:17;8287:47;8351:131;8477:4;8351:131;:::i;:::-;8343:139;;8070:419;;;:::o;8495:225::-;8635:34;8631:1;8623:6;8619:14;8612:58;8704:8;8699:2;8691:6;8687:15;8680:33;8495:225;:::o;8726:366::-;8868:3;8889:67;8953:2;8948:3;8889:67;:::i;:::-;8882:74;;8965:93;9054:3;8965:93;:::i;:::-;9083:2;9078:3;9074:12;9067:19;;8726:366;;;:::o;9098:419::-;9264:4;9302:2;9291:9;9287:18;9279:26;;9351:9;9345:4;9341:20;9337:1;9326:9;9322:17;9315:47;9379:131;9505:4;9379:131;:::i;:::-;9371:139;;9098:419;;;:::o;9523:223::-;9663:34;9659:1;9651:6;9647:14;9640:58;9732:6;9727:2;9719:6;9715:15;9708:31;9523:223;:::o;9752:366::-;9894:3;9915:67;9979:2;9974:3;9915:67;:::i;:::-;9908:74;;9991:93;10080:3;9991:93;:::i;:::-;10109:2;10104:3;10100:12;10093:19;;9752:366;;;:::o;10124:419::-;10290:4;10328:2;10317:9;10313:18;10305:26;;10377:9;10371:4;10367:20;10363:1;10352:9;10348:17;10341:47;10405:131;10531:4;10405:131;:::i;:::-;10397:139;;10124:419;;;:::o;10549:221::-;10689:34;10685:1;10677:6;10673:14;10666:58;10758:4;10753:2;10745:6;10741:15;10734:29;10549:221;:::o;10776:366::-;10918:3;10939:67;11003:2;10998:3;10939:67;:::i;:::-;10932:74;;11015:93;11104:3;11015:93;:::i;:::-;11133:2;11128:3;11124:12;11117:19;;10776:366;;;:::o;11148:419::-;11314:4;11352:2;11341:9;11337:18;11329:26;;11401:9;11395:4;11391:20;11387:1;11376:9;11372:17;11365:47;11429:131;11555:4;11429:131;:::i;:::-;11421:139;;11148:419;;;:::o;11573:224::-;11713:34;11709:1;11701:6;11697:14;11690:58;11782:7;11777:2;11769:6;11765:15;11758:32;11573:224;:::o;11803:366::-;11945:3;11966:67;12030:2;12025:3;11966:67;:::i;:::-;11959:74;;12042:93;12131:3;12042:93;:::i;:::-;12160:2;12155:3;12151:12;12144:19;;11803:366;;;:::o;12175:419::-;12341:4;12379:2;12368:9;12364:18;12356:26;;12428:9;12422:4;12418:20;12414:1;12403:9;12399:17;12392:47;12456:131;12582:4;12456:131;:::i;:::-;12448:139;;12175:419;;;:::o;12600:222::-;12740:34;12736:1;12728:6;12724:14;12717:58;12809:5;12804:2;12796:6;12792:15;12785:30;12600:222;:::o;12828:366::-;12970:3;12991:67;13055:2;13050:3;12991:67;:::i;:::-;12984:74;;13067:93;13156:3;13067:93;:::i;:::-;13185:2;13180:3;13176:12;13169:19;;12828:366;;;:::o;13200:419::-;13366:4;13404:2;13393:9;13389:18;13381:26;;13453:9;13447:4;13443:20;13439:1;13428:9;13424:17;13417:47;13481:131;13607:4;13481:131;:::i;:::-;13473:139;;13200:419;;;:::o;13625:172::-;13765:24;13761:1;13753:6;13749:14;13742:48;13625:172;:::o;13803:366::-;13945:3;13966:67;14030:2;14025:3;13966:67;:::i;:::-;13959:74;;14042:93;14131:3;14042:93;:::i;:::-;14160:2;14155:3;14151:12;14144:19;;13803:366;;;:::o;14175:419::-;14341:4;14379:2;14368:9;14364:18;14356:26;;14428:9;14422:4;14418:20;14414:1;14403:9;14399:17;14392:47;14456:131;14582:4;14456:131;:::i;:::-;14448:139;;14175:419;;;:::o;14600:297::-;14740:34;14736:1;14728:6;14724:14;14717:58;14809:34;14804:2;14796:6;14792:15;14785:59;14878:11;14873:2;14865:6;14861:15;14854:36;14600:297;:::o;14903:366::-;15045:3;15066:67;15130:2;15125:3;15066:67;:::i;:::-;15059:74;;15142:93;15231:3;15142:93;:::i;:::-;15260:2;15255:3;15251:12;15244:19;;14903:366;;;:::o;15275:419::-;15441:4;15479:2;15468:9;15464:18;15456:26;;15528:9;15522:4;15518:20;15514:1;15503:9;15499:17;15492:47;15556:131;15682:4;15556:131;:::i;:::-;15548:139;;15275:419;;;:::o;15700:231::-;15840:34;15836:1;15828:6;15824:14;15817:58;15909:14;15904:2;15896:6;15892:15;15885:39;15700:231;:::o;15937:366::-;16079:3;16100:67;16164:2;16159:3;16100:67;:::i;:::-;16093:74;;16176:93;16265:3;16176:93;:::i;:::-;16294:2;16289:3;16285:12;16278:19;;15937:366;;;:::o;16309:419::-;16475:4;16513:2;16502:9;16498:18;16490:26;;16562:9;16556:4;16552:20;16548:1;16537:9;16533:17;16526:47;16590:131;16716:4;16590:131;:::i;:::-;16582:139;;16309:419;;;:::o;16734:180::-;16782:77;16779:1;16772:88;16879:4;16876:1;16869:15;16903:4;16900:1;16893:15;16920:191;16960:3;16979:20;16997:1;16979:20;:::i;:::-;16974:25;;17013:20;17031:1;17013:20;:::i;:::-;17008:25;;17056:1;17053;17049:9;17042:16;;17077:3;17074:1;17071:10;17068:36;;;17084:18;;:::i;:::-;17068:36;16920:191;;;;:::o;17117:169::-;17257:21;17253:1;17245:6;17241:14;17234:45;17117:169;:::o;17292:366::-;17434:3;17455:67;17519:2;17514:3;17455:67;:::i;:::-;17448:74;;17531:93;17620:3;17531:93;:::i;:::-;17649:2;17644:3;17640:12;17633:19;;17292:366;;;:::o;17664:419::-;17830:4;17868:2;17857:9;17853:18;17845:26;;17917:9;17911:4;17907:20;17903:1;17892:9;17888:17;17881:47;17945:131;18071:4;17945:131;:::i;:::-;17937:139;;17664:419;;;:::o;18089:232::-;18229:34;18225:1;18217:6;18213:14;18206:58;18298:15;18293:2;18285:6;18281:15;18274:40;18089:232;:::o;18327:366::-;18469:3;18490:67;18554:2;18549:3;18490:67;:::i;:::-;18483:74;;18566:93;18655:3;18566:93;:::i;:::-;18684:2;18679:3;18675:12;18668:19;;18327:366;;;:::o;18699:419::-;18865:4;18903:2;18892:9;18888:18;18880:26;;18952:9;18946:4;18942:20;18938:1;18927:9;18923:17;18916:47;18980:131;19106:4;18980:131;:::i;:::-;18972:139;;18699:419;;;:::o;19124:194::-;19164:4;19184:20;19202:1;19184:20;:::i;:::-;19179:25;;19218:20;19236:1;19218:20;:::i;:::-;19213:25;;19262:1;19259;19255:9;19247:17;;19286:1;19280:4;19277:11;19274:37;;;19291:18;;:::i;:::-;19274:37;19124:194;;;;:::o;19324:410::-;19364:7;19387:20;19405:1;19387:20;:::i;:::-;19382:25;;19421:20;19439:1;19421:20;:::i;:::-;19416:25;;19476:1;19473;19469:9;19498:30;19516:11;19498:30;:::i;:::-;19487:41;;19677:1;19668:7;19664:15;19661:1;19658:22;19638:1;19631:9;19611:83;19588:139;;19707:18;;:::i;:::-;19588:139;19372:362;19324:410;;;;:::o;19740:180::-;19788:77;19785:1;19778:88;19885:4;19882:1;19875:15;19909:4;19906:1;19899:15;19926:185;19966:1;19983:20;20001:1;19983:20;:::i;:::-;19978:25;;20017:20;20035:1;20017:20;:::i;:::-;20012:25;;20056:1;20046:35;;20061:18;;:::i;:::-;20046:35;20103:1;20100;20096:9;20091:14;;19926:185;;;;:::o;20117:177::-;20257:29;20253:1;20245:6;20241:14;20234:53;20117:177;:::o;20300:366::-;20442:3;20463:67;20527:2;20522:3;20463:67;:::i;:::-;20456:74;;20539:93;20628:3;20539:93;:::i;:::-;20657:2;20652:3;20648:12;20641:19;;20300:366;;;:::o;20672:419::-;20838:4;20876:2;20865:9;20861:18;20853:26;;20925:9;20919:4;20915:20;20911:1;20900:9;20896:17;20889:47;20953:131;21079:4;20953:131;:::i;:::-;20945:139;;20672:419;;;:::o;21097:147::-;21198:11;21235:3;21220:18;;21097:147;;;;:::o;21250:114::-;;:::o;21370:398::-;21529:3;21550:83;21631:1;21626:3;21550:83;:::i;:::-;21543:90;;21642:93;21731:3;21642:93;:::i;:::-;21760:1;21755:3;21751:11;21744:18;;21370:398;;;:::o;21774:379::-;21958:3;21980:147;22123:3;21980:147;:::i;:::-;21973:154;;22144:3;22137:10;;21774:379;;;:::o;22159:442::-;22308:4;22346:2;22335:9;22331:18;22323:26;;22359:71;22427:1;22416:9;22412:17;22403:6;22359:71;:::i;:::-;22440:72;22508:2;22497:9;22493:18;22484:6;22440:72;:::i;:::-;22522;22590:2;22579:9;22575:18;22566:6;22522:72;:::i;:::-;22159:442;;;;;;:::o;22607:143::-;22664:5;22695:6;22689:13;22680:22;;22711:33;22738:5;22711:33;:::i;:::-;22607:143;;;;:::o;22756:351::-;22826:6;22875:2;22863:9;22854:7;22850:23;22846:32;22843:119;;;22881:79;;:::i;:::-;22843:119;23001:1;23026:64;23082:7;23073:6;23062:9;23058:22;23026:64;:::i;:::-;23016:74;;22972:128;22756:351;;;;:::o;23113:220::-;23253:34;23249:1;23241:6;23237:14;23230:58;23322:3;23317:2;23309:6;23305:15;23298:28;23113:220;:::o;23339:366::-;23481:3;23502:67;23566:2;23561:3;23502:67;:::i;:::-;23495:74;;23578:93;23667:3;23578:93;:::i;:::-;23696:2;23691:3;23687:12;23680:19;;23339:366;;;:::o;23711:419::-;23877:4;23915:2;23904:9;23900:18;23892:26;;23964:9;23958:4;23954:20;23950:1;23939:9;23935:17;23928:47;23992:131;24118:4;23992:131;:::i;:::-;23984:139;;23711:419;;;:::o;24136:180::-;24184:77;24181:1;24174:88;24281:4;24278:1;24271:15;24305:4;24302:1;24295:15;24322:180;24370:77;24367:1;24360:88;24467:4;24464:1;24457:15;24491:4;24488:1;24481:15;24508:143;24565:5;24596:6;24590:13;24581:22;;24612:33;24639:5;24612:33;:::i;:::-;24508:143;;;;:::o;24657:351::-;24727:6;24776:2;24764:9;24755:7;24751:23;24747:32;24744:119;;;24782:79;;:::i;:::-;24744:119;24902:1;24927:64;24983:7;24974:6;24963:9;24959:22;24927:64;:::i;:::-;24917:74;;24873:128;24657:351;;;;:::o;25014:85::-;25059:7;25088:5;25077:16;;25014:85;;;:::o;25105:158::-;25163:9;25196:61;25214:42;25223:32;25249:5;25223:32;:::i;:::-;25214:42;:::i;:::-;25196:61;:::i;:::-;25183:74;;25105:158;;;:::o;25269:147::-;25364:45;25403:5;25364:45;:::i;:::-;25359:3;25352:58;25269:147;;:::o;25422:114::-;25489:6;25523:5;25517:12;25507:22;;25422:114;;;:::o;25542:184::-;25641:11;25675:6;25670:3;25663:19;25715:4;25710:3;25706:14;25691:29;;25542:184;;;;:::o;25732:132::-;25799:4;25822:3;25814:11;;25852:4;25847:3;25843:14;25835:22;;25732:132;;;:::o;25870:108::-;25947:24;25965:5;25947:24;:::i;:::-;25942:3;25935:37;25870:108;;:::o;25984:179::-;26053:10;26074:46;26116:3;26108:6;26074:46;:::i;:::-;26152:4;26147:3;26143:14;26129:28;;25984:179;;;;:::o;26169:113::-;26239:4;26271;26266:3;26262:14;26254:22;;26169:113;;;:::o;26318:732::-;26437:3;26466:54;26514:5;26466:54;:::i;:::-;26536:86;26615:6;26610:3;26536:86;:::i;:::-;26529:93;;26646:56;26696:5;26646:56;:::i;:::-;26725:7;26756:1;26741:284;26766:6;26763:1;26760:13;26741:284;;;26842:6;26836:13;26869:63;26928:3;26913:13;26869:63;:::i;:::-;26862:70;;26955:60;27008:6;26955:60;:::i;:::-;26945:70;;26801:224;26788:1;26785;26781:9;26776:14;;26741:284;;;26745:14;27041:3;27034:10;;26442:608;;;26318:732;;;;:::o;27056:831::-;27319:4;27357:3;27346:9;27342:19;27334:27;;27371:71;27439:1;27428:9;27424:17;27415:6;27371:71;:::i;:::-;27452:80;27528:2;27517:9;27513:18;27504:6;27452:80;:::i;:::-;27579:9;27573:4;27569:20;27564:2;27553:9;27549:18;27542:48;27607:108;27710:4;27701:6;27607:108;:::i;:::-;27599:116;;27725:72;27793:2;27782:9;27778:18;27769:6;27725:72;:::i;:::-;27807:73;27875:3;27864:9;27860:19;27851:6;27807:73;:::i;:::-;27056:831;;;;;;;;:::o;27893:807::-;28142:4;28180:3;28169:9;28165:19;28157:27;;28194:71;28262:1;28251:9;28247:17;28238:6;28194:71;:::i;:::-;28275:72;28343:2;28332:9;28328:18;28319:6;28275:72;:::i;:::-;28357:80;28433:2;28422:9;28418:18;28409:6;28357:80;:::i;:::-;28447;28523:2;28512:9;28508:18;28499:6;28447:80;:::i;:::-;28537:73;28605:3;28594:9;28590:19;28581:6;28537:73;:::i;:::-;28620;28688:3;28677:9;28673:19;28664:6;28620:73;:::i;:::-;27893:807;;;;;;;;;:::o;28706:663::-;28794:6;28802;28810;28859:2;28847:9;28838:7;28834:23;28830:32;28827:119;;;28865:79;;:::i;:::-;28827:119;28985:1;29010:64;29066:7;29057:6;29046:9;29042:22;29010:64;:::i;:::-;29000:74;;28956:128;29123:2;29149:64;29205:7;29196:6;29185:9;29181:22;29149:64;:::i;:::-;29139:74;;29094:129;29262:2;29288:64;29344:7;29335:6;29324:9;29320:22;29288:64;:::i;:::-;29278:74;;29233:129;28706:663;;;;;:::o

Swarm Source

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