ETH Price: $2,421.33 (+0.81%)

Token

SAFEPEPE (SAFEPEPE)
 

Overview

Max Total Supply

100,000,000,000 SAFEPEPE

Holders

5

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
68,571,608,825.431056450547432763 SAFEPEPE

Value
$0.00
0x7402df4906cd5429974ba19cca848e1845a04a31
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:
SAFEPEPE

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-14
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

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

    struct FeeRatios {
        uint256 marketingPortion;
        uint256 developmentPortion;
    }
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;

    FeeRatios public feeRatios = FeeRatios(40,60);         // 40/60% wallet tax split
    mapping(address => bool) public bots; mapping (address => uint256) public _buyMap;
    address payable private _developmentAddress = payable(0x7402Df4906cd5429974bA19Cca848e1845a04a31);
    address payable private _marketingAddress = payable(0x1185f7638129De06B028B9F441e969Bd16E7D297);

    uint256 public swapTokensAtAmount;
 
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
    // block number of opened trading
    uint256 launchedAt;
    uint256 launchedTime = 0;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxWalletAmount;
 
    // 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 ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event FeeRatiosChanged(uint256 indexed developmentPortion, uint256 indexed marketingPortion);
 
    constructor() ERC20("SAFEPEPE", "SAFEPEPE") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
		excludeFromMaxWallet(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxWallet(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
		
        uint256 totalSupply = 100000000000 * 1e18;
 
        swapTokensAtAmount = totalSupply * 1 / 1000; // 1% swap wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(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 {
 
  	}
		
	function maxWallet() public view returns(uint256) {
        uint256 _initialMaxWallet = 50000000 * 1e18;
		uint256 _timeRound = (block.timestamp - launchedTime) / 12 seconds;
		uint256 _maxWallet = _initialMaxWallet;
		
		if(_timeRound <= 100){
			if(totalSupply() / (20**_timeRound) > 0){
				_maxWallet = _initialMaxWallet * 20**_timeRound;
				
				if(_maxWallet >= totalSupply()){
					_maxWallet =  totalSupply();
				}
			} else {
				_maxWallet =  totalSupply();
			}
		} else {
			_maxWallet =  totalSupply();
		}
		
        return _maxWallet;
    }
		
	function buyMarketingFee() public view returns(uint256) {
        uint256 _initialBuyFee = 25;
        uint256 _timeRound = (block.timestamp - launchedTime) / 6 minutes;
		uint256 _buyFee = _initialBuyFee;
		
		if(_timeRound <= _initialBuyFee){
			_buyFee = _initialBuyFee - _timeRound;
		} else {
			_buyFee = 4;
		}
		

        return _buyFee;
    }
		
	function sellMarketingFee() public view returns(uint256) {
        uint256 _initialSellFee = 30;
        uint256 _timeRound = (block.timestamp - launchedTime) / 6 minutes;
		uint256 _sellFee = _initialSellFee;
		
		if(_timeRound <= _initialSellFee){
			_sellFee = _initialSellFee - _timeRound;
		} else {
			_sellFee = 4;
		}
		

        return _sellFee;
    }
		
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading is active");
		tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }
    function setFeeRatios(uint256 _marketingPortion, uint256 _developmentPortion) external onlyOwner {
        require(_marketingPortion + _developmentPortion == 100, "Token: ratio must add to 100%");
        feeRatios.marketingPortion = _marketingPortion;
        feeRatios.developmentPortion = _developmentPortion;

        emit FeeRatiosChanged(_marketingPortion, _developmentPortion);
    }

    function excludeFromMaxWallet(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxWalletAmount[updAds] = isEx;
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        
		if (
			from != owner() &&
			to != owner() &&
			to != address(0) &&
			to != address(0xdead) &&
			!swapping
		){
			if(!tradingActive){
				require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
			}

			//when buy
			if (automatedMarketMakerPairs[from] && !_isExcludedMaxWalletAmount[to]) {
					require(amount + balanceOf(to) <= maxWallet(), "Max wallet exceeded");
			} else if(!_isExcludedMaxWalletAmount[to]){
				require(amount + balanceOf(to) <= maxWallet(), "Max wallet exceeded");
			}
		}

		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
		bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        uint256 _sellMarketingFee = sellMarketingFee();
        uint256 _buyMarketingFee = buyMarketingFee();
		
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && _sellMarketingFee > 0){
                fees = amount.mul(_sellMarketingFee).div(100);
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && _buyMarketingFee > 0) {
        	    fees = amount.mul(_buyMarketingFee).div(100);
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
        	amount -= fees;
        }
		
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
  
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
 
        if(contractBalance == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        uint256 amountToSwapForETH = contractBalance;
        swapTokensForEth(amountToSwapForETH); 
 
     
        
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"developmentPortion","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"marketingPortion","type":"uint256"}],"name":"FeeRatiosChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","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":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRatios","outputs":[{"internalType":"uint256","name":"marketingPortion","type":"uint256"},{"internalType":"uint256","name":"developmentPortion","type":"uint256"}],"stateMutability":"view","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":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingPortion","type":"uint256"},{"internalType":"uint256","name":"_developmentPortion","type":"uint256"}],"name":"setFeeRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"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"}]

60c0604052604051806040016040528060288152602001603c815250600660008201518160000155602082015181600101555050737402df4906cd5429974ba19cca848e1845a04a31600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731185f7638129de06b028b9f441e969bd16e7d297600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600f553480156200012557600080fd5b506040518060400160405280600881526020017f53414645504550450000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f53414645504550450000000000000000000000000000000000000000000000008152508160039080519060200190620001aa92919062000ae1565b508060049080519060200190620001c392919062000ae1565b5050506000620001d8620005ad60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002a3816001620005b560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031e57600080fd5b505afa15801562000333573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000359919062000bfb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003bc57600080fd5b505afa158015620003d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f7919062000bfb565b6040518363ffffffff1660e01b81526004016200041692919062000c3e565b602060405180830381600087803b1580156200043157600080fd5b505af115801562000446573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046c919062000bfb565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004b460a0516001620005b560201b60201c565b620004c960a0516001620006b260201b60201c565b60006c01431e0fae6d7217caa000000090506103e8600182620004ed919062000ca4565b620004f9919062000d34565b600c8190555062000521620005136200075360201b60201c565b60016200077d60201b60201c565b620005343060016200077d60201b60201c565b6200054961dead60016200077d60201b60201c565b6200056b6200055d6200075360201b60201c565b6001620005b560201b60201c565b6200057e306001620005b560201b60201c565b6200059361dead6001620005b560201b60201c565b620005a53382620008ca60201b60201c565b505062000ffd565b600033905090565b620005c5620005ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064e9062000dcd565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200078d620005ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200081f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008169062000dcd565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008be919062000e0c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200093d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009349062000e79565b60405180910390fd5b620009516000838362000a7960201b60201c565b6200096d8160025462000a7e60201b6200188b1790919060201c565b600281905550620009cb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a7e60201b6200188b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a6d919062000eac565b60405180910390a35050565b505050565b600080828462000a8f919062000ec9565b90508381101562000ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ace9062000f76565b60405180910390fd5b8091505092915050565b82805462000aef9062000fc7565b90600052602060002090601f01602090048101928262000b13576000855562000b5f565b82601f1062000b2e57805160ff191683800117855562000b5f565b8280016001018555821562000b5f579182015b8281111562000b5e57825182559160200191906001019062000b41565b5b50905062000b6e919062000b72565b5090565b5b8082111562000b8d57600081600090555060010162000b73565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bc38262000b96565b9050919050565b62000bd58162000bb6565b811462000be157600080fd5b50565b60008151905062000bf58162000bca565b92915050565b60006020828403121562000c145762000c1362000b91565b5b600062000c248482850162000be4565b91505092915050565b62000c388162000bb6565b82525050565b600060408201905062000c55600083018562000c2d565b62000c64602083018462000c2d565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cb18262000c6b565b915062000cbe8362000c6b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cfa5762000cf962000c75565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d418262000c6b565b915062000d4e8362000c6b565b92508262000d615762000d6062000d05565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000db560208362000d6c565b915062000dc28262000d7d565b602082019050919050565b6000602082019050818103600083015262000de88162000da6565b9050919050565b60008115159050919050565b62000e068162000def565b82525050565b600060208201905062000e23600083018462000dfb565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e61601f8362000d6c565b915062000e6e8262000e29565b602082019050919050565b6000602082019050818103600083015262000e948162000e52565b9050919050565b62000ea68162000c6b565b82525050565b600060208201905062000ec3600083018462000e9b565b92915050565b600062000ed68262000c6b565b915062000ee38362000c6b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f1b5762000f1a62000c75565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f5e601b8362000d6c565b915062000f6b8262000f26565b602082019050919050565b6000602082019050818103600083015262000f918162000f4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fe057607f821691505b6020821081141562000ff75762000ff662000f98565b5b50919050565b60805160a051613b6b6200103f60003960008181610aa5015261116d0152600081816108e2015281816128e6015281816129d601526129fd0152613b6b6000f3fe6080604052600436106101f25760003560e01c80638da5cb5b1161010d578063b62496f5116100a0578063d2fcc0011161006f578063d2fcc0011461074b578063dd62ed3e14610774578063e2f45605146107b1578063f2fde38b146107dc578063f8b45b0514610805576101f9565b8063b62496f51461067d578063bbc0c742146106ba578063bfd79284146106e5578063c024666814610722576101f9565b806396880b17116100dc57806396880b171461059d5780639a7a23d6146105da578063a457c2d714610603578063a9059cbb14610640576101f9565b80638da5cb5b146104f05780638ffee7851461051b578063921369131461054757806395d89b4114610572576101f9565b80634fa2cf8a11610185578063715018a611610154578063715018a61461045a5780637bce5a04146104715780637f2feddc1461049c5780638a8c523c146104d9576101f9565b80634fa2cf8a1461038c5780634fbee193146103b55780636ddd1713146103f257806370a082311461041d576101f9565b806323b872dd116101c157806323b872dd146102bc578063313ce567146102f9578063395093511461032457806349bd5a5e14610361576101f9565b806306fdde03146101fe578063095ea7b3146102295780631694505e1461026657806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b50610213610830565b6040516102209190612b2c565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190612be7565b6108c2565b60405161025d9190612c42565b60405180910390f35b34801561027257600080fd5b5061027b6108e0565b6040516102889190612cbc565b60405180910390f35b34801561029d57600080fd5b506102a6610904565b6040516102b39190612ce6565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de9190612d01565b61090e565b6040516102f09190612c42565b60405180910390f35b34801561030557600080fd5b5061030e6109e7565b60405161031b9190612d70565b60405180910390f35b34801561033057600080fd5b5061034b60048036038101906103469190612be7565b6109f0565b6040516103589190612c42565b60405180910390f35b34801561036d57600080fd5b50610376610aa3565b6040516103839190612d9a565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190612db5565b610ac7565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190612df5565b610bf2565b6040516103e99190612c42565b60405180910390f35b3480156103fe57600080fd5b50610407610c48565b6040516104149190612c42565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190612df5565b610c5b565b6040516104519190612ce6565b60405180910390f35b34801561046657600080fd5b5061046f610ca3565b005b34801561047d57600080fd5b50610486610dfb565b6040516104939190612ce6565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be9190612df5565b610e4e565b6040516104d09190612ce6565b60405180910390f35b3480156104e557600080fd5b506104ee610e66565b005b3480156104fc57600080fd5b50610505610f93565b6040516105129190612d9a565b60405180910390f35b34801561052757600080fd5b50610530610fbd565b60405161053e929190612e22565b60405180910390f35b34801561055357600080fd5b5061055c610fcf565b6040516105699190612ce6565b60405180910390f35b34801561057e57600080fd5b50610587611022565b6040516105949190612b2c565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190612df5565b6110b4565b6040516105d19190612c42565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190612e77565b6110d4565b005b34801561060f57600080fd5b5061062a60048036038101906106259190612be7565b611208565b6040516106379190612c42565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190612be7565b6112d5565b6040516106749190612c42565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612df5565b6112f3565b6040516106b19190612c42565b60405180910390f35b3480156106c657600080fd5b506106cf611313565b6040516106dc9190612c42565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190612df5565b611326565b6040516107199190612c42565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190612e77565b611346565b005b34801561075757600080fd5b50610772600480360381019061076d9190612e77565b611486565b005b34801561078057600080fd5b5061079b60048036038101906107969190612eb7565b611578565b6040516107a89190612ce6565b60405180910390f35b3480156107bd57600080fd5b506107c66115ff565b6040516107d39190612ce6565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe9190612df5565b611605565b005b34801561081157600080fd5b5061081a6117cc565b6040516108279190612ce6565b60405180910390f35b60606003805461083f90612f26565b80601f016020809104026020016040519081016040528092919081815260200182805461086b90612f26565b80156108b85780601f1061088d576101008083540402835291602001916108b8565b820191906000526020600020905b81548152906001019060200180831161089b57829003601f168201915b5050505050905090565b60006108d66108cf6118e9565b84846118f1565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600061091b848484611abc565b6109dc846109276118e9565b6109d785604051806060016040528060288152602001613ae960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061098d6118e9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123299092919063ffffffff16565b6118f1565b600190509392505050565b60006012905090565b6000610a996109fd6118e9565b84610a948560016000610a0e6118e9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461188b90919063ffffffff16565b6118f1565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610acf6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590612fa4565b60405180910390fd5b60648183610b6c9190612ff3565b14610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba390613095565b60405180910390fd5b816006600001819055508060066001018190555080827f1e01a4924a1710040404be0f848c65e242cad98e407ad44f993abe891bd61c5360405160405180910390a35050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cab6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190612fa4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080601990506000610168600f5442610e1591906130b5565b610e1f9190613118565b90506000829050828211610e40578183610e3991906130b5565b9050610e45565b600490505b80935050505090565b60096020528060005260406000206000915090505481565b610e6e6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490612fa4565b60405180910390fd5b600d60009054906101000a900460ff1615610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4490613195565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043600e8190555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068060000154908060010154905082565b600080601e90506000610168600f5442610fe991906130b5565b610ff39190613118565b9050600082905082821161101457818361100d91906130b5565b9050611019565b600490505b80935050505090565b60606004805461103190612f26565b80601f016020809104026020016040519081016040528092919081815260200182805461105d90612f26565b80156110aa5780601f1061107f576101008083540402835291602001916110aa565b820191906000526020600020905b81548152906001019060200180831161108d57829003601f168201915b5050505050905090565b60116020528060005260406000206000915054906101000a900460ff1681565b6110dc6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290612fa4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613227565b60405180910390fd5b611204828261238d565b5050565b60006112cb6112156118e9565b846112c685604051806060016040528060258152602001613b11602591396001600061123f6118e9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123299092919063ffffffff16565b6118f1565b6001905092915050565b60006112e96112e26118e9565b8484611abc565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b600d60009054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b61134e6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490612fa4565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161147a9190612c42565b60405180910390a25050565b61148e6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490612fa4565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b61160d6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390612fa4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561170c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611703906132b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806a295be96e6406697200000090506000600c600f54426117ef91906130b5565b6117f99190613118565b9050600082905060648211611877576000826014611817919061340c565b61181f610904565b6118299190613118565b11156118675781601461183c919061340c565b836118479190613457565b9050611851610904565b81106118625761185f610904565b90505b611872565b61186f610904565b90505b611882565b61187f610904565b90505b80935050505090565b600080828461189a9190612ff3565b9050838110156118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d6906134fd565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119589061358f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613621565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aaf9190612ce6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b23906136b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613745565b60405180910390fd5b6000811415611bb657611bb18383600061242e565b612324565b611bbe610f93565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611c2c5750611bfc610f93565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c655750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c9f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cb85750600560149054906101000a900460ff16155b15611f6d57600d60009054906101000a900460ff16611db257601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d725750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da8906137b1565b60405180910390fd5b5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e555750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ebc57611e626117cc565b611e6b83610c5b565b82611e769190612ff3565b1115611eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eae9061381d565b60405180910390fd5b611f6c565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f6b57611f156117cc565b611f1e83610c5b565b82611f299190612ff3565b1115611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f619061381d565b60405180910390fd5b5b5b5b6000611f7830610c5b565b90506000600c5482101590506000600560149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061203a5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561204457600090505b60008061204f610fcf565b9050600061205b610dfb565b9050831561219a57601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120bc5750600082115b156120ee576120e760646120d9848a6126c390919063ffffffff16565b61273e90919063ffffffff16565b9250612176565b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121475750600081115b15612175576121726064612164838a6126c390919063ffffffff16565b61273e90919063ffffffff16565b92505b5b600083111561218b5761218a89308561242e565b5b828761219791906130b5565b96505b8480156121b35750600d60019054906101000a900460ff165b80156121cc5750600560149054906101000a900460ff16155b80156122225750601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122785750601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122ce5750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612312576001600560146101000a81548160ff0219169083151502179055506122f6612788565b6000600560146101000a81548160ff0219169083151502179055505b61231d89898961242e565b5050505050505b505050565b6000838311158290612371576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123689190612b2c565b60405180910390fd5b506000838561238091906130b5565b9050809150509392505050565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561249e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612495906136b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561250e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250590613745565b60405180910390fd5b6125198383836127df565b61258481604051806060016040528060268152602001613ac3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123299092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612617816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461188b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126b69190612ce6565b60405180910390a3505050565b6000808314156126d65760009050612738565b600082846126e49190613457565b90508284826126f39190613118565b14612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a906138af565b60405180910390fd5b809150505b92915050565b600061278083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127e4565b905092915050565b600061279330610c5b565b905060008114156127a457506127dd565b6014600c546127b39190613457565b8111156127cc576014600c546127c99190613457565b90505b60008190506127da81612847565b50505b565b505050565b6000808311829061282b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128229190612b2c565b60405180910390fd5b506000838561283a9190613118565b9050809150509392505050565b6000600267ffffffffffffffff811115612864576128636138cf565b5b6040519080825280602002602001820160405280156128925781602001602082028036833780820191505090505b50905030816000815181106128aa576128a96138fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561294a57600080fd5b505afa15801561295e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129829190613942565b81600181518110612996576129956138fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129fb307f0000000000000000000000000000000000000000000000000000000000000000846118f1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a5d959493929190613a68565b600060405180830381600087803b158015612a7757600080fd5b505af1158015612a8b573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612acd578082015181840152602081019050612ab2565b83811115612adc576000848401525b50505050565b6000601f19601f8301169050919050565b6000612afe82612a93565b612b088185612a9e565b9350612b18818560208601612aaf565b612b2181612ae2565b840191505092915050565b60006020820190508181036000830152612b468184612af3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b7e82612b53565b9050919050565b612b8e81612b73565b8114612b9957600080fd5b50565b600081359050612bab81612b85565b92915050565b6000819050919050565b612bc481612bb1565b8114612bcf57600080fd5b50565b600081359050612be181612bbb565b92915050565b60008060408385031215612bfe57612bfd612b4e565b5b6000612c0c85828601612b9c565b9250506020612c1d85828601612bd2565b9150509250929050565b60008115159050919050565b612c3c81612c27565b82525050565b6000602082019050612c576000830184612c33565b92915050565b6000819050919050565b6000612c82612c7d612c7884612b53565b612c5d565b612b53565b9050919050565b6000612c9482612c67565b9050919050565b6000612ca682612c89565b9050919050565b612cb681612c9b565b82525050565b6000602082019050612cd16000830184612cad565b92915050565b612ce081612bb1565b82525050565b6000602082019050612cfb6000830184612cd7565b92915050565b600080600060608486031215612d1a57612d19612b4e565b5b6000612d2886828701612b9c565b9350506020612d3986828701612b9c565b9250506040612d4a86828701612bd2565b9150509250925092565b600060ff82169050919050565b612d6a81612d54565b82525050565b6000602082019050612d856000830184612d61565b92915050565b612d9481612b73565b82525050565b6000602082019050612daf6000830184612d8b565b92915050565b60008060408385031215612dcc57612dcb612b4e565b5b6000612dda85828601612bd2565b9250506020612deb85828601612bd2565b9150509250929050565b600060208284031215612e0b57612e0a612b4e565b5b6000612e1984828501612b9c565b91505092915050565b6000604082019050612e376000830185612cd7565b612e446020830184612cd7565b9392505050565b612e5481612c27565b8114612e5f57600080fd5b50565b600081359050612e7181612e4b565b92915050565b60008060408385031215612e8e57612e8d612b4e565b5b6000612e9c85828601612b9c565b9250506020612ead85828601612e62565b9150509250929050565b60008060408385031215612ece57612ecd612b4e565b5b6000612edc85828601612b9c565b9250506020612eed85828601612b9c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f3e57607f821691505b60208210811415612f5257612f51612ef7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f8e602083612a9e565b9150612f9982612f58565b602082019050919050565b60006020820190508181036000830152612fbd81612f81565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ffe82612bb1565b915061300983612bb1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561303e5761303d612fc4565b5b828201905092915050565b7f546f6b656e3a20726174696f206d7573742061646420746f2031303025000000600082015250565b600061307f601d83612a9e565b915061308a82613049565b602082019050919050565b600060208201905081810360008301526130ae81613072565b9050919050565b60006130c082612bb1565b91506130cb83612bb1565b9250828210156130de576130dd612fc4565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061312382612bb1565b915061312e83612bb1565b92508261313e5761313d6130e9565b5b828204905092915050565b7f54726164696e6720697320616374697665000000000000000000000000000000600082015250565b600061317f601183612a9e565b915061318a82613149565b602082019050919050565b600060208201905081810360008301526131ae81613172565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613211603983612a9e565b915061321c826131b5565b604082019050919050565b6000602082019050818103600083015261324081613204565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132a3602683612a9e565b91506132ae82613247565b604082019050919050565b600060208201905081810360008301526132d281613296565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156133305780860481111561330c5761330b612fc4565b5b600185161561331b5780820291505b8081029050613329856132d9565b94506132f0565b94509492505050565b6000826133495760019050613405565b816133575760009050613405565b816001811461336d5760028114613377576133a6565b6001915050613405565b60ff84111561338957613388612fc4565b5b8360020a9150848211156133a05761339f612fc4565b5b50613405565b5060208310610133831016604e8410600b84101617156133db5782820a9050838111156133d6576133d5612fc4565b5b613405565b6133e884848460016132e6565b925090508184048111156133ff576133fe612fc4565b5b81810290505b9392505050565b600061341782612bb1565b915061342283612bb1565b925061344f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613339565b905092915050565b600061346282612bb1565b915061346d83612bb1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134a6576134a5612fc4565b5b828202905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006134e7601b83612a9e565b91506134f2826134b1565b602082019050919050565b60006020820190508181036000830152613516816134da565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613579602483612a9e565b91506135848261351d565b604082019050919050565b600060208201905081810360008301526135a88161356c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061360b602283612a9e565b9150613616826135af565b604082019050919050565b6000602082019050818103600083015261363a816135fe565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061369d602583612a9e565b91506136a882613641565b604082019050919050565b600060208201905081810360008301526136cc81613690565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061372f602383612a9e565b915061373a826136d3565b604082019050919050565b6000602082019050818103600083015261375e81613722565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061379b601683612a9e565b91506137a682613765565b602082019050919050565b600060208201905081810360008301526137ca8161378e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613807601383612a9e565b9150613812826137d1565b602082019050919050565b60006020820190508181036000830152613836816137fa565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613899602183612a9e565b91506138a48261383d565b604082019050919050565b600060208201905081810360008301526138c88161388c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061393c81612b85565b92915050565b60006020828403121561395857613957612b4e565b5b60006139668482850161392d565b91505092915050565b6000819050919050565b600061399461398f61398a8461396f565b612c5d565b612bb1565b9050919050565b6139a481613979565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139df81612b73565b82525050565b60006139f183836139d6565b60208301905092915050565b6000602082019050919050565b6000613a15826139aa565b613a1f81856139b5565b9350613a2a836139c6565b8060005b83811015613a5b578151613a4288826139e5565b9750613a4d836139fd565b925050600181019050613a2e565b5085935050505092915050565b600060a082019050613a7d6000830188612cd7565b613a8a602083018761399b565b8181036040830152613a9c8186613a0a565b9050613aab6060830185612d8b565b613ab86080830184612cd7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206b2c7236fea94a86e3dbb7be5bb3804ee8cf3a2541a5a9f9e00d20b5f6647cce64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c80638da5cb5b1161010d578063b62496f5116100a0578063d2fcc0011161006f578063d2fcc0011461074b578063dd62ed3e14610774578063e2f45605146107b1578063f2fde38b146107dc578063f8b45b0514610805576101f9565b8063b62496f51461067d578063bbc0c742146106ba578063bfd79284146106e5578063c024666814610722576101f9565b806396880b17116100dc57806396880b171461059d5780639a7a23d6146105da578063a457c2d714610603578063a9059cbb14610640576101f9565b80638da5cb5b146104f05780638ffee7851461051b578063921369131461054757806395d89b4114610572576101f9565b80634fa2cf8a11610185578063715018a611610154578063715018a61461045a5780637bce5a04146104715780637f2feddc1461049c5780638a8c523c146104d9576101f9565b80634fa2cf8a1461038c5780634fbee193146103b55780636ddd1713146103f257806370a082311461041d576101f9565b806323b872dd116101c157806323b872dd146102bc578063313ce567146102f9578063395093511461032457806349bd5a5e14610361576101f9565b806306fdde03146101fe578063095ea7b3146102295780631694505e1461026657806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b50610213610830565b6040516102209190612b2c565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190612be7565b6108c2565b60405161025d9190612c42565b60405180910390f35b34801561027257600080fd5b5061027b6108e0565b6040516102889190612cbc565b60405180910390f35b34801561029d57600080fd5b506102a6610904565b6040516102b39190612ce6565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de9190612d01565b61090e565b6040516102f09190612c42565b60405180910390f35b34801561030557600080fd5b5061030e6109e7565b60405161031b9190612d70565b60405180910390f35b34801561033057600080fd5b5061034b60048036038101906103469190612be7565b6109f0565b6040516103589190612c42565b60405180910390f35b34801561036d57600080fd5b50610376610aa3565b6040516103839190612d9a565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190612db5565b610ac7565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190612df5565b610bf2565b6040516103e99190612c42565b60405180910390f35b3480156103fe57600080fd5b50610407610c48565b6040516104149190612c42565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190612df5565b610c5b565b6040516104519190612ce6565b60405180910390f35b34801561046657600080fd5b5061046f610ca3565b005b34801561047d57600080fd5b50610486610dfb565b6040516104939190612ce6565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be9190612df5565b610e4e565b6040516104d09190612ce6565b60405180910390f35b3480156104e557600080fd5b506104ee610e66565b005b3480156104fc57600080fd5b50610505610f93565b6040516105129190612d9a565b60405180910390f35b34801561052757600080fd5b50610530610fbd565b60405161053e929190612e22565b60405180910390f35b34801561055357600080fd5b5061055c610fcf565b6040516105699190612ce6565b60405180910390f35b34801561057e57600080fd5b50610587611022565b6040516105949190612b2c565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190612df5565b6110b4565b6040516105d19190612c42565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190612e77565b6110d4565b005b34801561060f57600080fd5b5061062a60048036038101906106259190612be7565b611208565b6040516106379190612c42565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190612be7565b6112d5565b6040516106749190612c42565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612df5565b6112f3565b6040516106b19190612c42565b60405180910390f35b3480156106c657600080fd5b506106cf611313565b6040516106dc9190612c42565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190612df5565b611326565b6040516107199190612c42565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190612e77565b611346565b005b34801561075757600080fd5b50610772600480360381019061076d9190612e77565b611486565b005b34801561078057600080fd5b5061079b60048036038101906107969190612eb7565b611578565b6040516107a89190612ce6565b60405180910390f35b3480156107bd57600080fd5b506107c66115ff565b6040516107d39190612ce6565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe9190612df5565b611605565b005b34801561081157600080fd5b5061081a6117cc565b6040516108279190612ce6565b60405180910390f35b60606003805461083f90612f26565b80601f016020809104026020016040519081016040528092919081815260200182805461086b90612f26565b80156108b85780601f1061088d576101008083540402835291602001916108b8565b820191906000526020600020905b81548152906001019060200180831161089b57829003601f168201915b5050505050905090565b60006108d66108cf6118e9565b84846118f1565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600061091b848484611abc565b6109dc846109276118e9565b6109d785604051806060016040528060288152602001613ae960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061098d6118e9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123299092919063ffffffff16565b6118f1565b600190509392505050565b60006012905090565b6000610a996109fd6118e9565b84610a948560016000610a0e6118e9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461188b90919063ffffffff16565b6118f1565b6001905092915050565b7f0000000000000000000000000db561ec65a42eafcc5f855af85e5f0cc380721d81565b610acf6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590612fa4565b60405180910390fd5b60648183610b6c9190612ff3565b14610bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba390613095565b60405180910390fd5b816006600001819055508060066001018190555080827f1e01a4924a1710040404be0f848c65e242cad98e407ad44f993abe891bd61c5360405160405180910390a35050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cab6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190612fa4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080601990506000610168600f5442610e1591906130b5565b610e1f9190613118565b90506000829050828211610e40578183610e3991906130b5565b9050610e45565b600490505b80935050505090565b60096020528060005260406000206000915090505481565b610e6e6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490612fa4565b60405180910390fd5b600d60009054906101000a900460ff1615610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4490613195565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043600e8190555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068060000154908060010154905082565b600080601e90506000610168600f5442610fe991906130b5565b610ff39190613118565b9050600082905082821161101457818361100d91906130b5565b9050611019565b600490505b80935050505090565b60606004805461103190612f26565b80601f016020809104026020016040519081016040528092919081815260200182805461105d90612f26565b80156110aa5780601f1061107f576101008083540402835291602001916110aa565b820191906000526020600020905b81548152906001019060200180831161108d57829003601f168201915b5050505050905090565b60116020528060005260406000206000915054906101000a900460ff1681565b6110dc6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290612fa4565b60405180910390fd5b7f0000000000000000000000000db561ec65a42eafcc5f855af85e5f0cc380721d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613227565b60405180910390fd5b611204828261238d565b5050565b60006112cb6112156118e9565b846112c685604051806060016040528060258152602001613b11602591396001600061123f6118e9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123299092919063ffffffff16565b6118f1565b6001905092915050565b60006112e96112e26118e9565b8484611abc565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b600d60009054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b61134e6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490612fa4565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161147a9190612c42565b60405180910390a25050565b61148e6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490612fa4565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b61160d6118e9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390612fa4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561170c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611703906132b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806a295be96e6406697200000090506000600c600f54426117ef91906130b5565b6117f99190613118565b9050600082905060648211611877576000826014611817919061340c565b61181f610904565b6118299190613118565b11156118675781601461183c919061340c565b836118479190613457565b9050611851610904565b81106118625761185f610904565b90505b611872565b61186f610904565b90505b611882565b61187f610904565b90505b80935050505090565b600080828461189a9190612ff3565b9050838110156118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d6906134fd565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119589061358f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613621565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611aaf9190612ce6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b23906136b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613745565b60405180910390fd5b6000811415611bb657611bb18383600061242e565b612324565b611bbe610f93565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611c2c5750611bfc610f93565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c655750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c9f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cb85750600560149054906101000a900460ff16155b15611f6d57600d60009054906101000a900460ff16611db257601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d725750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da8906137b1565b60405180910390fd5b5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e555750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ebc57611e626117cc565b611e6b83610c5b565b82611e769190612ff3565b1115611eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eae9061381d565b60405180910390fd5b611f6c565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f6b57611f156117cc565b611f1e83610c5b565b82611f299190612ff3565b1115611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f619061381d565b60405180910390fd5b5b5b5b6000611f7830610c5b565b90506000600c5482101590506000600560149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061203a5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561204457600090505b60008061204f610fcf565b9050600061205b610dfb565b9050831561219a57601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120bc5750600082115b156120ee576120e760646120d9848a6126c390919063ffffffff16565b61273e90919063ffffffff16565b9250612176565b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121475750600081115b15612175576121726064612164838a6126c390919063ffffffff16565b61273e90919063ffffffff16565b92505b5b600083111561218b5761218a89308561242e565b5b828761219791906130b5565b96505b8480156121b35750600d60019054906101000a900460ff165b80156121cc5750600560149054906101000a900460ff16155b80156122225750601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122785750601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122ce5750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612312576001600560146101000a81548160ff0219169083151502179055506122f6612788565b6000600560146101000a81548160ff0219169083151502179055505b61231d89898961242e565b5050505050505b505050565b6000838311158290612371576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123689190612b2c565b60405180910390fd5b506000838561238091906130b5565b9050809150509392505050565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561249e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612495906136b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561250e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250590613745565b60405180910390fd5b6125198383836127df565b61258481604051806060016040528060268152602001613ac3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123299092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612617816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461188b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126b69190612ce6565b60405180910390a3505050565b6000808314156126d65760009050612738565b600082846126e49190613457565b90508284826126f39190613118565b14612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a906138af565b60405180910390fd5b809150505b92915050565b600061278083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127e4565b905092915050565b600061279330610c5b565b905060008114156127a457506127dd565b6014600c546127b39190613457565b8111156127cc576014600c546127c99190613457565b90505b60008190506127da81612847565b50505b565b505050565b6000808311829061282b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128229190612b2c565b60405180910390fd5b506000838561283a9190613118565b9050809150509392505050565b6000600267ffffffffffffffff811115612864576128636138cf565b5b6040519080825280602002602001820160405280156128925781602001602082028036833780820191505090505b50905030816000815181106128aa576128a96138fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561294a57600080fd5b505afa15801561295e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129829190613942565b81600181518110612996576129956138fe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129fb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118f1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a5d959493929190613a68565b600060405180830381600087803b158015612a7757600080fd5b505af1158015612a8b573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612acd578082015181840152602081019050612ab2565b83811115612adc576000848401525b50505050565b6000601f19601f8301169050919050565b6000612afe82612a93565b612b088185612a9e565b9350612b18818560208601612aaf565b612b2181612ae2565b840191505092915050565b60006020820190508181036000830152612b468184612af3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b7e82612b53565b9050919050565b612b8e81612b73565b8114612b9957600080fd5b50565b600081359050612bab81612b85565b92915050565b6000819050919050565b612bc481612bb1565b8114612bcf57600080fd5b50565b600081359050612be181612bbb565b92915050565b60008060408385031215612bfe57612bfd612b4e565b5b6000612c0c85828601612b9c565b9250506020612c1d85828601612bd2565b9150509250929050565b60008115159050919050565b612c3c81612c27565b82525050565b6000602082019050612c576000830184612c33565b92915050565b6000819050919050565b6000612c82612c7d612c7884612b53565b612c5d565b612b53565b9050919050565b6000612c9482612c67565b9050919050565b6000612ca682612c89565b9050919050565b612cb681612c9b565b82525050565b6000602082019050612cd16000830184612cad565b92915050565b612ce081612bb1565b82525050565b6000602082019050612cfb6000830184612cd7565b92915050565b600080600060608486031215612d1a57612d19612b4e565b5b6000612d2886828701612b9c565b9350506020612d3986828701612b9c565b9250506040612d4a86828701612bd2565b9150509250925092565b600060ff82169050919050565b612d6a81612d54565b82525050565b6000602082019050612d856000830184612d61565b92915050565b612d9481612b73565b82525050565b6000602082019050612daf6000830184612d8b565b92915050565b60008060408385031215612dcc57612dcb612b4e565b5b6000612dda85828601612bd2565b9250506020612deb85828601612bd2565b9150509250929050565b600060208284031215612e0b57612e0a612b4e565b5b6000612e1984828501612b9c565b91505092915050565b6000604082019050612e376000830185612cd7565b612e446020830184612cd7565b9392505050565b612e5481612c27565b8114612e5f57600080fd5b50565b600081359050612e7181612e4b565b92915050565b60008060408385031215612e8e57612e8d612b4e565b5b6000612e9c85828601612b9c565b9250506020612ead85828601612e62565b9150509250929050565b60008060408385031215612ece57612ecd612b4e565b5b6000612edc85828601612b9c565b9250506020612eed85828601612b9c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f3e57607f821691505b60208210811415612f5257612f51612ef7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f8e602083612a9e565b9150612f9982612f58565b602082019050919050565b60006020820190508181036000830152612fbd81612f81565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ffe82612bb1565b915061300983612bb1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561303e5761303d612fc4565b5b828201905092915050565b7f546f6b656e3a20726174696f206d7573742061646420746f2031303025000000600082015250565b600061307f601d83612a9e565b915061308a82613049565b602082019050919050565b600060208201905081810360008301526130ae81613072565b9050919050565b60006130c082612bb1565b91506130cb83612bb1565b9250828210156130de576130dd612fc4565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061312382612bb1565b915061312e83612bb1565b92508261313e5761313d6130e9565b5b828204905092915050565b7f54726164696e6720697320616374697665000000000000000000000000000000600082015250565b600061317f601183612a9e565b915061318a82613149565b602082019050919050565b600060208201905081810360008301526131ae81613172565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613211603983612a9e565b915061321c826131b5565b604082019050919050565b6000602082019050818103600083015261324081613204565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132a3602683612a9e565b91506132ae82613247565b604082019050919050565b600060208201905081810360008301526132d281613296565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156133305780860481111561330c5761330b612fc4565b5b600185161561331b5780820291505b8081029050613329856132d9565b94506132f0565b94509492505050565b6000826133495760019050613405565b816133575760009050613405565b816001811461336d5760028114613377576133a6565b6001915050613405565b60ff84111561338957613388612fc4565b5b8360020a9150848211156133a05761339f612fc4565b5b50613405565b5060208310610133831016604e8410600b84101617156133db5782820a9050838111156133d6576133d5612fc4565b5b613405565b6133e884848460016132e6565b925090508184048111156133ff576133fe612fc4565b5b81810290505b9392505050565b600061341782612bb1565b915061342283612bb1565b925061344f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613339565b905092915050565b600061346282612bb1565b915061346d83612bb1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134a6576134a5612fc4565b5b828202905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006134e7601b83612a9e565b91506134f2826134b1565b602082019050919050565b60006020820190508181036000830152613516816134da565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613579602483612a9e565b91506135848261351d565b604082019050919050565b600060208201905081810360008301526135a88161356c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061360b602283612a9e565b9150613616826135af565b604082019050919050565b6000602082019050818103600083015261363a816135fe565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061369d602583612a9e565b91506136a882613641565b604082019050919050565b600060208201905081810360008301526136cc81613690565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061372f602383612a9e565b915061373a826136d3565b604082019050919050565b6000602082019050818103600083015261375e81613722565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061379b601683612a9e565b91506137a682613765565b602082019050919050565b600060208201905081810360008301526137ca8161378e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613807601383612a9e565b9150613812826137d1565b602082019050919050565b60006020820190508181036000830152613836816137fa565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613899602183612a9e565b91506138a48261383d565b604082019050919050565b600060208201905081810360008301526138c88161388c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061393c81612b85565b92915050565b60006020828403121561395857613957612b4e565b5b60006139668482850161392d565b91505092915050565b6000819050919050565b600061399461398f61398a8461396f565b612c5d565b612bb1565b9050919050565b6139a481613979565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139df81612b73565b82525050565b60006139f183836139d6565b60208301905092915050565b6000602082019050919050565b6000613a15826139aa565b613a1f81856139b5565b9350613a2a836139c6565b8060005b83811015613a5b578151613a4288826139e5565b9750613a4d836139fd565b925050600181019050613a2e565b5085935050505092915050565b600060a082019050613a7d6000830188612cd7565b613a8a602083018761399b565b8181036040830152613a9c8186613a0a565b9050613aab6060830185612d8b565b613ab86080830184612cd7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206b2c7236fea94a86e3dbb7be5bb3804ee8cf3a2541a5a9f9e00d20b5f6647cce64736f6c63430008090033

Deployed Bytecode Sourcemap

29394:9365:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7492:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9666:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29578:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8615:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10318:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8456:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11083:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29636:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33993:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35177:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30180:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8787:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21994:148;;;;;;;;;;;;;:::i;:::-;;32949:364;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29839:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33749:238;;;;;;;;;;;;;:::i;:::-;;21350:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29714:45;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33320:373;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7712:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30461:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34731:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11805:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9128:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30679:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30140:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29801:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34540:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34397:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9367:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30097:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22298:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32365:577;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7492:100;7546:13;7579:5;7572:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7492:100;:::o;9666:169::-;9749:4;9766:39;9775:12;:10;:12::i;:::-;9789:7;9798:6;9766:8;:39::i;:::-;9823:4;9816:11;;9666:169;;;;:::o;29578:51::-;;;:::o;8615:108::-;8676:7;8703:12;;8696:19;;8615:108;:::o;10318:355::-;10458:4;10475:36;10485:6;10493:9;10504:6;10475:9;:36::i;:::-;10522:121;10531:6;10539:12;:10;:12::i;:::-;10553:89;10591:6;10553:89;;;;;;;;;;;;;;;;;:11;:19;10565:6;10553:19;;;;;;;;;;;;;;;:33;10573:12;:10;:12::i;:::-;10553:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10522:8;:121::i;:::-;10661:4;10654:11;;10318:355;;;;;:::o;8456:93::-;8514:5;8539:2;8532:9;;8456:93;:::o;11083:218::-;11171:4;11188:83;11197:12;:10;:12::i;:::-;11211:7;11220:50;11259:10;11220:11;:25;11232:12;:10;:12::i;:::-;11220:25;;;;;;;;;;;;;;;:34;11246:7;11220:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11188:8;:83::i;:::-;11289:4;11282:11;;11083:218;;;;:::o;29636:38::-;;;:::o;33993:396::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34152:3:::1;34129:19;34109:17;:39;;;;:::i;:::-;:46;34101:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;34229:17;34200:9;:26;;:46;;;;34288:19;34257:9;:28;;:50;;;;34361:19;34342:17;34325:56;;;;;;;;;;33993:396:::0;;:::o;35177:125::-;35242:4;35266:19;:28;35286:7;35266:28;;;;;;;;;;;;;;;;;;;;;;;;;35259:35;;35177:125;;;:::o;30180:31::-;;;;;;;;;;;;;:::o;8787:127::-;8861:7;8888:9;:18;8898:7;8888:18;;;;;;;;;;;;;;;;8881:25;;8787:127;;;:::o;21994:148::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22101:1:::1;22064:40;;22085:6;;;;;;;;;;;22064:40;;;;;;;;;;;;22132:1;22115:6;;:19;;;;;;;;;;;;;;;;;;21994:148::o:0;32949:364::-;32996:7;33016:22;33041:2;33016:27;;33054:18;33110:9;33094:12;;33076:15;:30;;;;:::i;:::-;33075:44;;;;:::i;:::-;33054:65;;33124:15;33142:14;33124:32;;33182:14;33168:10;:28;33165:110;;33230:10;33213:14;:27;;;;:::i;:::-;33203:37;;33165:110;;;33268:1;33258:11;;33165:110;33298:7;33291:14;;;;;32949:364;:::o;29839:43::-;;;;;;;;;;;;;;;;;:::o;33749:238::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33813:13:::1;;;;;;;;;;;33812:14;33804:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;33869:4;33853:13;;:20;;;;;;;;;;;;;;;;;;33898:4;33884:11;;:18;;;;;;;;;;;;;;;;;;33926:12;33913:10;:25;;;;33964:15;33949:12;:30;;;;33749:238::o:0;21350:79::-;21388:7;21415:6;;;;;;;;;;;21408:13;;21350:79;:::o;29714:45::-;;;;;;;;;;;;;;:::o;33320:373::-;33368:7;33388:23;33414:2;33388:28;;33427:18;33483:9;33467:12;;33449:15;:30;;;;:::i;:::-;33448:44;;;;:::i;:::-;33427:65;;33497:16;33516:15;33497:34;;33557:15;33543:10;:29;33540:114;;33608:10;33590:15;:28;;;;:::i;:::-;33579:39;;33540:114;;;33647:1;33636:12;;33540:114;33677:8;33670:15;;;;;33320:373;:::o;7712:104::-;7768:13;7801:7;7794:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7712:104;:::o;30461:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;34731:242::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34838:13:::1;34830:21;;:4;:21;;;;34822:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;34924:41;34953:4;34959:5;34924:28;:41::i;:::-;34731:242:::0;;:::o;11805:269::-;11898:4;11915:129;11924:12;:10;:12::i;:::-;11938:7;11947:96;11986:15;11947:96;;;;;;;;;;;;;;;;;:11;:25;11959:12;:10;:12::i;:::-;11947:25;;;;;;;;;;;;;;;:34;11973:7;11947:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11915:8;:129::i;:::-;12062:4;12055:11;;11805:269;;;;:::o;9128:175::-;9214:4;9231:42;9241:12;:10;:12::i;:::-;9255:9;9266:6;9231:9;:42::i;:::-;9291:4;9284:11;;9128:175;;;;:::o;30679:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30140:33::-;;;;;;;;;;;;;:::o;29801:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;34540:182::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34656:8:::1;34625:19;:28;34645:7;34625:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34696:7;34680:34;;;34705:8;34680:34;;;;;;:::i;:::-;;;;;;;;34540:182:::0;;:::o;34397:134::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34519:4:::1;34482:26;:34;34509:6;34482:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;34397:134:::0;;:::o;9367:151::-;9456:7;9483:11;:18;9495:5;9483:18;;;;;;;;;;;;;;;:27;9502:7;9483:27;;;;;;;;;;;;;;;;9476:34;;9367:151;;;;:::o;30097:33::-;;;;:::o;22298:244::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22407:1:::1;22387:22;;:8;:22;;;;22379:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22497:8;22468:38;;22489:6;;;;;;;;;;;22468:38;;;;;;;;;;;;22526:8;22517:6;;:17;;;;;;;;;;;;;;;;;;22298:244:::0;:::o;32365:577::-;32406:7;32426:25;32454:15;32426:43;;32474:18;32530:10;32514:12;;32496:15;:30;;;;:::i;:::-;32495:45;;;;:::i;:::-;32474:66;;32545:18;32566:17;32545:38;;32609:3;32595:10;:17;32592:311;;32657:1;32643:10;32639:2;:14;;;;:::i;:::-;32622:13;:11;:13::i;:::-;:32;;;;:::i;:::-;:36;32619:234;;;32703:10;32699:2;:14;;;;:::i;:::-;32679:17;:34;;;;:::i;:::-;32666:47;;32743:13;:11;:13::i;:::-;32729:10;:27;32726:74;;32779:13;:11;:13::i;:::-;32765:27;;32726:74;32619:234;;;32833:13;:11;:13::i;:::-;32819:27;;32619:234;32592:311;;;32884:13;:11;:13::i;:::-;32870:27;;32592:311;32924:10;32917:17;;;;;32365:577;:::o;16382:182::-;16440:7;16460:9;16476:1;16472;:5;;;;:::i;:::-;16460:17;;16501:1;16496;:6;;16488:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16555:1;16548:8;;;16382:182;;;;:::o;94:98::-;147:7;174:10;167:17;;94:98;:::o;15001:381::-;15154:1;15137:19;;:5;:19;;;;15129:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15235:1;15216:21;;:7;:21;;;;15208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15320:6;15290:11;:18;15302:5;15290:18;;;;;;;;;;;;;;;:27;15309:7;15290:27;;;;;;;;;;;;;;;:36;;;;15358:7;15342:32;;15351:5;15342:32;;;15367:6;15342:32;;;;;;:::i;:::-;;;;;;;;15001:381;;;:::o;35311:2433::-;35459:1;35443:18;;:4;:18;;;;35435:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35536:1;35522:16;;:2;:16;;;;35514:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35603:1;35593:6;:11;35590:92;;;35621:28;35637:4;35643:2;35647:1;35621:15;:28::i;:::-;35664:7;;35590:92;35716:7;:5;:7::i;:::-;35708:15;;:4;:15;;;;:36;;;;;35737:7;:5;:7::i;:::-;35731:13;;:2;:13;;;;35708:36;:60;;;;;35766:1;35752:16;;:2;:16;;;;35708:60;:89;;;;;35790:6;35776:21;;:2;:21;;;;35708:89;:106;;;;;35806:8;;;;;;;;;;;35805:9;35708:106;35699:552;;;35829:13;;;;;;;;;;;35825:119;;35858:19;:25;35878:4;35858:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35887:19;:23;35907:2;35887:23;;;;;;;;;;;;;;;;;;;;;;;;;35858:52;35850:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35825:119;35970:25;:31;35996:4;35970:31;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;36006:26;:30;36033:2;36006:30;;;;;;;;;;;;;;;;;;;;;;;;;36005:31;35970:66;35966:280;;;36080:11;:9;:11::i;:::-;36063:13;36073:2;36063:9;:13::i;:::-;36054:6;:22;;;;:::i;:::-;:37;;36046:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35966:280;;;36132:26;:30;36159:2;36132:30;;;;;;;;;;;;;;;;;;;;;;;;;36128:118;;36204:11;:9;:11::i;:::-;36187:13;36197:2;36187:9;:13::i;:::-;36178:6;:22;;;;:::i;:::-;:37;;36170:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36128:118;35966:280;35699:552;36257:28;36288:24;36306:4;36288:9;:24::i;:::-;36257:55;;36323:12;36362:18;;36338:20;:42;;36323:57;;36385:12;36401:8;;;;;;;;;;;36400:9;36385:24;;36511:19;:25;36531:4;36511:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36540:19;:23;36560:2;36540:23;;;;;;;;;;;;;;;;;;;;;;;;;36511:52;36508:99;;;36590:5;36580:15;;36508:99;36620:12;36647:25;36675:18;:16;:18::i;:::-;36647:46;;36704:24;36731:17;:15;:17::i;:::-;36704:44;;36840:7;36837:517;;;36891:25;:29;36917:2;36891:29;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;36944:1;36924:17;:21;36891:54;36887:317;;;36972:38;37006:3;36972:29;36983:17;36972:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;36965:45;;36887:317;;;37071:25;:31;37097:4;37071:31;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;37125:1;37106:16;:20;37071:55;37068:136;;;37151:37;37184:3;37151:28;37162:16;37151:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;37144:44;;37068:136;36887:317;37231:1;37224:4;:8;37221:93;;;37256:42;37272:4;37286;37293;37256:15;:42::i;:::-;37221:93;37338:4;37328:14;;;;;:::i;:::-;;;36837:517;37386:7;:35;;;;;37410:11;;;;;;;;;;;37386:35;:61;;;;;37439:8;;;;;;;;;;;37438:9;37386:61;:110;;;;;37465:25;:31;37491:4;37465:31;;;;;;;;;;;;;;;;;;;;;;;;;37464:32;37386:110;:153;;;;;37514:19;:25;37534:4;37514:25;;;;;;;;;;;;;;;;;;;;;;;;;37513:26;37386:153;:194;;;;;37557:19;:23;37577:2;37557:23;;;;;;;;;;;;;;;;;;;;;;;;;37556:24;37386:194;37368:322;;;37618:4;37607:8;;:15;;;;;;;;;;;;;;;;;;37637:10;:8;:10::i;:::-;37673:5;37662:8;;:16;;;;;;;;;;;;;;;;;;37368:322;37703:33;37719:4;37725:2;37729:6;37703:15;:33::i;:::-;35424:2320;;;;;;35311:2433;;;;:::o;17288:193::-;17374:7;17407:1;17402;:6;;17410:12;17394:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17434:9;17450:1;17446;:5;;;;:::i;:::-;17434:17;;17472:1;17465:8;;;17288:193;;;;;:::o;34982:186::-;35099:5;35065:25;:31;35091:4;35065:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35154:5;35120:40;;35148:4;35120:40;;;;;;;;;;;;34982:186;;:::o;12565:575::-;12723:1;12705:20;;:6;:20;;;;12697:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12807:1;12786:23;;:9;:23;;;;12778:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12863:47;12884:6;12892:9;12903:6;12863:20;:47::i;:::-;12944:71;12966:6;12944:71;;;;;;;;;;;;;;;;;:9;:17;12954:6;12944:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12924:9;:17;12934:6;12924:17;;;;;;;;;;;;;;;:91;;;;13049:32;13074:6;13049:9;:20;13059:9;13049:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13026:9;:20;13036:9;13026:20;;;;;;;;;;;;;;;:55;;;;13114:9;13097:35;;13106:6;13097:35;;;13125:6;13097:35;;;;;;:::i;:::-;;;;;;;;12565:575;;;:::o;17741:473::-;17799:7;18049:1;18044;:6;18040:47;;;18074:1;18067:8;;;;18040:47;18100:9;18116:1;18112;:5;;;;:::i;:::-;18100:17;;18145:1;18140;18136;:5;;;;:::i;:::-;:10;18128:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18205:1;18198:8;;;17741:473;;;;;:::o;18691:132::-;18749:7;18776:39;18780:1;18783;18776:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18769:46;;18691:132;;;;:::o;38360:394::-;38399:23;38425:24;38443:4;38425:9;:24::i;:::-;38399:50;;38485:1;38466:15;:20;38463:34;;;38489:7;;;38463:34;38552:2;38531:18;;:23;;;;:::i;:::-;38513:15;:41;38510:111;;;38607:2;38586:18;;:23;;;;:::i;:::-;38568:41;;38510:111;38634:26;38663:15;38634:44;;38689:36;38706:18;38689:16;:36::i;:::-;38388:366;;38360:394;:::o;15986:125::-;;;;:::o;19320:279::-;19406:7;19438:1;19434;:5;19441:12;19426:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19465:9;19481:1;19477;:5;;;;:::i;:::-;19465:17;;19590:1;19583:8;;;19320:279;;;;;:::o;37753:597::-;37882:21;37920:1;37906:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37882:40;;37951:4;37933;37938:1;37933:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37977:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37967:4;37972:1;37967:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38013:62;38030:4;38045:15;38063:11;38013:8;:62::i;:::-;38115:15;:66;;;38196:11;38222:1;38266:4;38293;38313:15;38115:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37808:542;37753:597;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:86::-;5484:7;5524:4;5517:5;5513:16;5502:27;;5449:86;;;:::o;5541:112::-;5624:22;5640:5;5624:22;:::i;:::-;5619:3;5612:35;5541:112;;:::o;5659:214::-;5748:4;5786:2;5775:9;5771:18;5763:26;;5799:67;5863:1;5852:9;5848:17;5839:6;5799:67;:::i;:::-;5659:214;;;;:::o;5879:118::-;5966:24;5984:5;5966:24;:::i;:::-;5961:3;5954:37;5879:118;;:::o;6003:222::-;6096:4;6134:2;6123:9;6119:18;6111:26;;6147:71;6215:1;6204:9;6200:17;6191:6;6147:71;:::i;:::-;6003:222;;;;:::o;6231:474::-;6299:6;6307;6356:2;6344:9;6335:7;6331:23;6327:32;6324:119;;;6362:79;;:::i;:::-;6324:119;6482:1;6507:53;6552:7;6543:6;6532:9;6528:22;6507:53;:::i;:::-;6497:63;;6453:117;6609:2;6635:53;6680:7;6671:6;6660:9;6656:22;6635:53;:::i;:::-;6625:63;;6580:118;6231:474;;;;;:::o;6711:329::-;6770:6;6819:2;6807:9;6798:7;6794:23;6790:32;6787:119;;;6825:79;;:::i;:::-;6787:119;6945:1;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6916:117;6711:329;;;;:::o;7046:332::-;7167:4;7205:2;7194:9;7190:18;7182:26;;7218:71;7286:1;7275:9;7271:17;7262:6;7218:71;:::i;:::-;7299:72;7367:2;7356:9;7352:18;7343:6;7299:72;:::i;:::-;7046:332;;;;;:::o;7384:116::-;7454:21;7469:5;7454:21;:::i;:::-;7447:5;7444:32;7434:60;;7490:1;7487;7480:12;7434:60;7384:116;:::o;7506:133::-;7549:5;7587:6;7574:20;7565:29;;7603:30;7627:5;7603:30;:::i;:::-;7506:133;;;;:::o;7645:468::-;7710:6;7718;7767:2;7755:9;7746:7;7742:23;7738:32;7735:119;;;7773:79;;:::i;:::-;7735:119;7893:1;7918:53;7963:7;7954:6;7943:9;7939:22;7918:53;:::i;:::-;7908:63;;7864:117;8020:2;8046:50;8088:7;8079:6;8068:9;8064:22;8046:50;:::i;:::-;8036:60;;7991:115;7645:468;;;;;:::o;8119:474::-;8187:6;8195;8244:2;8232:9;8223:7;8219:23;8215:32;8212:119;;;8250:79;;:::i;:::-;8212:119;8370:1;8395:53;8440:7;8431:6;8420:9;8416:22;8395:53;:::i;:::-;8385:63;;8341:117;8497:2;8523:53;8568:7;8559:6;8548:9;8544:22;8523:53;:::i;:::-;8513:63;;8468:118;8119:474;;;;;:::o;8599:180::-;8647:77;8644:1;8637:88;8744:4;8741:1;8734:15;8768:4;8765:1;8758:15;8785:320;8829:6;8866:1;8860:4;8856:12;8846:22;;8913:1;8907:4;8903:12;8934:18;8924:81;;8990:4;8982:6;8978:17;8968:27;;8924:81;9052:2;9044:6;9041:14;9021:18;9018:38;9015:84;;;9071:18;;:::i;:::-;9015:84;8836:269;8785:320;;;:::o;9111:182::-;9251:34;9247:1;9239:6;9235:14;9228:58;9111:182;:::o;9299:366::-;9441:3;9462:67;9526:2;9521:3;9462:67;:::i;:::-;9455:74;;9538:93;9627:3;9538:93;:::i;:::-;9656:2;9651:3;9647:12;9640:19;;9299:366;;;:::o;9671:419::-;9837:4;9875:2;9864:9;9860:18;9852:26;;9924:9;9918:4;9914:20;9910:1;9899:9;9895:17;9888:47;9952:131;10078:4;9952:131;:::i;:::-;9944:139;;9671:419;;;:::o;10096:180::-;10144:77;10141:1;10134:88;10241:4;10238:1;10231:15;10265:4;10262:1;10255:15;10282:305;10322:3;10341:20;10359:1;10341:20;:::i;:::-;10336:25;;10375:20;10393:1;10375:20;:::i;:::-;10370:25;;10529:1;10461:66;10457:74;10454:1;10451:81;10448:107;;;10535:18;;:::i;:::-;10448:107;10579:1;10576;10572:9;10565:16;;10282:305;;;;:::o;10593:179::-;10733:31;10729:1;10721:6;10717:14;10710:55;10593:179;:::o;10778:366::-;10920:3;10941:67;11005:2;11000:3;10941:67;:::i;:::-;10934:74;;11017:93;11106:3;11017:93;:::i;:::-;11135:2;11130:3;11126:12;11119:19;;10778:366;;;:::o;11150:419::-;11316:4;11354:2;11343:9;11339:18;11331:26;;11403:9;11397:4;11393:20;11389:1;11378:9;11374:17;11367:47;11431:131;11557:4;11431:131;:::i;:::-;11423:139;;11150:419;;;:::o;11575:191::-;11615:4;11635:20;11653:1;11635:20;:::i;:::-;11630:25;;11669:20;11687:1;11669:20;:::i;:::-;11664:25;;11708:1;11705;11702:8;11699:34;;;11713:18;;:::i;:::-;11699:34;11758:1;11755;11751:9;11743:17;;11575:191;;;;:::o;11772:180::-;11820:77;11817:1;11810:88;11917:4;11914:1;11907:15;11941:4;11938:1;11931:15;11958:185;11998:1;12015:20;12033:1;12015:20;:::i;:::-;12010:25;;12049:20;12067:1;12049:20;:::i;:::-;12044:25;;12088:1;12078:35;;12093:18;;:::i;:::-;12078:35;12135:1;12132;12128:9;12123:14;;11958:185;;;;:::o;12149:167::-;12289:19;12285:1;12277:6;12273:14;12266:43;12149:167;:::o;12322:366::-;12464:3;12485:67;12549:2;12544:3;12485:67;:::i;:::-;12478:74;;12561:93;12650:3;12561:93;:::i;:::-;12679:2;12674:3;12670:12;12663:19;;12322:366;;;:::o;12694:419::-;12860:4;12898:2;12887:9;12883:18;12875:26;;12947:9;12941:4;12937:20;12933:1;12922:9;12918:17;12911:47;12975:131;13101:4;12975:131;:::i;:::-;12967:139;;12694:419;;;:::o;13119:244::-;13259:34;13255:1;13247:6;13243:14;13236:58;13328:27;13323:2;13315:6;13311:15;13304:52;13119:244;:::o;13369:366::-;13511:3;13532:67;13596:2;13591:3;13532:67;:::i;:::-;13525:74;;13608:93;13697:3;13608:93;:::i;:::-;13726:2;13721:3;13717:12;13710:19;;13369:366;;;:::o;13741:419::-;13907:4;13945:2;13934:9;13930:18;13922:26;;13994:9;13988:4;13984:20;13980:1;13969:9;13965:17;13958:47;14022:131;14148:4;14022:131;:::i;:::-;14014:139;;13741:419;;;:::o;14166:225::-;14306:34;14302:1;14294:6;14290:14;14283:58;14375:8;14370:2;14362:6;14358:15;14351:33;14166:225;:::o;14397:366::-;14539:3;14560:67;14624:2;14619:3;14560:67;:::i;:::-;14553:74;;14636:93;14725:3;14636:93;:::i;:::-;14754:2;14749:3;14745:12;14738:19;;14397:366;;;:::o;14769:419::-;14935:4;14973:2;14962:9;14958:18;14950:26;;15022:9;15016:4;15012:20;15008:1;14997:9;14993:17;14986:47;15050:131;15176:4;15050:131;:::i;:::-;15042:139;;14769:419;;;:::o;15194:102::-;15236:8;15283:5;15280:1;15276:13;15255:34;;15194:102;;;:::o;15302:848::-;15363:5;15370:4;15394:6;15385:15;;15418:5;15409:14;;15432:712;15453:1;15443:8;15440:15;15432:712;;;15548:4;15543:3;15539:14;15533:4;15530:24;15527:50;;;15557:18;;:::i;:::-;15527:50;15607:1;15597:8;15593:16;15590:451;;;16022:4;16015:5;16011:16;16002:25;;15590:451;16072:4;16066;16062:15;16054:23;;16102:32;16125:8;16102:32;:::i;:::-;16090:44;;15432:712;;;15302:848;;;;;;;:::o;16156:1073::-;16210:5;16401:8;16391:40;;16422:1;16413:10;;16424:5;;16391:40;16450:4;16440:36;;16467:1;16458:10;;16469:5;;16440:36;16536:4;16584:1;16579:27;;;;16620:1;16615:191;;;;16529:277;;16579:27;16597:1;16588:10;;16599:5;;;16615:191;16660:3;16650:8;16647:17;16644:43;;;16667:18;;:::i;:::-;16644:43;16716:8;16713:1;16709:16;16700:25;;16751:3;16744:5;16741:14;16738:40;;;16758:18;;:::i;:::-;16738:40;16791:5;;;16529:277;;16915:2;16905:8;16902:16;16896:3;16890:4;16887:13;16883:36;16865:2;16855:8;16852:16;16847:2;16841:4;16838:12;16834:35;16818:111;16815:246;;;16971:8;16965:4;16961:19;16952:28;;17006:3;16999:5;16996:14;16993:40;;;17013:18;;:::i;:::-;16993:40;17046:5;;16815:246;17086:42;17124:3;17114:8;17108:4;17105:1;17086:42;:::i;:::-;17071:57;;;;17160:4;17155:3;17151:14;17144:5;17141:25;17138:51;;;17169:18;;:::i;:::-;17138:51;17218:4;17211:5;17207:16;17198:25;;16156:1073;;;;;;:::o;17235:285::-;17295:5;17319:23;17337:4;17319:23;:::i;:::-;17311:31;;17363:27;17381:8;17363:27;:::i;:::-;17351:39;;17409:104;17446:66;17436:8;17430:4;17409:104;:::i;:::-;17400:113;;17235:285;;;;:::o;17526:348::-;17566:7;17589:20;17607:1;17589:20;:::i;:::-;17584:25;;17623:20;17641:1;17623:20;:::i;:::-;17618:25;;17811:1;17743:66;17739:74;17736:1;17733:81;17728:1;17721:9;17714:17;17710:105;17707:131;;;17818:18;;:::i;:::-;17707:131;17866:1;17863;17859:9;17848:20;;17526:348;;;;:::o;17880:177::-;18020:29;18016:1;18008:6;18004:14;17997:53;17880:177;:::o;18063:366::-;18205:3;18226:67;18290:2;18285:3;18226:67;:::i;:::-;18219:74;;18302:93;18391:3;18302:93;:::i;:::-;18420:2;18415:3;18411:12;18404:19;;18063:366;;;:::o;18435:419::-;18601:4;18639:2;18628:9;18624:18;18616:26;;18688:9;18682:4;18678:20;18674:1;18663:9;18659:17;18652:47;18716:131;18842:4;18716:131;:::i;:::-;18708:139;;18435:419;;;:::o;18860:223::-;19000:34;18996:1;18988:6;18984:14;18977:58;19069:6;19064:2;19056:6;19052:15;19045:31;18860:223;:::o;19089:366::-;19231:3;19252:67;19316:2;19311:3;19252:67;:::i;:::-;19245:74;;19328:93;19417:3;19328:93;:::i;:::-;19446:2;19441:3;19437:12;19430:19;;19089:366;;;:::o;19461:419::-;19627:4;19665:2;19654:9;19650:18;19642:26;;19714:9;19708:4;19704:20;19700:1;19689:9;19685:17;19678:47;19742:131;19868:4;19742:131;:::i;:::-;19734:139;;19461:419;;;:::o;19886:221::-;20026:34;20022:1;20014:6;20010:14;20003:58;20095:4;20090:2;20082:6;20078:15;20071:29;19886:221;:::o;20113:366::-;20255:3;20276:67;20340:2;20335:3;20276:67;:::i;:::-;20269:74;;20352:93;20441:3;20352:93;:::i;:::-;20470:2;20465:3;20461:12;20454:19;;20113:366;;;:::o;20485:419::-;20651:4;20689:2;20678:9;20674:18;20666:26;;20738:9;20732:4;20728:20;20724:1;20713:9;20709:17;20702:47;20766:131;20892:4;20766:131;:::i;:::-;20758:139;;20485:419;;;:::o;20910:224::-;21050:34;21046:1;21038:6;21034:14;21027:58;21119:7;21114:2;21106:6;21102:15;21095:32;20910:224;:::o;21140:366::-;21282:3;21303:67;21367:2;21362:3;21303:67;:::i;:::-;21296:74;;21379:93;21468:3;21379:93;:::i;:::-;21497:2;21492:3;21488:12;21481:19;;21140:366;;;:::o;21512:419::-;21678:4;21716:2;21705:9;21701:18;21693:26;;21765:9;21759:4;21755:20;21751:1;21740:9;21736:17;21729:47;21793:131;21919:4;21793:131;:::i;:::-;21785:139;;21512:419;;;:::o;21937:222::-;22077:34;22073:1;22065:6;22061:14;22054:58;22146:5;22141:2;22133:6;22129:15;22122:30;21937:222;:::o;22165:366::-;22307:3;22328:67;22392:2;22387:3;22328:67;:::i;:::-;22321:74;;22404:93;22493:3;22404:93;:::i;:::-;22522:2;22517:3;22513:12;22506:19;;22165:366;;;:::o;22537:419::-;22703:4;22741:2;22730:9;22726:18;22718:26;;22790:9;22784:4;22780:20;22776:1;22765:9;22761:17;22754:47;22818:131;22944:4;22818:131;:::i;:::-;22810:139;;22537:419;;;:::o;22962:172::-;23102:24;23098:1;23090:6;23086:14;23079:48;22962:172;:::o;23140:366::-;23282:3;23303:67;23367:2;23362:3;23303:67;:::i;:::-;23296:74;;23379:93;23468:3;23379:93;:::i;:::-;23497:2;23492:3;23488:12;23481:19;;23140:366;;;:::o;23512:419::-;23678:4;23716:2;23705:9;23701:18;23693:26;;23765:9;23759:4;23755:20;23751:1;23740:9;23736:17;23729:47;23793:131;23919:4;23793:131;:::i;:::-;23785:139;;23512:419;;;:::o;23937:169::-;24077:21;24073:1;24065:6;24061:14;24054:45;23937:169;:::o;24112:366::-;24254:3;24275:67;24339:2;24334:3;24275:67;:::i;:::-;24268:74;;24351:93;24440:3;24351:93;:::i;:::-;24469:2;24464:3;24460:12;24453:19;;24112:366;;;:::o;24484:419::-;24650:4;24688:2;24677:9;24673:18;24665:26;;24737:9;24731:4;24727:20;24723:1;24712:9;24708:17;24701:47;24765:131;24891:4;24765:131;:::i;:::-;24757:139;;24484:419;;;:::o;24909:220::-;25049:34;25045:1;25037:6;25033:14;25026:58;25118:3;25113:2;25105:6;25101:15;25094:28;24909:220;:::o;25135:366::-;25277:3;25298:67;25362:2;25357:3;25298:67;:::i;:::-;25291:74;;25374:93;25463:3;25374:93;:::i;:::-;25492:2;25487:3;25483:12;25476:19;;25135:366;;;:::o;25507:419::-;25673:4;25711:2;25700:9;25696:18;25688:26;;25760:9;25754:4;25750:20;25746:1;25735:9;25731:17;25724:47;25788:131;25914:4;25788:131;:::i;:::-;25780:139;;25507:419;;;:::o;25932:180::-;25980:77;25977:1;25970:88;26077:4;26074:1;26067:15;26101:4;26098:1;26091:15;26118:180;26166:77;26163:1;26156:88;26263:4;26260:1;26253:15;26287:4;26284:1;26277:15;26304:143;26361:5;26392:6;26386:13;26377:22;;26408:33;26435:5;26408:33;:::i;:::-;26304:143;;;;:::o;26453:351::-;26523:6;26572:2;26560:9;26551:7;26547:23;26543:32;26540:119;;;26578:79;;:::i;:::-;26540:119;26698:1;26723:64;26779:7;26770:6;26759:9;26755:22;26723:64;:::i;:::-;26713:74;;26669:128;26453:351;;;;:::o;26810:85::-;26855:7;26884:5;26873:16;;26810:85;;;:::o;26901:158::-;26959:9;26992:61;27010:42;27019:32;27045:5;27019:32;:::i;:::-;27010:42;:::i;:::-;26992:61;:::i;:::-;26979:74;;26901:158;;;:::o;27065:147::-;27160:45;27199:5;27160:45;:::i;:::-;27155:3;27148:58;27065:147;;:::o;27218:114::-;27285:6;27319:5;27313:12;27303:22;;27218:114;;;:::o;27338:184::-;27437:11;27471:6;27466:3;27459:19;27511:4;27506:3;27502:14;27487:29;;27338:184;;;;:::o;27528:132::-;27595:4;27618:3;27610:11;;27648:4;27643:3;27639:14;27631:22;;27528:132;;;:::o;27666:108::-;27743:24;27761:5;27743:24;:::i;:::-;27738:3;27731:37;27666:108;;:::o;27780:179::-;27849:10;27870:46;27912:3;27904:6;27870:46;:::i;:::-;27948:4;27943:3;27939:14;27925:28;;27780:179;;;;:::o;27965:113::-;28035:4;28067;28062:3;28058:14;28050:22;;27965:113;;;:::o;28114:732::-;28233:3;28262:54;28310:5;28262:54;:::i;:::-;28332:86;28411:6;28406:3;28332:86;:::i;:::-;28325:93;;28442:56;28492:5;28442:56;:::i;:::-;28521:7;28552:1;28537:284;28562:6;28559:1;28556:13;28537:284;;;28638:6;28632:13;28665:63;28724:3;28709:13;28665:63;:::i;:::-;28658:70;;28751:60;28804:6;28751:60;:::i;:::-;28741:70;;28597:224;28584:1;28581;28577:9;28572:14;;28537:284;;;28541:14;28837:3;28830:10;;28238:608;;;28114:732;;;;:::o;28852:831::-;29115:4;29153:3;29142:9;29138:19;29130:27;;29167:71;29235:1;29224:9;29220:17;29211:6;29167:71;:::i;:::-;29248:80;29324:2;29313:9;29309:18;29300:6;29248:80;:::i;:::-;29375:9;29369:4;29365:20;29360:2;29349:9;29345:18;29338:48;29403:108;29506:4;29497:6;29403:108;:::i;:::-;29395:116;;29521:72;29589:2;29578:9;29574:18;29565:6;29521:72;:::i;:::-;29603:73;29671:3;29660:9;29656:19;29647:6;29603:73;:::i;:::-;28852:831;;;;;;;;:::o

Swarm Source

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