ETH Price: $2,942.33 (-6.02%)
Gas: 8 Gwei

Token

Kumo Inu (KUMO)
 

Overview

Max Total Supply

1,000,000,000 KUMO

Holders

143

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000027 KUMO

Value
$0.00
0x4d219df0ea0c25ade9091137aa64b20f9e63974a
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:
KUMO

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-20
*/

/**

    ___          ___          ___          ___                             ___          ___              
     /\__\        /\__\        /\__\        /\  \                  ___      /\__\        /\__\             
    /:/  /       /:/  /       /::|  |      /::\  \                /\  \    /::|  |      /:/  /             
   /:/__/       /:/  /       /:|:|  |     /:/\:\  \               \:\  \  /:|:|  |     /:/  /              
  /::\__\____  /:/  /  ___  /:/|:|__|__  /:/  \:\  \              /::\__\/:/|:|  |__  /:/  /  ___          
 /:/\:::::\__\/:/__/  /\__\/:/ |::::\__\/:/__/ \:\__\          __/:/\/__/:/ |:| /\__\/:/__/  /\__\         
 \/_|:|~~|~   \:\  \ /:/  /\/__/~~/:/  /\:\  \ /:/  /         /\/:/  /  \/__|:|/:/  /\:\  \ /:/  /         
    |:|  |     \:\  /:/  /       /:/  /  \:\  /:/  /          \::/__/       |:/:/  /  \:\  /:/  /          
    |:|  |      \:\/:/  /       /:/  /    \:\/:/  /            \:\__\       |::/  /    \:\/:/  /           
    |:|  |       \::/  /       /:/  /      \::/  /              \/__/       /:/  /      \::/  /            
     \|__|        \/__/        \/__/        \/__/                           \/__/        \/__/  

=================================================
Website : http://KumoInu.com/
Telegram: https://T.me/KumoERC
Twitter : https://Twitter.com/KumoERC
=================================================
    ___          ___          ___          ___                             ___          ___              
     /\__\        /\__\        /\__\        /\  \                  ___      /\__\        /\__\             
    /:/  /       /:/  /       /::|  |      /::\  \                /\  \    /::|  |      /:/  /             
   /:/__/       /:/  /       /:|:|  |     /:/\:\  \               \:\  \  /:|:|  |     /:/  /              
  /::\__\____  /:/  /  ___  /:/|:|__|__  /:/  \:\  \              /::\__\/:/|:|  |__  /:/  /  ___          
 /:/\:::::\__\/:/__/  /\__\/:/ |::::\__\/:/__/ \:\__\          __/:/\/__/:/ |:| /\__\/:/__/  /\__\         
 \/_|:|~~|~   \:\  \ /:/  /\/__/~~/:/  /\:\  \ /:/  /         /\/:/  /  \/__|:|/:/  /\:\  \ /:/  /         
    |:|  |     \:\  /:/  /       /:/  /  \:\  /:/  /          \::/__/       |:/:/  /  \:\  /:/  /          
    |:|  |      \:\/:/  /       /:/  /    \:\/:/  /            \:\__\       |::/  /    \:\/:/  /           
    |:|  |       \::/  /       /:/  /      \::/  /              \/__/       /:/  /      \::/  /            
     \|__|        \/__/        \/__/        \/__/                           \/__/        \/__/  
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity = 0.8.19;

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 Sync(uint112 reserve0, uint112 reserve1);
    function sync() external;
}

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

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

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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract KUMO is ERC20, Ownable {

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping (address => bool) public isBlacklisted;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    mapping(address => bool) private whitelist;

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

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

    constructor() ERC20("Kumo Inu", "KUMO") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 25;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 35;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 1000000000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 1000; // 0.5% swap wallet

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

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}
    
    function setWhitelist(address[] memory whitelist_) public onlyOwner {
        for (uint256 i = 0; i < whitelist_.length; i++) {
            whitelist[whitelist_[i]] = true;
        }
    }

    function isWhiteListed(address account) public view returns (bool) {
        return whitelist[account];
    }  

    // once enabled, can never be turned off
    function openTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removealllimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        transferDelayEnabled = false;
        return true;
    }
    
    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount <= 1, "Swap amount cannot be higher than 1% total supply.");
  	    swapTokensAtAmount = totalSupply() * newAmount / 100;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 txNum, uint256 walNum) external onlyOwner {
        require(txNum >= 1, "Cannot set maxTransactionAmount lower than .1%");
        maxTransactionAmount = (totalSupply() * txNum / 1000)/1e18;
        require(walNum >= 1, "Cannot set maxWallet lower than .1%");
        maxWallet = (totalSupply() * walNum / 1000)/1e18;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 40, "Must keep fees at 40% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 40, "Must keep fees at 40% or less");
    }

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

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

    function updateMarketingWalletdetails(address newMarketingWallet) external onlyOwner {
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWalletdetails(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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

    function manageall_bots(address _address, bool status) external onlyOwner {
        require(_address != address(0),"Address should not be 0");
        isBlacklisted[_address] = status;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlacklisted[from] && !isBlacklisted[to],"Blacklisted");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(whitelist[from] || whitelist[to] || whitelist[msg.sender]);
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap;
        uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap;
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percent/10000;
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manageall_bots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removealllimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"whitelist_","type":"address[]"}],"name":"setWhitelist","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWalletdetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWalletdetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txNum","type":"uint256"},{"internalType":"uint256","name":"walNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600881526020017f4b756d6f20496e750000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4b554d4f00000000000000000000000000000000000000000000000000000000815250816003908162000127919062000d75565b50806004908162000139919062000d75565b50505060006200014e6200066860201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002198160016200067060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000ec6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000327573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034d919062000ec6565b6040518363ffffffff1660e01b81526004016200036c92919062000f09565b6020604051808303816000875af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000ec6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003fa60a05160016200067060201b60201c565b6200040f60a05160016200076d60201b60201c565b60006019905060008060006023905060008060006b033b2e3c9fd0803ce80000009050606460028262000443919062000f65565b6200044f919062000fdf565b600881905550606460028262000466919062000f65565b62000472919062000fdf565b600a819055506103e86005826200048a919062000f65565b62000496919062000fdf565b600981905550866016819055508560178190555084601881905550601854601754601654620004c6919062001017565b620004d2919062001017565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a5462000502919062001017565b6200050e919062001017565b60198190555062000524620007c860201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000574620007c860201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d6620005c8620007c860201b60201c565b6001620007f260201b60201c565b620005e9306001620007f260201b60201c565b620005fe61dead6001620007f260201b60201c565b6200062062000612620007c860201b60201c565b60016200067060201b60201c565b620006333060016200067060201b60201c565b6200064861dead60016200067060201b60201c565b6200065a3382620008ef60201b60201c565b5050505050505050620011e7565b600033905090565b620006806200066860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000712576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070990620010b3565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008026200066860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000894576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200088b90620010b3565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009589062001125565b60405180910390fd5b620009756000838362000a9360201b60201c565b6200098c8160025462000a9860201b90919060201c565b600281905550620009e5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a9860201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a87919062001158565b60405180910390a35050565b505050565b600080828462000aa9919062001017565b90508381101562000af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae890620011c5565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b7d57607f821691505b60208210810362000b935762000b9262000b35565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bfd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bbe565b62000c09868362000bbe565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c5662000c5062000c4a8462000c21565b62000c2b565b62000c21565b9050919050565b6000819050919050565b62000c728362000c35565b62000c8a62000c818262000c5d565b84845462000bcb565b825550505050565b600090565b62000ca162000c92565b62000cae81848462000c67565b505050565b5b8181101562000cd65762000cca60008262000c97565b60018101905062000cb4565b5050565b601f82111562000d255762000cef8162000b99565b62000cfa8462000bae565b8101602085101562000d0a578190505b62000d2262000d198562000bae565b83018262000cb3565b50505b505050565b600082821c905092915050565b600062000d4a6000198460080262000d2a565b1980831691505092915050565b600062000d65838362000d37565b9150826002028217905092915050565b62000d808262000afb565b67ffffffffffffffff81111562000d9c5762000d9b62000b06565b5b62000da8825462000b64565b62000db582828562000cda565b600060209050601f83116001811462000ded576000841562000dd8578287015190505b62000de4858262000d57565b86555062000e54565b601f19841662000dfd8662000b99565b60005b8281101562000e275784890151825560018201915060208501945060208101905062000e00565b8683101562000e47578489015162000e43601f89168262000d37565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e8e8262000e61565b9050919050565b62000ea08162000e81565b811462000eac57600080fd5b50565b60008151905062000ec08162000e95565b92915050565b60006020828403121562000edf5762000ede62000e5c565b5b600062000eef8482850162000eaf565b91505092915050565b62000f038162000e81565b82525050565b600060408201905062000f20600083018562000ef8565b62000f2f602083018462000ef8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f728262000c21565b915062000f7f8362000c21565b925082820262000f8f8162000c21565b9150828204841483151762000fa95762000fa862000f36565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fec8262000c21565b915062000ff98362000c21565b9250826200100c576200100b62000fb0565b5b828204905092915050565b6000620010248262000c21565b9150620010318362000c21565b92508282019050808211156200104c576200104b62000f36565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200109b60208362001052565b9150620010a88262001063565b602082019050919050565b60006020820190508181036000830152620010ce816200108c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200110d601f8362001052565b91506200111a82620010d5565b602082019050919050565b600060208201905081810360008301526200114081620010fe565b9050919050565b620011528162000c21565b82525050565b60006020820190506200116f600083018462001147565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011ad601b8362001052565b9150620011ba8262001175565b602082019050919050565b60006020820190508181036000830152620011e0816200119e565b9050919050565b60805160a05161578e6200125360003960008181611658015281816127f001528181612899015281816128c60152612fda0152600081816112ad01528181612f8201528181613f1901528181613ffa01528181614021015281816140bd01526140e4015261578e6000f3fe6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063c17b5b8c1161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e15578063f8b45b0514610e40578063fe575a8714610e6b578063fe72b27a14610ea8576103b8565b8063e2f4560514610d6d578063f11a24d314610d98578063f2fde38b14610dc3578063f421764814610dec576103b8565b8063c9567bf9116100dc578063c9567bf914610cb1578063d257b34f14610cc8578063d85ba06314610d05578063dd62ed3e14610d30576103b8565b8063c17b5b8c14610c09578063c876d0b914610c32578063c8c8ebe414610c5d578063c9413b2614610c88576103b8565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b3b578063b62496f514610b78578063bbc0c74214610bb5578063c024666814610be0576103b8565b80639fccce3214610a7d578063a0d82dc514610aa8578063a457c2d714610ad3578063a4c82a0014610b10576103b8565b8063924de9b7116101c1578063924de9b7146109d357806395d89b41146109fc5780639c3b4fdc14610a275780639ec22c0e14610a52576103b8565b80638da5cb5b146109525780638ea5220f1461097d57806392136913146109a8576103b8565b80632e8de6a0116102d75780636ddd17131161026a5780637571336a116102395780637571336a146108aa57806375f0a874146108d35780637bce5a04146108fe5780638095d56414610929576103b8565b80636ddd1713146107ee5780636f9170f61461081957806370a0823114610856578063715018a614610893576103b8565b806349bd5a5e116102a657806349bd5a5e146107305780634a62bb651461075b5780634fbee193146107865780636a486a8e146107c3576103b8565b80632e8de6a0146106745780632f18dd911461069d578063313ce567146106c857806339509351146106f3576103b8565b8063184c16c51161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063184c16c51461050a578063199ffc72146105355780631a8145bb146105605780631f3fed8f1461058b576103b8565b806310d5de531161038b57806310d5de531461044e57806311a582c31461048b5780631694505e146104b457806318160ddd146104df576103b8565b806306fdde03146103bd57806308a925ce146103e8578063095ea7b314610411576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ee5565b6040516103df9190614223565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906142ef565b610f77565b005b34801561041d57600080fd5b5061043860048036038101906104339190614365565b6110d8565b60405161044591906143b4565b60405180910390f35b34801561045a57600080fd5b50610475600480360381019061047091906143cf565b6110f6565b60405161048291906143b4565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad91906143fc565b611116565b005b3480156104c057600080fd5b506104c96112ab565b6040516104d6919061449b565b60405180910390f35b3480156104eb57600080fd5b506104f46112cf565b60405161050191906144c5565b60405180910390f35b34801561051657600080fd5b5061051f6112d9565b60405161052c91906144c5565b60405180910390f35b34801561054157600080fd5b5061054a6112df565b60405161055791906144c5565b60405180910390f35b34801561056c57600080fd5b506105756112e5565b60405161058291906144c5565b60405180910390f35b34801561059757600080fd5b506105a06112eb565b6040516105ad91906144c5565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d891906144e0565b6112f1565b6040516105ea91906143b4565b60405180910390f35b3480156105ff57600080fd5b506106086113ca565b6040516106159190614542565b60405180910390f35b34801561062a57600080fd5b506106336113d0565b60405161064091906144c5565b60405180910390f35b34801561065557600080fd5b5061065e6113d6565b60405161066b91906143b4565b60405180910390f35b34801561068057600080fd5b5061069b600480360381019061069691906143cf565b6113e9565b005b3480156106a957600080fd5b506106b26114c4565b6040516106bf91906143b4565b60405180910390f35b3480156106d457600080fd5b506106dd61159a565b6040516106ea9190614579565b60405180910390f35b3480156106ff57600080fd5b5061071a60048036038101906107159190614365565b6115a3565b60405161072791906143b4565b60405180910390f35b34801561073c57600080fd5b50610745611656565b6040516107529190614542565b60405180910390f35b34801561076757600080fd5b5061077061167a565b60405161077d91906143b4565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a891906143cf565b61168d565b6040516107ba91906143b4565b60405180910390f35b3480156107cf57600080fd5b506107d86116e3565b6040516107e591906144c5565b60405180910390f35b3480156107fa57600080fd5b506108036116e9565b60405161081091906143b4565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b91906143cf565b6116fc565b60405161084d91906143b4565b60405180910390f35b34801561086257600080fd5b5061087d600480360381019061087891906143cf565b611752565b60405161088a91906144c5565b60405180910390f35b34801561089f57600080fd5b506108a861179a565b005b3480156108b657600080fd5b506108d160048036038101906108cc91906142ef565b6118f2565b005b3480156108df57600080fd5b506108e86119e4565b6040516108f59190614542565b60405180910390f35b34801561090a57600080fd5b50610913611a0a565b60405161092091906144c5565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190614594565b611a10565b005b34801561095e57600080fd5b50610967611b2a565b6040516109749190614542565b60405180910390f35b34801561098957600080fd5b50610992611b54565b60405161099f9190614542565b60405180910390f35b3480156109b457600080fd5b506109bd611b7a565b6040516109ca91906144c5565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f591906145e7565b611b80565b005b348015610a0857600080fd5b50610a11611c34565b604051610a1e9190614223565b60405180910390f35b348015610a3357600080fd5b50610a3c611cc6565b604051610a4991906144c5565b60405180910390f35b348015610a5e57600080fd5b50610a67611ccc565b604051610a7491906144c5565b60405180910390f35b348015610a8957600080fd5b50610a92611cd2565b604051610a9f91906144c5565b60405180910390f35b348015610ab457600080fd5b50610abd611cd8565b604051610aca91906144c5565b60405180910390f35b348015610adf57600080fd5b50610afa6004803603810190610af59190614365565b611cde565b604051610b0791906143b4565b60405180910390f35b348015610b1c57600080fd5b50610b25611dab565b604051610b3291906144c5565b60405180910390f35b348015610b4757600080fd5b50610b626004803603810190610b5d9190614365565b611db1565b604051610b6f91906143b4565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a91906143cf565b611dcf565b604051610bac91906143b4565b60405180910390f35b348015610bc157600080fd5b50610bca611def565b604051610bd791906143b4565b60405180910390f35b348015610bec57600080fd5b50610c076004803603810190610c0291906142ef565b611e02565b005b348015610c1557600080fd5b50610c306004803603810190610c2b9190614594565b611ef4565b005b348015610c3e57600080fd5b50610c4761200e565b604051610c5491906143b4565b60405180910390f35b348015610c6957600080fd5b50610c72612021565b604051610c7f91906144c5565b60405180910390f35b348015610c9457600080fd5b50610caf6004803603810190610caa91906143cf565b612027565b005b348015610cbd57600080fd5b50610cc6612102565b005b348015610cd457600080fd5b50610cef6004803603810190610cea9190614614565b6121d8565b604051610cfc91906143b4565b60405180910390f35b348015610d1157600080fd5b50610d1a6122e3565b604051610d2791906144c5565b60405180910390f35b348015610d3c57600080fd5b50610d576004803603810190610d529190614641565b6122e9565b604051610d6491906144c5565b60405180910390f35b348015610d7957600080fd5b50610d82612370565b604051610d8f91906144c5565b60405180910390f35b348015610da457600080fd5b50610dad612376565b604051610dba91906144c5565b60405180910390f35b348015610dcf57600080fd5b50610dea6004803603810190610de591906143cf565b61237c565b005b348015610df857600080fd5b50610e136004803603810190610e0e91906147c9565b612542565b005b348015610e2157600080fd5b50610e2a61266e565b604051610e3791906144c5565b60405180910390f35b348015610e4c57600080fd5b50610e55612674565b604051610e6291906144c5565b60405180910390f35b348015610e7757600080fd5b50610e926004803603810190610e8d91906143cf565b61267a565b604051610e9f91906143b4565b60405180910390f35b348015610eb457600080fd5b50610ecf6004803603810190610eca9190614614565b61269a565b604051610edc91906143b4565b60405180910390f35b606060038054610ef490614841565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2090614841565b8015610f6d5780601f10610f4257610100808354040283529160200191610f6d565b820191906000526020600020905b815481529060010190602001808311610f5057829003601f168201915b5050505050905090565b610f7f612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461100e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611005906148be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110749061492a565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110ec6110e5612953565b848461295b565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b61111e612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a4906148be565b60405180910390fd5b60018210156111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e8906149bc565b60405180910390fd5b670de0b6b3a76400006103e8836112066112cf565b6112109190614a0b565b61121a9190614a7c565b6112249190614a7c565b600881905550600181101561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590614b1f565b60405180910390fd5b670de0b6b3a76400006103e8826112836112cf565b61128d9190614a0b565b6112979190614a7c565b6112a19190614a7c565b600a819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b60006112fe848484612b24565b6113bf8461130a612953565b6113ba8560405180606001604052806028815260200161570c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611370612953565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138a09092919063ffffffff16565b61295b565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b6113f1612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611477906148be565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006114ce612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611554906148be565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b60006012905090565b600061164c6115b0612953565b8461164785600160006115c1612953565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390490919063ffffffff16565b61295b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a2612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611828906148be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118fa612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611989576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611980906148be565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611a18612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e906148be565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611acf9190614b3f565b611ad99190614b3f565b60158190555060286015541115611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90614bbf565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611b88612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906148be565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611c4390614841565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6f90614841565b8015611cbc5780601f10611c9157610100808354040283529160200191611cbc565b820191906000526020600020905b815481529060010190602001808311611c9f57829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611da1611ceb612953565b84611d9c856040518060600160405280602581526020016157346025913960016000611d15612953565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138a09092919063ffffffff16565b61295b565b6001905092915050565b600e5481565b6000611dc5611dbe612953565b8484612b24565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611e0a612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e90906148be565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611efc612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f82906148be565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611fb39190614b3f565b611fbd9190614b3f565b60198190555060286019541115612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090614bbf565b60405180910390fd5b505050565b601460009054906101000a900460ff1681565b60085481565b61202f612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b5906148be565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61210a612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612190906148be565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006121e2612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612268906148be565b60405180910390fd5b60018211156122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90614c51565b60405180910390fd5b6064826122c06112cf565b6122ca9190614a0b565b6122d49190614a7c565b60098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b612384612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240a906148be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614ce3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61254a612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d0906148be565b60405180910390fd5b60005b815181101561266a576001602060008484815181106125fe576125fd614d03565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061266290614d32565b9150506125dc565b5050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006126a4612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a906148be565b60405180910390fd5b600f546010546127439190614b3f565b4211612784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277b90614dc6565b60405180910390fd5b6103e88211156127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c090614e58565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161282b9190614542565b602060405180830381865afa158015612848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286c9190614e8d565b90506000612710848361287f9190614a0b565b6128899190614a7c565b905060008111156128c2576128c17f000000000000000000000000000000000000000000000000000000000000000061dead83613962565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561292f57600080fd5b505af1158015612943573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c190614f2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3090614fbe565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b1791906144c5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8a90615050565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf9906150e2565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ca65750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9061514e565b60405180910390fd5b60008103612cfe57612cf983836000613962565b61389b565b601160009054906101000a900460ff16156133df57612d1b611b2a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d895750612d59611b2a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e155750600560149054906101000a900460ff16155b156133de57601160019054906101000a900460ff16612f2d57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ecf5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f235750602060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f2c57600080fd5b5b601460009054906101000a900460ff16156130f557612f4a611b2a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fd157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561302957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130f45743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a690615206565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131985750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561323f576008548111156131e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d990615298565b60405180910390fd5b600a546131ee83611752565b826131f99190614b3f565b111561323a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323190615304565b60405180910390fd5b6133dd565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132e25750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133315760085481111561332c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332390615396565b60405180910390fd5b6133dc565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133db57600a5461338e83611752565b826133999190614b3f565b11156133da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d190615304565b60405180910390fd5b5b5b5b5b5b60006133ea30611752565b90506000600954821015905080801561340f5750601160029054906101000a900460ff165b80156134285750600560149054906101000a900460ff16155b801561347e5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134d45750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561352a5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561356e576001600560146101000a81548160ff021916908315150217905550613552613bf5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136245750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561362e57600090505b6000811561388b57602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561369157506000601954115b15613750576064601954866136a69190614a0b565b6136b09190614a7c565b9050601954601b54826136c39190614a0b565b6136cd9190614a7c565b601e60008282546136de9190614b3f565b92505081905550601954601c54826136f69190614a0b565b6137009190614a7c565b601f60008282546137119190614b3f565b92505081905550601954601a54826137299190614a0b565b6137339190614a7c565b601d60008282546137449190614b3f565b92505081905550613867565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137ab57506000601554115b15613866576064601554866137c09190614a0b565b6137ca9190614a7c565b9050601554601754826137dd9190614a0b565b6137e79190614a7c565b601e60008282546137f89190614b3f565b92505081905550601554601854826138109190614a0b565b61381a9190614a7c565b601f600082825461382b9190614b3f565b92505081905550601554601654826138439190614a0b565b61384d9190614a7c565b601d600082825461385e9190614b3f565b925050819055505b5b600081111561387c5761387b873083613962565b5b808561388891906153b6565b94505b613896878787613962565b505050505b505050565b60008383111582906138e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138df9190614223565b60405180910390fd5b50600083856138f791906153b6565b9050809150509392505050565b60008082846139139190614b3f565b905083811015613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394f90615436565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c890615050565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a37906150e2565b60405180910390fd5b613a4b838383613e75565b613ab6816040518060600160405280602681526020016156e6602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138a09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b49816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613be891906144c5565b60405180910390a3505050565b6000613c0030611752565b90506000601f54601d54601e54613c179190614b3f565b613c219190614b3f565b9050600080831480613c335750600082145b15613c4057505050613e73565b6014600954613c4f9190614a0b565b831115613c68576014600954613c659190614a0b565b92505b6000600283601e5486613c7b9190614a0b565b613c859190614a7c565b613c8f9190614a7c565b905060008185613c9f91906153b6565b90506000479050613caf82613e7a565b60008147613cbd91906153b6565b9050600086601d5483613cd09190614a0b565b613cda9190614a7c565b9050600087601f5484613ced9190614a0b565b613cf79190614a7c565b90506000818385613d0891906153b6565b613d1291906153b6565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613d7290615487565b60006040518083038185875af1925050503d8060008114613daf576040519150601f19603f3d011682016040523d82523d6000602084013e613db4565b606091505b505080985050600087118015613dca5750600081115b15613dda57613dd987826140b7565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e2090615487565b60006040518083038185875af1925050503d8060008114613e5d576040519150601f19603f3d011682016040523d82523d6000602084013e613e62565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613e9757613e96614686565b5b604051908082528060200260200182016040528015613ec55781602001602082028036833780820191505090505b5090503081600081518110613edd57613edc614d03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa691906154b1565b81600181518110613fba57613fb9614d03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061401f307f00000000000000000000000000000000000000000000000000000000000000008461295b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140819594939291906155d7565b600060405180830381600087803b15801561409b57600080fd5b505af11580156140af573d6000803e3d6000fd5b505050505050565b6140e2307f00000000000000000000000000000000000000000000000000000000000000008461295b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161414996959493929190615631565b60606040518083038185885af1158015614167573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061418c9190615692565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141cd5780820151818401526020810190506141b2565b60008484015250505050565b6000601f19601f8301169050919050565b60006141f582614193565b6141ff818561419e565b935061420f8185602086016141af565b614218816141d9565b840191505092915050565b6000602082019050818103600083015261423d81846141ea565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061428482614259565b9050919050565b61429481614279565b811461429f57600080fd5b50565b6000813590506142b18161428b565b92915050565b60008115159050919050565b6142cc816142b7565b81146142d757600080fd5b50565b6000813590506142e9816142c3565b92915050565b600080604083850312156143065761430561424f565b5b6000614314858286016142a2565b9250506020614325858286016142da565b9150509250929050565b6000819050919050565b6143428161432f565b811461434d57600080fd5b50565b60008135905061435f81614339565b92915050565b6000806040838503121561437c5761437b61424f565b5b600061438a858286016142a2565b925050602061439b85828601614350565b9150509250929050565b6143ae816142b7565b82525050565b60006020820190506143c960008301846143a5565b92915050565b6000602082840312156143e5576143e461424f565b5b60006143f3848285016142a2565b91505092915050565b600080604083850312156144135761441261424f565b5b600061442185828601614350565b925050602061443285828601614350565b9150509250929050565b6000819050919050565b600061446161445c61445784614259565b61443c565b614259565b9050919050565b600061447382614446565b9050919050565b600061448582614468565b9050919050565b6144958161447a565b82525050565b60006020820190506144b0600083018461448c565b92915050565b6144bf8161432f565b82525050565b60006020820190506144da60008301846144b6565b92915050565b6000806000606084860312156144f9576144f861424f565b5b6000614507868287016142a2565b9350506020614518868287016142a2565b925050604061452986828701614350565b9150509250925092565b61453c81614279565b82525050565b60006020820190506145576000830184614533565b92915050565b600060ff82169050919050565b6145738161455d565b82525050565b600060208201905061458e600083018461456a565b92915050565b6000806000606084860312156145ad576145ac61424f565b5b60006145bb86828701614350565b93505060206145cc86828701614350565b92505060406145dd86828701614350565b9150509250925092565b6000602082840312156145fd576145fc61424f565b5b600061460b848285016142da565b91505092915050565b60006020828403121561462a5761462961424f565b5b600061463884828501614350565b91505092915050565b600080604083850312156146585761465761424f565b5b6000614666858286016142a2565b9250506020614677858286016142a2565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146be826141d9565b810181811067ffffffffffffffff821117156146dd576146dc614686565b5b80604052505050565b60006146f0614245565b90506146fc82826146b5565b919050565b600067ffffffffffffffff82111561471c5761471b614686565b5b602082029050602081019050919050565b600080fd5b600061474561474084614701565b6146e6565b905080838252602082019050602084028301858111156147685761476761472d565b5b835b81811015614791578061477d88826142a2565b84526020840193505060208101905061476a565b5050509392505050565b600082601f8301126147b0576147af614681565b5b81356147c0848260208601614732565b91505092915050565b6000602082840312156147df576147de61424f565b5b600082013567ffffffffffffffff8111156147fd576147fc614254565b5b6148098482850161479b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061485957607f821691505b60208210810361486c5761486b614812565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148a860208361419e565b91506148b382614872565b602082019050919050565b600060208201905081810360008301526148d78161489b565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b600061491460178361419e565b915061491f826148de565b602082019050919050565b6000602082019050818103600083015261494381614907565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e202e3125000000000000000000000000000000000000602082015250565b60006149a6602e8361419e565b91506149b18261494a565b604082019050919050565b600060208201905081810360008301526149d581614999565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a168261432f565b9150614a218361432f565b9250828202614a2f8161432f565b91508282048414831517614a4657614a456149dc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a878261432f565b9150614a928361432f565b925082614aa257614aa1614a4d565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f2e31250000000000000000000000000000000000000000000000000000000000602082015250565b6000614b0960238361419e565b9150614b1482614aad565b604082019050919050565b60006020820190508181036000830152614b3881614afc565b9050919050565b6000614b4a8261432f565b9150614b558361432f565b9250828201905080821115614b6d57614b6c6149dc565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614ba9601d8361419e565b9150614bb482614b73565b602082019050919050565b60006020820190508181036000830152614bd881614b9c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614c3b60328361419e565b9150614c4682614bdf565b604082019050919050565b60006020820190508181036000830152614c6a81614c2e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ccd60268361419e565b9150614cd882614c71565b604082019050919050565b60006020820190508181036000830152614cfc81614cc0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d3d8261432f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d6f57614d6e6149dc565b5b600182019050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614db060208361419e565b9150614dbb82614d7a565b602082019050919050565b60006020820190508181036000830152614ddf81614da3565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614e42602a8361419e565b9150614e4d82614de6565b604082019050919050565b60006020820190508181036000830152614e7181614e35565b9050919050565b600081519050614e8781614339565b92915050565b600060208284031215614ea357614ea261424f565b5b6000614eb184828501614e78565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f1660248361419e565b9150614f2182614eba565b604082019050919050565b60006020820190508181036000830152614f4581614f09565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa860228361419e565b9150614fb382614f4c565b604082019050919050565b60006020820190508181036000830152614fd781614f9b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061503a60258361419e565b915061504582614fde565b604082019050919050565b600060208201905081810360008301526150698161502d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150cc60238361419e565b91506150d782615070565b604082019050919050565b600060208201905081810360008301526150fb816150bf565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000615138600b8361419e565b915061514382615102565b602082019050919050565b600060208201905081810360008301526151678161512b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151f060498361419e565b91506151fb8261516e565b606082019050919050565b6000602082019050818103600083015261521f816151e3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061528260358361419e565b915061528d82615226565b604082019050919050565b600060208201905081810360008301526152b181615275565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152ee60138361419e565b91506152f9826152b8565b602082019050919050565b6000602082019050818103600083015261531d816152e1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061538060368361419e565b915061538b82615324565b604082019050919050565b600060208201905081810360008301526153af81615373565b9050919050565b60006153c18261432f565b91506153cc8361432f565b92508282039050818111156153e4576153e36149dc565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615420601b8361419e565b915061542b826153ea565b602082019050919050565b6000602082019050818103600083015261544f81615413565b9050919050565b600081905092915050565b50565b6000615471600083615456565b915061547c82615461565b600082019050919050565b600061549282615464565b9150819050919050565b6000815190506154ab8161428b565b92915050565b6000602082840312156154c7576154c661424f565b5b60006154d58482850161549c565b91505092915050565b6000819050919050565b60006155036154fe6154f9846154de565b61443c565b61432f565b9050919050565b615513816154e8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61554e81614279565b82525050565b60006155608383615545565b60208301905092915050565b6000602082019050919050565b600061558482615519565b61558e8185615524565b935061559983615535565b8060005b838110156155ca5781516155b18882615554565b97506155bc8361556c565b92505060018101905061559d565b5085935050505092915050565b600060a0820190506155ec60008301886144b6565b6155f9602083018761550a565b818103604083015261560b8186615579565b905061561a6060830185614533565b61562760808301846144b6565b9695505050505050565b600060c0820190506156466000830189614533565b61565360208301886144b6565b615660604083018761550a565b61566d606083018661550a565b61567a6080830185614533565b61568760a08301846144b6565b979650505050505050565b6000806000606084860312156156ab576156aa61424f565b5b60006156b986828701614e78565b93505060206156ca86828701614e78565b92505060406156db86828701614e78565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f8bfab23ac180f224f3af93a71ad435c8dfde47e1f5dacb38f4b778d1097d02464736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063c17b5b8c1161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e15578063f8b45b0514610e40578063fe575a8714610e6b578063fe72b27a14610ea8576103b8565b8063e2f4560514610d6d578063f11a24d314610d98578063f2fde38b14610dc3578063f421764814610dec576103b8565b8063c9567bf9116100dc578063c9567bf914610cb1578063d257b34f14610cc8578063d85ba06314610d05578063dd62ed3e14610d30576103b8565b8063c17b5b8c14610c09578063c876d0b914610c32578063c8c8ebe414610c5d578063c9413b2614610c88576103b8565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b3b578063b62496f514610b78578063bbc0c74214610bb5578063c024666814610be0576103b8565b80639fccce3214610a7d578063a0d82dc514610aa8578063a457c2d714610ad3578063a4c82a0014610b10576103b8565b8063924de9b7116101c1578063924de9b7146109d357806395d89b41146109fc5780639c3b4fdc14610a275780639ec22c0e14610a52576103b8565b80638da5cb5b146109525780638ea5220f1461097d57806392136913146109a8576103b8565b80632e8de6a0116102d75780636ddd17131161026a5780637571336a116102395780637571336a146108aa57806375f0a874146108d35780637bce5a04146108fe5780638095d56414610929576103b8565b80636ddd1713146107ee5780636f9170f61461081957806370a0823114610856578063715018a614610893576103b8565b806349bd5a5e116102a657806349bd5a5e146107305780634a62bb651461075b5780634fbee193146107865780636a486a8e146107c3576103b8565b80632e8de6a0146106745780632f18dd911461069d578063313ce567146106c857806339509351146106f3576103b8565b8063184c16c51161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063184c16c51461050a578063199ffc72146105355780631a8145bb146105605780631f3fed8f1461058b576103b8565b806310d5de531161038b57806310d5de531461044e57806311a582c31461048b5780631694505e146104b457806318160ddd146104df576103b8565b806306fdde03146103bd57806308a925ce146103e8578063095ea7b314610411576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ee5565b6040516103df9190614223565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906142ef565b610f77565b005b34801561041d57600080fd5b5061043860048036038101906104339190614365565b6110d8565b60405161044591906143b4565b60405180910390f35b34801561045a57600080fd5b50610475600480360381019061047091906143cf565b6110f6565b60405161048291906143b4565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad91906143fc565b611116565b005b3480156104c057600080fd5b506104c96112ab565b6040516104d6919061449b565b60405180910390f35b3480156104eb57600080fd5b506104f46112cf565b60405161050191906144c5565b60405180910390f35b34801561051657600080fd5b5061051f6112d9565b60405161052c91906144c5565b60405180910390f35b34801561054157600080fd5b5061054a6112df565b60405161055791906144c5565b60405180910390f35b34801561056c57600080fd5b506105756112e5565b60405161058291906144c5565b60405180910390f35b34801561059757600080fd5b506105a06112eb565b6040516105ad91906144c5565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d891906144e0565b6112f1565b6040516105ea91906143b4565b60405180910390f35b3480156105ff57600080fd5b506106086113ca565b6040516106159190614542565b60405180910390f35b34801561062a57600080fd5b506106336113d0565b60405161064091906144c5565b60405180910390f35b34801561065557600080fd5b5061065e6113d6565b60405161066b91906143b4565b60405180910390f35b34801561068057600080fd5b5061069b600480360381019061069691906143cf565b6113e9565b005b3480156106a957600080fd5b506106b26114c4565b6040516106bf91906143b4565b60405180910390f35b3480156106d457600080fd5b506106dd61159a565b6040516106ea9190614579565b60405180910390f35b3480156106ff57600080fd5b5061071a60048036038101906107159190614365565b6115a3565b60405161072791906143b4565b60405180910390f35b34801561073c57600080fd5b50610745611656565b6040516107529190614542565b60405180910390f35b34801561076757600080fd5b5061077061167a565b60405161077d91906143b4565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a891906143cf565b61168d565b6040516107ba91906143b4565b60405180910390f35b3480156107cf57600080fd5b506107d86116e3565b6040516107e591906144c5565b60405180910390f35b3480156107fa57600080fd5b506108036116e9565b60405161081091906143b4565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b91906143cf565b6116fc565b60405161084d91906143b4565b60405180910390f35b34801561086257600080fd5b5061087d600480360381019061087891906143cf565b611752565b60405161088a91906144c5565b60405180910390f35b34801561089f57600080fd5b506108a861179a565b005b3480156108b657600080fd5b506108d160048036038101906108cc91906142ef565b6118f2565b005b3480156108df57600080fd5b506108e86119e4565b6040516108f59190614542565b60405180910390f35b34801561090a57600080fd5b50610913611a0a565b60405161092091906144c5565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190614594565b611a10565b005b34801561095e57600080fd5b50610967611b2a565b6040516109749190614542565b60405180910390f35b34801561098957600080fd5b50610992611b54565b60405161099f9190614542565b60405180910390f35b3480156109b457600080fd5b506109bd611b7a565b6040516109ca91906144c5565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f591906145e7565b611b80565b005b348015610a0857600080fd5b50610a11611c34565b604051610a1e9190614223565b60405180910390f35b348015610a3357600080fd5b50610a3c611cc6565b604051610a4991906144c5565b60405180910390f35b348015610a5e57600080fd5b50610a67611ccc565b604051610a7491906144c5565b60405180910390f35b348015610a8957600080fd5b50610a92611cd2565b604051610a9f91906144c5565b60405180910390f35b348015610ab457600080fd5b50610abd611cd8565b604051610aca91906144c5565b60405180910390f35b348015610adf57600080fd5b50610afa6004803603810190610af59190614365565b611cde565b604051610b0791906143b4565b60405180910390f35b348015610b1c57600080fd5b50610b25611dab565b604051610b3291906144c5565b60405180910390f35b348015610b4757600080fd5b50610b626004803603810190610b5d9190614365565b611db1565b604051610b6f91906143b4565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a91906143cf565b611dcf565b604051610bac91906143b4565b60405180910390f35b348015610bc157600080fd5b50610bca611def565b604051610bd791906143b4565b60405180910390f35b348015610bec57600080fd5b50610c076004803603810190610c0291906142ef565b611e02565b005b348015610c1557600080fd5b50610c306004803603810190610c2b9190614594565b611ef4565b005b348015610c3e57600080fd5b50610c4761200e565b604051610c5491906143b4565b60405180910390f35b348015610c6957600080fd5b50610c72612021565b604051610c7f91906144c5565b60405180910390f35b348015610c9457600080fd5b50610caf6004803603810190610caa91906143cf565b612027565b005b348015610cbd57600080fd5b50610cc6612102565b005b348015610cd457600080fd5b50610cef6004803603810190610cea9190614614565b6121d8565b604051610cfc91906143b4565b60405180910390f35b348015610d1157600080fd5b50610d1a6122e3565b604051610d2791906144c5565b60405180910390f35b348015610d3c57600080fd5b50610d576004803603810190610d529190614641565b6122e9565b604051610d6491906144c5565b60405180910390f35b348015610d7957600080fd5b50610d82612370565b604051610d8f91906144c5565b60405180910390f35b348015610da457600080fd5b50610dad612376565b604051610dba91906144c5565b60405180910390f35b348015610dcf57600080fd5b50610dea6004803603810190610de591906143cf565b61237c565b005b348015610df857600080fd5b50610e136004803603810190610e0e91906147c9565b612542565b005b348015610e2157600080fd5b50610e2a61266e565b604051610e3791906144c5565b60405180910390f35b348015610e4c57600080fd5b50610e55612674565b604051610e6291906144c5565b60405180910390f35b348015610e7757600080fd5b50610e926004803603810190610e8d91906143cf565b61267a565b604051610e9f91906143b4565b60405180910390f35b348015610eb457600080fd5b50610ecf6004803603810190610eca9190614614565b61269a565b604051610edc91906143b4565b60405180910390f35b606060038054610ef490614841565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2090614841565b8015610f6d5780601f10610f4257610100808354040283529160200191610f6d565b820191906000526020600020905b815481529060010190602001808311610f5057829003601f168201915b5050505050905090565b610f7f612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461100e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611005906148be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110749061492a565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110ec6110e5612953565b848461295b565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b61111e612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a4906148be565b60405180910390fd5b60018210156111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e8906149bc565b60405180910390fd5b670de0b6b3a76400006103e8836112066112cf565b6112109190614a0b565b61121a9190614a7c565b6112249190614a7c565b600881905550600181101561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590614b1f565b60405180910390fd5b670de0b6b3a76400006103e8826112836112cf565b61128d9190614a0b565b6112979190614a7c565b6112a19190614a7c565b600a819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b60006112fe848484612b24565b6113bf8461130a612953565b6113ba8560405180606001604052806028815260200161570c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611370612953565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138a09092919063ffffffff16565b61295b565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b6113f1612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611477906148be565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006114ce612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611554906148be565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b60006012905090565b600061164c6115b0612953565b8461164785600160006115c1612953565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390490919063ffffffff16565b61295b565b6001905092915050565b7f000000000000000000000000aed84cf0f0c27a261244960ba6b983305fee840a81565b601160009054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a2612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611828906148be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118fa612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611989576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611980906148be565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611a18612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e906148be565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611acf9190614b3f565b611ad99190614b3f565b60158190555060286015541115611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90614bbf565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611b88612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906148be565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611c4390614841565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6f90614841565b8015611cbc5780601f10611c9157610100808354040283529160200191611cbc565b820191906000526020600020905b815481529060010190602001808311611c9f57829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611da1611ceb612953565b84611d9c856040518060600160405280602581526020016157346025913960016000611d15612953565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138a09092919063ffffffff16565b61295b565b6001905092915050565b600e5481565b6000611dc5611dbe612953565b8484612b24565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611e0a612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e90906148be565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611efc612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f82906148be565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611fb39190614b3f565b611fbd9190614b3f565b60198190555060286019541115612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090614bbf565b60405180910390fd5b505050565b601460009054906101000a900460ff1681565b60085481565b61202f612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b5906148be565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61210a612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612190906148be565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006121e2612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612268906148be565b60405180910390fd5b60018211156122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90614c51565b60405180910390fd5b6064826122c06112cf565b6122ca9190614a0b565b6122d49190614a7c565b60098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b612384612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240a906148be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614ce3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61254a612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d0906148be565b60405180910390fd5b60005b815181101561266a576001602060008484815181106125fe576125fd614d03565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061266290614d32565b9150506125dc565b5050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006126a4612953565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a906148be565b60405180910390fd5b600f546010546127439190614b3f565b4211612784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277b90614dc6565b60405180910390fd5b6103e88211156127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c090614e58565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000aed84cf0f0c27a261244960ba6b983305fee840a6040518263ffffffff1660e01b815260040161282b9190614542565b602060405180830381865afa158015612848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286c9190614e8d565b90506000612710848361287f9190614a0b565b6128899190614a7c565b905060008111156128c2576128c17f000000000000000000000000aed84cf0f0c27a261244960ba6b983305fee840a61dead83613962565b5b60007f000000000000000000000000aed84cf0f0c27a261244960ba6b983305fee840a90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561292f57600080fd5b505af1158015612943573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c190614f2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3090614fbe565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b1791906144c5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8a90615050565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf9906150e2565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ca65750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9061514e565b60405180910390fd5b60008103612cfe57612cf983836000613962565b61389b565b601160009054906101000a900460ff16156133df57612d1b611b2a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d895750612d59611b2a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e155750600560149054906101000a900460ff16155b156133de57601160019054906101000a900460ff16612f2d57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ecf5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f235750602060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f2c57600080fd5b5b601460009054906101000a900460ff16156130f557612f4a611b2a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fd157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561302957507f000000000000000000000000aed84cf0f0c27a261244960ba6b983305fee840a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130f45743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a690615206565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131985750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561323f576008548111156131e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d990615298565b60405180910390fd5b600a546131ee83611752565b826131f99190614b3f565b111561323a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323190615304565b60405180910390fd5b6133dd565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132e25750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133315760085481111561332c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332390615396565b60405180910390fd5b6133dc565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133db57600a5461338e83611752565b826133999190614b3f565b11156133da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d190615304565b60405180910390fd5b5b5b5b5b5b60006133ea30611752565b90506000600954821015905080801561340f5750601160029054906101000a900460ff165b80156134285750600560149054906101000a900460ff16155b801561347e5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134d45750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561352a5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561356e576001600560146101000a81548160ff021916908315150217905550613552613bf5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136245750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561362e57600090505b6000811561388b57602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561369157506000601954115b15613750576064601954866136a69190614a0b565b6136b09190614a7c565b9050601954601b54826136c39190614a0b565b6136cd9190614a7c565b601e60008282546136de9190614b3f565b92505081905550601954601c54826136f69190614a0b565b6137009190614a7c565b601f60008282546137119190614b3f565b92505081905550601954601a54826137299190614a0b565b6137339190614a7c565b601d60008282546137449190614b3f565b92505081905550613867565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137ab57506000601554115b15613866576064601554866137c09190614a0b565b6137ca9190614a7c565b9050601554601754826137dd9190614a0b565b6137e79190614a7c565b601e60008282546137f89190614b3f565b92505081905550601554601854826138109190614a0b565b61381a9190614a7c565b601f600082825461382b9190614b3f565b92505081905550601554601654826138439190614a0b565b61384d9190614a7c565b601d600082825461385e9190614b3f565b925050819055505b5b600081111561387c5761387b873083613962565b5b808561388891906153b6565b94505b613896878787613962565b505050505b505050565b60008383111582906138e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138df9190614223565b60405180910390fd5b50600083856138f791906153b6565b9050809150509392505050565b60008082846139139190614b3f565b905083811015613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394f90615436565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c890615050565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a37906150e2565b60405180910390fd5b613a4b838383613e75565b613ab6816040518060600160405280602681526020016156e6602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138a09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b49816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613be891906144c5565b60405180910390a3505050565b6000613c0030611752565b90506000601f54601d54601e54613c179190614b3f565b613c219190614b3f565b9050600080831480613c335750600082145b15613c4057505050613e73565b6014600954613c4f9190614a0b565b831115613c68576014600954613c659190614a0b565b92505b6000600283601e5486613c7b9190614a0b565b613c859190614a7c565b613c8f9190614a7c565b905060008185613c9f91906153b6565b90506000479050613caf82613e7a565b60008147613cbd91906153b6565b9050600086601d5483613cd09190614a0b565b613cda9190614a7c565b9050600087601f5484613ced9190614a0b565b613cf79190614a7c565b90506000818385613d0891906153b6565b613d1291906153b6565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613d7290615487565b60006040518083038185875af1925050503d8060008114613daf576040519150601f19603f3d011682016040523d82523d6000602084013e613db4565b606091505b505080985050600087118015613dca5750600081115b15613dda57613dd987826140b7565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e2090615487565b60006040518083038185875af1925050503d8060008114613e5d576040519150601f19603f3d011682016040523d82523d6000602084013e613e62565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613e9757613e96614686565b5b604051908082528060200260200182016040528015613ec55781602001602082028036833780820191505090505b5090503081600081518110613edd57613edc614d03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa691906154b1565b81600181518110613fba57613fb9614d03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061401f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461295b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140819594939291906155d7565b600060405180830381600087803b15801561409b57600080fd5b505af11580156140af573d6000803e3d6000fd5b505050505050565b6140e2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461295b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161414996959493929190615631565b60606040518083038185885af1158015614167573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061418c9190615692565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141cd5780820151818401526020810190506141b2565b60008484015250505050565b6000601f19601f8301169050919050565b60006141f582614193565b6141ff818561419e565b935061420f8185602086016141af565b614218816141d9565b840191505092915050565b6000602082019050818103600083015261423d81846141ea565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061428482614259565b9050919050565b61429481614279565b811461429f57600080fd5b50565b6000813590506142b18161428b565b92915050565b60008115159050919050565b6142cc816142b7565b81146142d757600080fd5b50565b6000813590506142e9816142c3565b92915050565b600080604083850312156143065761430561424f565b5b6000614314858286016142a2565b9250506020614325858286016142da565b9150509250929050565b6000819050919050565b6143428161432f565b811461434d57600080fd5b50565b60008135905061435f81614339565b92915050565b6000806040838503121561437c5761437b61424f565b5b600061438a858286016142a2565b925050602061439b85828601614350565b9150509250929050565b6143ae816142b7565b82525050565b60006020820190506143c960008301846143a5565b92915050565b6000602082840312156143e5576143e461424f565b5b60006143f3848285016142a2565b91505092915050565b600080604083850312156144135761441261424f565b5b600061442185828601614350565b925050602061443285828601614350565b9150509250929050565b6000819050919050565b600061446161445c61445784614259565b61443c565b614259565b9050919050565b600061447382614446565b9050919050565b600061448582614468565b9050919050565b6144958161447a565b82525050565b60006020820190506144b0600083018461448c565b92915050565b6144bf8161432f565b82525050565b60006020820190506144da60008301846144b6565b92915050565b6000806000606084860312156144f9576144f861424f565b5b6000614507868287016142a2565b9350506020614518868287016142a2565b925050604061452986828701614350565b9150509250925092565b61453c81614279565b82525050565b60006020820190506145576000830184614533565b92915050565b600060ff82169050919050565b6145738161455d565b82525050565b600060208201905061458e600083018461456a565b92915050565b6000806000606084860312156145ad576145ac61424f565b5b60006145bb86828701614350565b93505060206145cc86828701614350565b92505060406145dd86828701614350565b9150509250925092565b6000602082840312156145fd576145fc61424f565b5b600061460b848285016142da565b91505092915050565b60006020828403121561462a5761462961424f565b5b600061463884828501614350565b91505092915050565b600080604083850312156146585761465761424f565b5b6000614666858286016142a2565b9250506020614677858286016142a2565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146be826141d9565b810181811067ffffffffffffffff821117156146dd576146dc614686565b5b80604052505050565b60006146f0614245565b90506146fc82826146b5565b919050565b600067ffffffffffffffff82111561471c5761471b614686565b5b602082029050602081019050919050565b600080fd5b600061474561474084614701565b6146e6565b905080838252602082019050602084028301858111156147685761476761472d565b5b835b81811015614791578061477d88826142a2565b84526020840193505060208101905061476a565b5050509392505050565b600082601f8301126147b0576147af614681565b5b81356147c0848260208601614732565b91505092915050565b6000602082840312156147df576147de61424f565b5b600082013567ffffffffffffffff8111156147fd576147fc614254565b5b6148098482850161479b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061485957607f821691505b60208210810361486c5761486b614812565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148a860208361419e565b91506148b382614872565b602082019050919050565b600060208201905081810360008301526148d78161489b565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b600061491460178361419e565b915061491f826148de565b602082019050919050565b6000602082019050818103600083015261494381614907565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e202e3125000000000000000000000000000000000000602082015250565b60006149a6602e8361419e565b91506149b18261494a565b604082019050919050565b600060208201905081810360008301526149d581614999565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a168261432f565b9150614a218361432f565b9250828202614a2f8161432f565b91508282048414831517614a4657614a456149dc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a878261432f565b9150614a928361432f565b925082614aa257614aa1614a4d565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f2e31250000000000000000000000000000000000000000000000000000000000602082015250565b6000614b0960238361419e565b9150614b1482614aad565b604082019050919050565b60006020820190508181036000830152614b3881614afc565b9050919050565b6000614b4a8261432f565b9150614b558361432f565b9250828201905080821115614b6d57614b6c6149dc565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614ba9601d8361419e565b9150614bb482614b73565b602082019050919050565b60006020820190508181036000830152614bd881614b9c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614c3b60328361419e565b9150614c4682614bdf565b604082019050919050565b60006020820190508181036000830152614c6a81614c2e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ccd60268361419e565b9150614cd882614c71565b604082019050919050565b60006020820190508181036000830152614cfc81614cc0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d3d8261432f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d6f57614d6e6149dc565b5b600182019050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614db060208361419e565b9150614dbb82614d7a565b602082019050919050565b60006020820190508181036000830152614ddf81614da3565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614e42602a8361419e565b9150614e4d82614de6565b604082019050919050565b60006020820190508181036000830152614e7181614e35565b9050919050565b600081519050614e8781614339565b92915050565b600060208284031215614ea357614ea261424f565b5b6000614eb184828501614e78565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f1660248361419e565b9150614f2182614eba565b604082019050919050565b60006020820190508181036000830152614f4581614f09565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa860228361419e565b9150614fb382614f4c565b604082019050919050565b60006020820190508181036000830152614fd781614f9b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061503a60258361419e565b915061504582614fde565b604082019050919050565b600060208201905081810360008301526150698161502d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150cc60238361419e565b91506150d782615070565b604082019050919050565b600060208201905081810360008301526150fb816150bf565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000615138600b8361419e565b915061514382615102565b602082019050919050565b600060208201905081810360008301526151678161512b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151f060498361419e565b91506151fb8261516e565b606082019050919050565b6000602082019050818103600083015261521f816151e3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061528260358361419e565b915061528d82615226565b604082019050919050565b600060208201905081810360008301526152b181615275565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152ee60138361419e565b91506152f9826152b8565b602082019050919050565b6000602082019050818103600083015261531d816152e1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061538060368361419e565b915061538b82615324565b604082019050919050565b600060208201905081810360008301526153af81615373565b9050919050565b60006153c18261432f565b91506153cc8361432f565b92508282039050818111156153e4576153e36149dc565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615420601b8361419e565b915061542b826153ea565b602082019050919050565b6000602082019050818103600083015261544f81615413565b9050919050565b600081905092915050565b50565b6000615471600083615456565b915061547c82615461565b600082019050919050565b600061549282615464565b9150819050919050565b6000815190506154ab8161428b565b92915050565b6000602082840312156154c7576154c661424f565b5b60006154d58482850161549c565b91505092915050565b6000819050919050565b60006155036154fe6154f9846154de565b61443c565b61432f565b9050919050565b615513816154e8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61554e81614279565b82525050565b60006155608383615545565b60208301905092915050565b6000602082019050919050565b600061558482615519565b61558e8185615524565b935061559983615535565b8060005b838110156155ca5781516155b18882615554565b97506155bc8361556c565b92505060018101905061559d565b5085935050505092915050565b600060a0820190506155ec60008301886144b6565b6155f9602083018761550a565b818103604083015261560b8186615579565b905061561a6060830185614533565b61562760808301846144b6565b9695505050505050565b600060c0820190506156466000830189614533565b61565360208301886144b6565b615660604083018761550a565b61566d606083018661550a565b61567a6080830185614533565b61568760a08301846144b6565b979650505050505050565b6000806000606084860312156156ab576156aa61424f565b5b60006156b986828701614e78565b93505060206156ca86828701614e78565b92505060406156db86828701614e78565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f8bfab23ac180f224f3af93a71ad435c8dfde47e1f5dacb38f4b778d1097d02464736f6c63430008130033

Deployed Bytecode Sourcemap

25098:15397:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7418:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32485:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9585:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26797:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30308:364;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25139:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8538:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25717:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25527:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26553:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26513;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10236:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25242:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25623:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25583:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32082:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29797:162;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8380:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11000:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25197:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25815:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32352:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26364:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25895:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29421:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8709:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21883:148;;;;;;;;;;;;;:::i;:::-;;30680:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25334:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26253;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31037:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21241:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25371:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26399:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30924:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7637:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26327:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25771:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26593:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26475:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11721:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25675:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9049:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27019:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25855:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31804:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31418:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26171:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25408:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32234:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29588:153;;;;;;;;;;;;;:::i;:::-;;30033:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26219:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9287:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25450:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26290:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22186:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29221:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26437:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25490:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26118:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39512:980;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7418:100;7472:13;7505:5;7498:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7418:100;:::o;32485:193::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32598:1:::1;32578:22;;:8;:22;;::::0;32570:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32664:6;32638:13;:23;32652:8;32638:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;32485:193:::0;;:::o;9585:169::-;9668:4;9685:39;9694:12;:10;:12::i;:::-;9708:7;9717:6;9685:8;:39::i;:::-;9742:4;9735:11;;9585:169;;;;:::o;26797:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30308:364::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30414:1:::1;30405:5;:10;;30397:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30531:4;30525;30517:5;30501:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:28;;;;:::i;:::-;30500:35;;;;:::i;:::-;30477:20;:58;;;;30564:1;30554:6;:11;;30546:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;30660:4;30654;30645:6;30629:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:29;;;;:::i;:::-;30628:36;;;;:::i;:::-;30616:9;:48;;;;30308:364:::0;;:::o;25139:51::-;;;:::o;8538:108::-;8599:7;8626:12;;8619:19;;8538:108;:::o;25717:47::-;;;;:::o;25527:36::-;;;;:::o;26553:33::-;;;;:::o;26513:::-;;;;:::o;10236:355::-;10376:4;10393:36;10403:6;10411:9;10422:6;10393:9;:36::i;:::-;10440:121;10449:6;10457:12;:10;:12::i;:::-;10471:89;10509:6;10471:89;;;;;;;;;;;;;;;;;:11;:19;10483:6;10471:19;;;;;;;;;;;;;;;:33;10491:12;:10;:12::i;:::-;10471:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10440:8;:121::i;:::-;10579:4;10572:11;;10236:355;;;;;:::o;25242:53::-;25288:6;25242:53;:::o;25623:45::-;;;;:::o;25583:33::-;;;;;;;;;;;;;:::o;32082:140::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32196:18:::1;32178:15;;:36;;;;;;;;;;;;;;;;;;32082:140:::0;:::o;29797:162::-;29852:4;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29885:5:::1;29868:14;;:22;;;;;;;;;;;;;;;;;;29924:5;29901:20;;:28;;;;;;;;;;;;;;;;;;29947:4;29940:11;;29797:162:::0;:::o;8380:93::-;8438:5;8463:2;8456:9;;8380:93;:::o;11000:218::-;11088:4;11105:83;11114:12;:10;:12::i;:::-;11128:7;11137:50;11176:10;11137:11;:25;11149:12;:10;:12::i;:::-;11137:25;;;;;;;;;;;;;;;:34;11163:7;11137:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11105:8;:83::i;:::-;11206:4;11199:11;;11000:218;;;;:::o;25197:38::-;;;:::o;25815:33::-;;;;;;;;;;;;;:::o;32352:125::-;32417:4;32441:19;:28;32461:7;32441:28;;;;;;;;;;;;;;;;;;;;;;;;;32434:35;;32352:125;;;:::o;26364:28::-;;;;:::o;25895:31::-;;;;;;;;;;;;;:::o;29421:111::-;29482:4;29506:9;:18;29516:7;29506:18;;;;;;;;;;;;;;;;;;;;;;;;;29499:25;;29421:111;;;:::o;8709:127::-;8783:7;8810:9;:18;8820:7;8810:18;;;;;;;;;;;;;;;;8803:25;;8709:127;;;:::o;21883:148::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21990:1:::1;21953:40;;21974:6;;;;;;;;;;;21953:40;;;;;;;;;;;;22021:1;22004:6;;:19;;;;;;;;;;;;;;;;;;21883:148::o:0;30680:144::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30812:4:::1;30770:31;:39;30802:6;30770:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30680:144:::0;;:::o;25334:30::-;;;;;;;;;;;;;:::o;26253:::-;;;;:::o;31037:369::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31171:13:::1;31153:15;:31;;;;31213:13;31195:15;:31;;;;31249:7;31237:9;:19;;;;31318:9;;31300:15;;31282;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;31267:12;:60;;;;31362:2;31346:12;;:18;;31338:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31037:369:::0;;;:::o;21241:79::-;21279:7;21306:6;;;;;;;;;;;21299:13;;21241:79;:::o;25371:24::-;;;;;;;;;;;;;:::o;26399:31::-;;;;:::o;30924:101::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31010:7:::1;30996:11;;:21;;;;;;;;;;;;;;;;;;30924:101:::0;:::o;7637:104::-;7693:13;7726:7;7719:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7637:104;:::o;26327:24::-;;;;:::o;25771:35::-;;;;:::o;26593:27::-;;;;:::o;26475:25::-;;;;:::o;11721:269::-;11814:4;11831:129;11840:12;:10;:12::i;:::-;11854:7;11863:96;11902:15;11863:96;;;;;;;;;;;;;;;;;:11;:25;11875:12;:10;:12::i;:::-;11863:25;;;;;;;;;;;;;;;:34;11889:7;11863:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11831:8;:129::i;:::-;11978:4;11971:11;;11721:269;;;;:::o;25675:29::-;;;;:::o;9049:175::-;9135:4;9152:42;9162:12;:10;:12::i;:::-;9176:9;9187:6;9152:9;:42::i;:::-;9212:4;9205:11;;9049:175;;;;:::o;27019:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25855:33::-;;;;;;;;;;;;;:::o;31804:132::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31920:8:::1;31889:19;:28;31909:7;31889:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31804:132:::0;;:::o;31418:378::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31554:13:::1;31535:16;:32;;;;31597:13;31578:16;:32;;;;31634:7;31621:10;:20;;;;31706:10;;31687:16;;31668;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;31652:13;:64;;;;31752:2;31735:13;;:19;;31727:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31418:378:::0;;;:::o;26171:39::-;;;;;;;;;;;;;:::o;25408:35::-;;;;:::o;32234:110::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32327:9:::1;32315;;:21;;;;;;;;;;;;;;;;;;32234:110:::0;:::o;29588:153::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29657:4:::1;29641:13;;:20;;;;;;;;;;;;;;;;;;29686:4;29672:11;;:18;;;;;;;;;;;;;;;;;;29718:15;29701:14;:32;;;;29588:153::o:0;30033:263::-;30114:4;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30150:1:::1;30137:9;:14;;30129:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;30265:3;30253:9;30237:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:31;;;;:::i;:::-;30216:18;:52;;;;30285:4;30278:11;;30033:263:::0;;;:::o;26219:27::-;;;;:::o;9287:151::-;9376:7;9403:11;:18;9415:5;9403:18;;;;;;;;;;;;;;;:27;9422:7;9403:27;;;;;;;;;;;;;;;;9396:34;;9287:151;;;;:::o;25450:33::-;;;;:::o;26290:30::-;;;;:::o;22186:244::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22295:1:::1;22275:22;;:8;:22;;::::0;22267:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22385:8;22356:38;;22377:6;;;;;;;;;;;22356:38;;;;;;;;;;;;22414:8;22405:6;;:17;;;;;;;;;;;;;;;;;;22186:244:::0;:::o;29221:192::-;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29305:9:::1;29300:106;29324:10;:17;29320:1;:21;29300:106;;;29390:4;29363:9;:24;29373:10;29384:1;29373:13;;;;;;;;:::i;:::-;;;;;;;;29363:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;29343:3;;;;;:::i;:::-;;;;29300:106;;;;29221:192:::0;:::o;26437:31::-;;;;:::o;25490:24::-;;;;:::o;26118:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;39512:980::-;39596:4;21463:12;:10;:12::i;:::-;21453:22;;:6;;;;;;;;;;;:22;;;21445:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39661:19:::1;;39638:20;;:42;;;;:::i;:::-;39620:15;:60;39612:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;39748:4;39737:7;:15;;39729:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39833:15;39810:20;:38;;;;39911:28;39942:4;:14;;;39957:13;39942:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39911:60;;40029:20;40083:5;40075:7;40052:20;:30;;;;:::i;:::-;:36;;;;:::i;:::-;40029:59;;40216:1;40201:12;:16;40197:109;;;40233:61;40249:13;40272:6;40281:12;40233:15;:61::i;:::-;40197:109;40389:19;40426:13;40389:51;;40451:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40480:4;40473:11;;;;;39512:980:::0;;;:::o;2819:98::-;2872:7;2899:10;2892:17;;2819:98;:::o;14907:380::-;15060:1;15043:19;;:5;:19;;;15035:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15141:1;15122:21;;:7;:21;;;15114:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15225:6;15195:11;:18;15207:5;15195:18;;;;;;;;;;;;;;;:27;15214:7;15195:27;;;;;;;;;;;;;;;:36;;;;15263:7;15247:32;;15256:5;15247:32;;;15272:6;15247:32;;;;;;:::i;:::-;;;;;;;;14907:380;;;:::o;32686:4143::-;32834:1;32818:18;;:4;:18;;;32810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32911:1;32897:16;;:2;:16;;;32889:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32973:13;:19;32987:4;32973:19;;;;;;;;;;;;;;;;;;;;;;;;;32972:20;:42;;;;;32997:13;:17;33011:2;32997:17;;;;;;;;;;;;;;;;;;;;;;;;;32996:18;32972:42;32964:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33054:1;33044:6;:11;33041:92;;33072:28;33088:4;33094:2;33098:1;33072:15;:28::i;:::-;33115:7;;33041:92;33156:14;;;;;;;;;;;33153:1820;;;33216:7;:5;:7::i;:::-;33208:15;;:4;:15;;;;:49;;;;;33250:7;:5;:7::i;:::-;33244:13;;:2;:13;;;;33208:49;:86;;;;;33292:1;33278:16;;:2;:16;;;;33208:86;:128;;;;;33329:6;33315:21;;:2;:21;;;;33208:128;:158;;;;;33358:8;;;;;;;;;;;33357:9;33208:158;33186:1776;;;33404:13;;;;;;;;;;;33400:127;;33449:9;:15;33459:4;33449:15;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;33468:9;:13;33478:2;33468:13;;;;;;;;;;;;;;;;;;;;;;;;;33449:32;:57;;;;33485:9;:21;33495:10;33485:21;;;;;;;;;;;;;;;;;;;;;;;;;33449:57;33441:66;;;;;;33400:127;33685:20;;;;;;;;;;;33681:423;;;33739:7;:5;:7::i;:::-;33733:13;;:2;:13;;;;:47;;;;;33764:15;33750:30;;:2;:30;;;;33733:47;:79;;;;;33798:13;33784:28;;:2;:28;;;;33733:79;33729:356;;;33890:12;33848:28;:39;33877:9;33848:39;;;;;;;;;;;;;;;;:54;33840:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34049:12;34007:28;:39;34036:9;34007:39;;;;;;;;;;;;;;;:54;;;;33729:356;33681:423;34173:25;:31;34199:4;34173:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;34209:31;:35;34241:2;34209:35;;;;;;;;;;;;;;;;;;;;;;;;;34208:36;34173:71;34169:778;;;34291:20;;34281:6;:30;;34273:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;34430:9;;34413:13;34423:2;34413:9;:13::i;:::-;34404:6;:22;;;;:::i;:::-;:35;;34396:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34169:778;;;34557:25;:29;34583:2;34557:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;34591:31;:37;34623:4;34591:37;;;;;;;;;;;;;;;;;;;;;;;;;34590:38;34557:71;34553:394;;;34675:20;;34665:6;:30;;34657:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;34553:394;;;34801:31;:35;34833:2;34801:35;;;;;;;;;;;;;;;;;;;;;;;;;34797:150;;34894:9;;34877:13;34887:2;34877:9;:13::i;:::-;34868:6;:22;;;;:::i;:::-;:35;;34860:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34797:150;34553:394;34169:778;33186:1776;33153:1820;34987:28;35018:24;35036:4;35018:9;:24::i;:::-;34987:55;;35063:12;35102:18;;35078:20;:42;;35063:57;;35151:7;:35;;;;;35175:11;;;;;;;;;;;35151:35;:61;;;;;35204:8;;;;;;;;;;;35203:9;35151:61;:110;;;;;35230:25;:31;35256:4;35230:31;;;;;;;;;;;;;;;;;;;;;;;;;35229:32;35151:110;:153;;;;;35279:19;:25;35299:4;35279:25;;;;;;;;;;;;;;;;;;;;;;;;;35278:26;35151:153;:194;;;;;35322:19;:23;35342:2;35322:23;;;;;;;;;;;;;;;;;;;;;;;;;35321:24;35151:194;35133:338;;;35383:4;35372:8;;:15;;;;;;;;;;;;;;;;;;35416:10;:8;:10::i;:::-;35454:5;35443:8;;:16;;;;;;;;;;;;;;;;;;35133:338;35483:12;35499:8;;;;;;;;;;;35498:9;35483:24;;35608:19;:25;35628:4;35608:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35637:19;:23;35657:2;35637:23;;;;;;;;;;;;;;;;;;;;;;;;;35608:52;35605:99;;;35687:5;35677:15;;35605:99;35724:12;35828:7;35825:951;;;35879:25;:29;35905:2;35879:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;35928:1;35912:13;;:17;35879:50;35875:732;;;35979:3;35965:13;;35956:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;35949:33;;36049:13;;36030:16;;36023:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;36001:18;;:61;;;;;;;:::i;:::-;;;;;;;;36117:13;;36104:10;;36097:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;36081:12;;:49;;;;;;;:::i;:::-;;;;;;;;36197:13;;36178:16;;36171:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;36149:18;;:61;;;;;;;:::i;:::-;;;;;;;;35875:732;;;36271:25;:31;36297:4;36271:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36321:1;36306:12;;:16;36271:51;36268:339;;;36369:3;36356:12;;36347:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;36340:32;;36435:12;;36417:15;;36410:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;36388:18;;:59;;;;;;;:::i;:::-;;;;;;;;36501:12;;36489:9;;36482:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;36466:12;;:47;;;;;;;:::i;:::-;;;;;;;;36579:12;;36561:15;;36554:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;36532:18;;:59;;;;;;;:::i;:::-;;;;;;;;36268:339;35875:732;36645:1;36638:4;:8;36635:93;;;36670:42;36686:4;36700;36707;36670:15;:42::i;:::-;36635:93;36760:4;36750:14;;;;;:::i;:::-;;;35825:951;36788:33;36804:4;36810:2;36814:6;36788:15;:33::i;:::-;32799:4030;;;;32686:4143;;;;:::o;17188:192::-;17274:7;17307:1;17302;:6;;17310:12;17294:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17334:9;17350:1;17346;:5;;;;:::i;:::-;17334:17;;17371:1;17364:8;;;17188:192;;;;;:::o;16285:181::-;16343:7;16363:9;16379:1;16375;:5;;;;:::i;:::-;16363:17;;16404:1;16399;:6;;16391:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16457:1;16450:8;;;16285:181;;;;:::o;12480:573::-;12638:1;12620:20;;:6;:20;;;12612:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12722:1;12701:23;;:9;:23;;;12693:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12777:47;12798:6;12806:9;12817:6;12777:20;:47::i;:::-;12857:71;12879:6;12857:71;;;;;;;;;;;;;;;;;:9;:17;12867:6;12857:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12837:9;:17;12847:6;12837:17;;;;;;;;;;;;;;;:91;;;;12962:32;12987:6;12962:9;:20;12972:9;12962:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12939:9;:20;12949:9;12939:20;;;;;;;;;;;;;;;:55;;;;13027:9;13010:35;;13019:6;13010:35;;;13038:6;13010:35;;;;;;:::i;:::-;;;;;;;;12480:573;;;:::o;37981:1523::-;38020:23;38046:24;38064:4;38046:9;:24::i;:::-;38020:50;;38081:25;38151:12;;38130:18;;38109;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;38081:82;;38174:12;38229:1;38210:15;:20;:46;;;;38255:1;38234:17;:22;38210:46;38207:60;;;38259:7;;;;;38207:60;38321:2;38300:18;;:23;;;;:::i;:::-;38282:15;:41;38279:111;;;38376:2;38355:18;;:23;;;;:::i;:::-;38337:41;;38279:111;38459:23;38544:1;38524:17;38503:18;;38485:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;38459:86;;38556:26;38603:15;38585;:33;;;;:::i;:::-;38556:62;;38639:25;38667:21;38639:49;;38701:36;38718:18;38701:16;:36::i;:::-;38759:18;38804:17;38780:21;:41;;;;:::i;:::-;38759:62;;38842:23;38900:17;38881:18;;38868:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;38842:75;;38928:17;38974;38961:12;;38948:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;38928:63;;39012:23;39069:9;39051:15;39038:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;39012:66;;39120:1;39099:18;:22;;;;39153:1;39132:18;:22;;;;39180:1;39165:12;:16;;;;39223:9;;;;;;;;;;;39215:23;;39246:9;39215:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39202:58;;;;;39302:1;39284:15;:19;:42;;;;;39325:1;39307:15;:19;39284:42;39281:119;;;39342:46;39355:15;39372;39342:12;:46::i;:::-;39281:119;39441:15;;;;;;;;;;;39433:29;;39470:21;39433:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39420:76;;;;;38009:1495;;;;;;;;;;37981:1523;:::o;15890:125::-;;;;:::o;36837:601::-;36965:21;37003:1;36989:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36965:40;;37034:4;37016;37021:1;37016:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37060:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37050:4;37055:1;37050:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37095:62;37112:4;37127:15;37145:11;37095:8;:62::i;:::-;37196:15;:66;;;37277:11;37303:1;37347:4;37374;37394:15;37196:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36892:546;36837:601;:::o;37456:517::-;37604:62;37621:4;37636:15;37654:11;37604:8;:62::i;:::-;37709:15;:31;;;37748:9;37781:4;37801:11;37827:1;37870;25288:6;37939:15;37709:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37456:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:90::-;2217:7;2260:5;2253:13;2246:21;2235:32;;2183:90;;;:::o;2279:116::-;2349:21;2364:5;2349:21;:::i;:::-;2342:5;2339:32;2329:60;;2385:1;2382;2375:12;2329:60;2279:116;:::o;2401:133::-;2444:5;2482:6;2469:20;2460:29;;2498:30;2522:5;2498:30;:::i;:::-;2401:133;;;;:::o;2540:468::-;2605:6;2613;2662:2;2650:9;2641:7;2637:23;2633:32;2630:119;;;2668:79;;:::i;:::-;2630:119;2788:1;2813:53;2858:7;2849:6;2838:9;2834:22;2813:53;:::i;:::-;2803:63;;2759:117;2915:2;2941:50;2983:7;2974:6;2963:9;2959:22;2941:50;:::i;:::-;2931:60;;2886:115;2540:468;;;;;:::o;3014:77::-;3051:7;3080:5;3069:16;;3014:77;;;:::o;3097:122::-;3170:24;3188:5;3170:24;:::i;:::-;3163:5;3160:35;3150:63;;3209:1;3206;3199:12;3150:63;3097:122;:::o;3225:139::-;3271:5;3309:6;3296:20;3287:29;;3325:33;3352:5;3325:33;:::i;:::-;3225:139;;;;:::o;3370:474::-;3438:6;3446;3495:2;3483:9;3474:7;3470:23;3466:32;3463:119;;;3501:79;;:::i;:::-;3463:119;3621:1;3646:53;3691:7;3682:6;3671:9;3667:22;3646:53;:::i;:::-;3636:63;;3592:117;3748:2;3774:53;3819:7;3810:6;3799:9;3795:22;3774:53;:::i;:::-;3764:63;;3719:118;3370:474;;;;;:::o;3850:109::-;3931:21;3946:5;3931:21;:::i;:::-;3926:3;3919:34;3850:109;;:::o;3965:210::-;4052:4;4090:2;4079:9;4075:18;4067:26;;4103:65;4165:1;4154:9;4150:17;4141:6;4103:65;:::i;:::-;3965:210;;;;:::o;4181:329::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:474::-;4584:6;4592;4641:2;4629:9;4620:7;4616:23;4612:32;4609:119;;;4647:79;;:::i;:::-;4609:119;4767:1;4792:53;4837:7;4828:6;4817:9;4813:22;4792:53;:::i;:::-;4782:63;;4738:117;4894:2;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4865:118;4516:474;;;;;:::o;4996:60::-;5024:3;5045:5;5038:12;;4996:60;;;:::o;5062:142::-;5112:9;5145:53;5163:34;5172:24;5190:5;5172:24;:::i;:::-;5163:34;:::i;:::-;5145:53;:::i;:::-;5132:66;;5062:142;;;:::o;5210:126::-;5260:9;5293:37;5324:5;5293:37;:::i;:::-;5280:50;;5210:126;;;:::o;5342:153::-;5419:9;5452:37;5483:5;5452:37;:::i;:::-;5439:50;;5342:153;;;:::o;5501:185::-;5615:64;5673:5;5615:64;:::i;:::-;5610:3;5603:77;5501:185;;:::o;5692:276::-;5812:4;5850:2;5839:9;5835:18;5827:26;;5863:98;5958:1;5947:9;5943:17;5934:6;5863:98;:::i;:::-;5692:276;;;;:::o;5974:118::-;6061:24;6079:5;6061:24;:::i;:::-;6056:3;6049:37;5974:118;;:::o;6098:222::-;6191:4;6229:2;6218:9;6214:18;6206:26;;6242:71;6310:1;6299:9;6295:17;6286:6;6242:71;:::i;:::-;6098:222;;;;:::o;6326:619::-;6403:6;6411;6419;6468:2;6456:9;6447:7;6443:23;6439:32;6436:119;;;6474:79;;:::i;:::-;6436:119;6594:1;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6565:117;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6849:2;6875:53;6920:7;6911:6;6900:9;6896:22;6875:53;:::i;:::-;6865:63;;6820:118;6326:619;;;;;:::o;6951:118::-;7038:24;7056:5;7038:24;:::i;:::-;7033:3;7026:37;6951:118;;:::o;7075:222::-;7168:4;7206:2;7195:9;7191:18;7183:26;;7219:71;7287:1;7276:9;7272:17;7263:6;7219:71;:::i;:::-;7075:222;;;;:::o;7303:86::-;7338:7;7378:4;7371:5;7367:16;7356:27;;7303:86;;;:::o;7395:112::-;7478:22;7494:5;7478:22;:::i;:::-;7473:3;7466:35;7395:112;;:::o;7513:214::-;7602:4;7640:2;7629:9;7625:18;7617:26;;7653:67;7717:1;7706:9;7702:17;7693:6;7653:67;:::i;:::-;7513:214;;;;:::o;7733:619::-;7810:6;7818;7826;7875:2;7863:9;7854:7;7850:23;7846:32;7843:119;;;7881:79;;:::i;:::-;7843:119;8001:1;8026:53;8071:7;8062:6;8051:9;8047:22;8026:53;:::i;:::-;8016:63;;7972:117;8128:2;8154:53;8199:7;8190:6;8179:9;8175:22;8154:53;:::i;:::-;8144:63;;8099:118;8256:2;8282:53;8327:7;8318:6;8307:9;8303:22;8282:53;:::i;:::-;8272:63;;8227:118;7733:619;;;;;:::o;8358:323::-;8414:6;8463:2;8451:9;8442:7;8438:23;8434:32;8431:119;;;8469:79;;:::i;:::-;8431:119;8589:1;8614:50;8656:7;8647:6;8636:9;8632:22;8614:50;:::i;:::-;8604:60;;8560:114;8358:323;;;;:::o;8687:329::-;8746:6;8795:2;8783:9;8774:7;8770:23;8766:32;8763:119;;;8801:79;;:::i;:::-;8763:119;8921:1;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8892:117;8687:329;;;;:::o;9022:474::-;9090:6;9098;9147:2;9135:9;9126:7;9122:23;9118:32;9115:119;;;9153:79;;:::i;:::-;9115:119;9273:1;9298:53;9343:7;9334:6;9323:9;9319:22;9298:53;:::i;:::-;9288:63;;9244:117;9400:2;9426:53;9471:7;9462:6;9451:9;9447:22;9426:53;:::i;:::-;9416:63;;9371:118;9022:474;;;;;:::o;9502:117::-;9611:1;9608;9601:12;9625:180;9673:77;9670:1;9663:88;9770:4;9767:1;9760:15;9794:4;9791:1;9784:15;9811:281;9894:27;9916:4;9894:27;:::i;:::-;9886:6;9882:40;10024:6;10012:10;10009:22;9988:18;9976:10;9973:34;9970:62;9967:88;;;10035:18;;:::i;:::-;9967:88;10075:10;10071:2;10064:22;9854:238;9811:281;;:::o;10098:129::-;10132:6;10159:20;;:::i;:::-;10149:30;;10188:33;10216:4;10208:6;10188:33;:::i;:::-;10098:129;;;:::o;10233:311::-;10310:4;10400:18;10392:6;10389:30;10386:56;;;10422:18;;:::i;:::-;10386:56;10472:4;10464:6;10460:17;10452:25;;10532:4;10526;10522:15;10514:23;;10233:311;;;:::o;10550:117::-;10659:1;10656;10649:12;10690:710;10786:5;10811:81;10827:64;10884:6;10827:64;:::i;:::-;10811:81;:::i;:::-;10802:90;;10912:5;10941:6;10934:5;10927:21;10975:4;10968:5;10964:16;10957:23;;11028:4;11020:6;11016:17;11008:6;11004:30;11057:3;11049:6;11046:15;11043:122;;;11076:79;;:::i;:::-;11043:122;11191:6;11174:220;11208:6;11203:3;11200:15;11174:220;;;11283:3;11312:37;11345:3;11333:10;11312:37;:::i;:::-;11307:3;11300:50;11379:4;11374:3;11370:14;11363:21;;11250:144;11234:4;11229:3;11225:14;11218:21;;11174:220;;;11178:21;10792:608;;10690:710;;;;;:::o;11423:370::-;11494:5;11543:3;11536:4;11528:6;11524:17;11520:27;11510:122;;11551:79;;:::i;:::-;11510:122;11668:6;11655:20;11693:94;11783:3;11775:6;11768:4;11760:6;11756:17;11693:94;:::i;:::-;11684:103;;11500:293;11423:370;;;;:::o;11799:539::-;11883:6;11932:2;11920:9;11911:7;11907:23;11903:32;11900:119;;;11938:79;;:::i;:::-;11900:119;12086:1;12075:9;12071:17;12058:31;12116:18;12108:6;12105:30;12102:117;;;12138:79;;:::i;:::-;12102:117;12243:78;12313:7;12304:6;12293:9;12289:22;12243:78;:::i;:::-;12233:88;;12029:302;11799:539;;;;:::o;12344:180::-;12392:77;12389:1;12382:88;12489:4;12486:1;12479:15;12513:4;12510:1;12503:15;12530:320;12574:6;12611:1;12605:4;12601:12;12591:22;;12658:1;12652:4;12648:12;12679:18;12669:81;;12735:4;12727:6;12723:17;12713:27;;12669:81;12797:2;12789:6;12786:14;12766:18;12763:38;12760:84;;12816:18;;:::i;:::-;12760:84;12581:269;12530:320;;;:::o;12856:182::-;12996:34;12992:1;12984:6;12980:14;12973:58;12856:182;:::o;13044:366::-;13186:3;13207:67;13271:2;13266:3;13207:67;:::i;:::-;13200:74;;13283:93;13372:3;13283:93;:::i;:::-;13401:2;13396:3;13392:12;13385:19;;13044:366;;;:::o;13416:419::-;13582:4;13620:2;13609:9;13605:18;13597:26;;13669:9;13663:4;13659:20;13655:1;13644:9;13640:17;13633:47;13697:131;13823:4;13697:131;:::i;:::-;13689:139;;13416:419;;;:::o;13841:173::-;13981:25;13977:1;13969:6;13965:14;13958:49;13841:173;:::o;14020:366::-;14162:3;14183:67;14247:2;14242:3;14183:67;:::i;:::-;14176:74;;14259:93;14348:3;14259:93;:::i;:::-;14377:2;14372:3;14368:12;14361:19;;14020:366;;;:::o;14392:419::-;14558:4;14596:2;14585:9;14581:18;14573:26;;14645:9;14639:4;14635:20;14631:1;14620:9;14616:17;14609:47;14673:131;14799:4;14673:131;:::i;:::-;14665:139;;14392:419;;;:::o;14817:233::-;14957:34;14953:1;14945:6;14941:14;14934:58;15026:16;15021:2;15013:6;15009:15;15002:41;14817:233;:::o;15056:366::-;15198:3;15219:67;15283:2;15278:3;15219:67;:::i;:::-;15212:74;;15295:93;15384:3;15295:93;:::i;:::-;15413:2;15408:3;15404:12;15397:19;;15056:366;;;:::o;15428:419::-;15594:4;15632:2;15621:9;15617:18;15609:26;;15681:9;15675:4;15671:20;15667:1;15656:9;15652:17;15645:47;15709:131;15835:4;15709:131;:::i;:::-;15701:139;;15428:419;;;:::o;15853:180::-;15901:77;15898:1;15891:88;15998:4;15995:1;15988:15;16022:4;16019:1;16012:15;16039:410;16079:7;16102:20;16120:1;16102:20;:::i;:::-;16097:25;;16136:20;16154:1;16136:20;:::i;:::-;16131:25;;16191:1;16188;16184:9;16213:30;16231:11;16213:30;:::i;:::-;16202:41;;16392:1;16383:7;16379:15;16376:1;16373:22;16353:1;16346:9;16326:83;16303:139;;16422:18;;:::i;:::-;16303:139;16087:362;16039:410;;;;:::o;16455:180::-;16503:77;16500:1;16493:88;16600:4;16597:1;16590:15;16624:4;16621:1;16614:15;16641:185;16681:1;16698:20;16716:1;16698:20;:::i;:::-;16693:25;;16732:20;16750:1;16732:20;:::i;:::-;16727:25;;16771:1;16761:35;;16776:18;;:::i;:::-;16761:35;16818:1;16815;16811:9;16806:14;;16641:185;;;;:::o;16832:222::-;16972:34;16968:1;16960:6;16956:14;16949:58;17041:5;17036:2;17028:6;17024:15;17017:30;16832:222;:::o;17060:366::-;17202:3;17223:67;17287:2;17282:3;17223:67;:::i;:::-;17216:74;;17299:93;17388:3;17299:93;:::i;:::-;17417:2;17412:3;17408:12;17401:19;;17060:366;;;:::o;17432:419::-;17598:4;17636:2;17625:9;17621:18;17613:26;;17685:9;17679:4;17675:20;17671:1;17660:9;17656:17;17649:47;17713:131;17839:4;17713:131;:::i;:::-;17705:139;;17432:419;;;:::o;17857:191::-;17897:3;17916:20;17934:1;17916:20;:::i;:::-;17911:25;;17950:20;17968:1;17950:20;:::i;:::-;17945:25;;17993:1;17990;17986:9;17979:16;;18014:3;18011:1;18008:10;18005:36;;;18021:18;;:::i;:::-;18005:36;17857:191;;;;:::o;18054:179::-;18194:31;18190:1;18182:6;18178:14;18171:55;18054:179;:::o;18239:366::-;18381:3;18402:67;18466:2;18461:3;18402:67;:::i;:::-;18395:74;;18478:93;18567:3;18478:93;:::i;:::-;18596:2;18591:3;18587:12;18580:19;;18239:366;;;:::o;18611:419::-;18777:4;18815:2;18804:9;18800:18;18792:26;;18864:9;18858:4;18854:20;18850:1;18839:9;18835:17;18828:47;18892:131;19018:4;18892:131;:::i;:::-;18884:139;;18611:419;;;:::o;19036:237::-;19176:34;19172:1;19164:6;19160:14;19153:58;19245:20;19240:2;19232:6;19228:15;19221:45;19036:237;:::o;19279:366::-;19421:3;19442:67;19506:2;19501:3;19442:67;:::i;:::-;19435:74;;19518:93;19607:3;19518:93;:::i;:::-;19636:2;19631:3;19627:12;19620:19;;19279:366;;;:::o;19651:419::-;19817:4;19855:2;19844:9;19840:18;19832:26;;19904:9;19898:4;19894:20;19890:1;19879:9;19875:17;19868:47;19932:131;20058:4;19932:131;:::i;:::-;19924:139;;19651:419;;;:::o;20076:225::-;20216:34;20212:1;20204:6;20200:14;20193:58;20285:8;20280:2;20272:6;20268:15;20261:33;20076:225;:::o;20307:366::-;20449:3;20470:67;20534:2;20529:3;20470:67;:::i;:::-;20463:74;;20546:93;20635:3;20546:93;:::i;:::-;20664:2;20659:3;20655:12;20648:19;;20307:366;;;:::o;20679:419::-;20845:4;20883:2;20872:9;20868:18;20860:26;;20932:9;20926:4;20922:20;20918:1;20907:9;20903:17;20896:47;20960:131;21086:4;20960:131;:::i;:::-;20952:139;;20679:419;;;:::o;21104:180::-;21152:77;21149:1;21142:88;21249:4;21246:1;21239:15;21273:4;21270:1;21263:15;21290:233;21329:3;21352:24;21370:5;21352:24;:::i;:::-;21343:33;;21398:66;21391:5;21388:77;21385:103;;21468:18;;:::i;:::-;21385:103;21515:1;21508:5;21504:13;21497:20;;21290:233;;;:::o;21529:182::-;21669:34;21665:1;21657:6;21653:14;21646:58;21529:182;:::o;21717:366::-;21859:3;21880:67;21944:2;21939:3;21880:67;:::i;:::-;21873:74;;21956:93;22045:3;21956:93;:::i;:::-;22074:2;22069:3;22065:12;22058:19;;21717:366;;;:::o;22089:419::-;22255:4;22293:2;22282:9;22278:18;22270:26;;22342:9;22336:4;22332:20;22328:1;22317:9;22313:17;22306:47;22370:131;22496:4;22370:131;:::i;:::-;22362:139;;22089:419;;;:::o;22514:229::-;22654:34;22650:1;22642:6;22638:14;22631:58;22723:12;22718:2;22710:6;22706:15;22699:37;22514:229;:::o;22749:366::-;22891:3;22912:67;22976:2;22971:3;22912:67;:::i;:::-;22905:74;;22988:93;23077:3;22988:93;:::i;:::-;23106:2;23101:3;23097:12;23090:19;;22749:366;;;:::o;23121:419::-;23287:4;23325:2;23314:9;23310:18;23302:26;;23374:9;23368:4;23364:20;23360:1;23349:9;23345:17;23338:47;23402:131;23528:4;23402:131;:::i;:::-;23394:139;;23121:419;;;:::o;23546:143::-;23603:5;23634:6;23628:13;23619:22;;23650:33;23677:5;23650:33;:::i;:::-;23546:143;;;;:::o;23695:351::-;23765:6;23814:2;23802:9;23793:7;23789:23;23785:32;23782:119;;;23820:79;;:::i;:::-;23782:119;23940:1;23965:64;24021:7;24012:6;24001:9;23997:22;23965:64;:::i;:::-;23955:74;;23911:128;23695:351;;;;:::o;24052:223::-;24192:34;24188:1;24180:6;24176:14;24169:58;24261:6;24256:2;24248:6;24244:15;24237:31;24052:223;:::o;24281:366::-;24423:3;24444:67;24508:2;24503:3;24444:67;:::i;:::-;24437:74;;24520:93;24609:3;24520:93;:::i;:::-;24638:2;24633:3;24629:12;24622:19;;24281:366;;;:::o;24653:419::-;24819:4;24857:2;24846:9;24842:18;24834:26;;24906:9;24900:4;24896:20;24892:1;24881:9;24877:17;24870:47;24934:131;25060:4;24934:131;:::i;:::-;24926:139;;24653:419;;;:::o;25078:221::-;25218:34;25214:1;25206:6;25202:14;25195:58;25287:4;25282:2;25274:6;25270:15;25263:29;25078:221;:::o;25305:366::-;25447:3;25468:67;25532:2;25527:3;25468:67;:::i;:::-;25461:74;;25544:93;25633:3;25544:93;:::i;:::-;25662:2;25657:3;25653:12;25646:19;;25305:366;;;:::o;25677:419::-;25843:4;25881:2;25870:9;25866:18;25858:26;;25930:9;25924:4;25920:20;25916:1;25905:9;25901:17;25894:47;25958:131;26084:4;25958:131;:::i;:::-;25950:139;;25677:419;;;:::o;26102:224::-;26242:34;26238:1;26230:6;26226:14;26219:58;26311:7;26306:2;26298:6;26294:15;26287:32;26102:224;:::o;26332:366::-;26474:3;26495:67;26559:2;26554:3;26495:67;:::i;:::-;26488:74;;26571:93;26660:3;26571:93;:::i;:::-;26689:2;26684:3;26680:12;26673:19;;26332:366;;;:::o;26704:419::-;26870:4;26908:2;26897:9;26893:18;26885:26;;26957:9;26951:4;26947:20;26943:1;26932:9;26928:17;26921:47;26985:131;27111:4;26985:131;:::i;:::-;26977:139;;26704:419;;;:::o;27129:222::-;27269:34;27265:1;27257:6;27253:14;27246:58;27338:5;27333:2;27325:6;27321:15;27314:30;27129:222;:::o;27357:366::-;27499:3;27520:67;27584:2;27579:3;27520:67;:::i;:::-;27513:74;;27596:93;27685:3;27596:93;:::i;:::-;27714:2;27709:3;27705:12;27698:19;;27357:366;;;:::o;27729:419::-;27895:4;27933:2;27922:9;27918:18;27910:26;;27982:9;27976:4;27972:20;27968:1;27957:9;27953:17;27946:47;28010:131;28136:4;28010:131;:::i;:::-;28002:139;;27729:419;;;:::o;28154:161::-;28294:13;28290:1;28282:6;28278:14;28271:37;28154:161;:::o;28321:366::-;28463:3;28484:67;28548:2;28543:3;28484:67;:::i;:::-;28477:74;;28560:93;28649:3;28560:93;:::i;:::-;28678:2;28673:3;28669:12;28662:19;;28321:366;;;:::o;28693:419::-;28859:4;28897:2;28886:9;28882:18;28874:26;;28946:9;28940:4;28936:20;28932:1;28921:9;28917:17;28910:47;28974:131;29100:4;28974:131;:::i;:::-;28966:139;;28693:419;;;:::o;29118:297::-;29258:34;29254:1;29246:6;29242:14;29235:58;29327:34;29322:2;29314:6;29310:15;29303:59;29396:11;29391:2;29383:6;29379:15;29372:36;29118:297;:::o;29421:366::-;29563:3;29584:67;29648:2;29643:3;29584:67;:::i;:::-;29577:74;;29660:93;29749:3;29660:93;:::i;:::-;29778:2;29773:3;29769:12;29762:19;;29421:366;;;:::o;29793:419::-;29959:4;29997:2;29986:9;29982:18;29974:26;;30046:9;30040:4;30036:20;30032:1;30021:9;30017:17;30010:47;30074:131;30200:4;30074:131;:::i;:::-;30066:139;;29793:419;;;:::o;30218:240::-;30358:34;30354:1;30346:6;30342:14;30335:58;30427:23;30422:2;30414:6;30410:15;30403:48;30218:240;:::o;30464:366::-;30606:3;30627:67;30691:2;30686:3;30627:67;:::i;:::-;30620:74;;30703:93;30792:3;30703:93;:::i;:::-;30821:2;30816:3;30812:12;30805:19;;30464:366;;;:::o;30836:419::-;31002:4;31040:2;31029:9;31025:18;31017:26;;31089:9;31083:4;31079:20;31075:1;31064:9;31060:17;31053:47;31117:131;31243:4;31117:131;:::i;:::-;31109:139;;30836:419;;;:::o;31261:169::-;31401:21;31397:1;31389:6;31385:14;31378:45;31261:169;:::o;31436:366::-;31578:3;31599:67;31663:2;31658:3;31599:67;:::i;:::-;31592:74;;31675:93;31764:3;31675:93;:::i;:::-;31793:2;31788:3;31784:12;31777:19;;31436:366;;;:::o;31808:419::-;31974:4;32012:2;32001:9;31997:18;31989:26;;32061:9;32055:4;32051:20;32047:1;32036:9;32032:17;32025:47;32089:131;32215:4;32089:131;:::i;:::-;32081:139;;31808:419;;;:::o;32233:241::-;32373:34;32369:1;32361:6;32357:14;32350:58;32442:24;32437:2;32429:6;32425:15;32418:49;32233:241;:::o;32480:366::-;32622:3;32643:67;32707:2;32702:3;32643:67;:::i;:::-;32636:74;;32719:93;32808:3;32719:93;:::i;:::-;32837:2;32832:3;32828:12;32821:19;;32480:366;;;:::o;32852:419::-;33018:4;33056:2;33045:9;33041:18;33033:26;;33105:9;33099:4;33095:20;33091:1;33080:9;33076:17;33069:47;33133:131;33259:4;33133:131;:::i;:::-;33125:139;;32852:419;;;:::o;33277:194::-;33317:4;33337:20;33355:1;33337:20;:::i;:::-;33332:25;;33371:20;33389:1;33371:20;:::i;:::-;33366:25;;33415:1;33412;33408:9;33400:17;;33439:1;33433:4;33430:11;33427:37;;;33444:18;;:::i;:::-;33427:37;33277:194;;;;:::o;33477:177::-;33617:29;33613:1;33605:6;33601:14;33594:53;33477:177;:::o;33660:366::-;33802:3;33823:67;33887:2;33882:3;33823:67;:::i;:::-;33816:74;;33899:93;33988:3;33899:93;:::i;:::-;34017:2;34012:3;34008:12;34001:19;;33660:366;;;:::o;34032:419::-;34198:4;34236:2;34225:9;34221:18;34213:26;;34285:9;34279:4;34275:20;34271:1;34260:9;34256:17;34249:47;34313:131;34439:4;34313:131;:::i;:::-;34305:139;;34032:419;;;:::o;34457:147::-;34558:11;34595:3;34580:18;;34457:147;;;;:::o;34610:114::-;;:::o;34730:398::-;34889:3;34910:83;34991:1;34986:3;34910:83;:::i;:::-;34903:90;;35002:93;35091:3;35002:93;:::i;:::-;35120:1;35115:3;35111:11;35104:18;;34730:398;;;:::o;35134:379::-;35318:3;35340:147;35483:3;35340:147;:::i;:::-;35333:154;;35504:3;35497:10;;35134:379;;;:::o;35519:143::-;35576:5;35607:6;35601:13;35592:22;;35623:33;35650:5;35623:33;:::i;:::-;35519:143;;;;:::o;35668:351::-;35738:6;35787:2;35775:9;35766:7;35762:23;35758:32;35755:119;;;35793:79;;:::i;:::-;35755:119;35913:1;35938:64;35994:7;35985:6;35974:9;35970:22;35938:64;:::i;:::-;35928:74;;35884:128;35668:351;;;;:::o;36025:85::-;36070:7;36099:5;36088:16;;36025:85;;;:::o;36116:158::-;36174:9;36207:61;36225:42;36234:32;36260:5;36234:32;:::i;:::-;36225:42;:::i;:::-;36207:61;:::i;:::-;36194:74;;36116:158;;;:::o;36280:147::-;36375:45;36414:5;36375:45;:::i;:::-;36370:3;36363:58;36280:147;;:::o;36433:114::-;36500:6;36534:5;36528:12;36518:22;;36433:114;;;:::o;36553:184::-;36652:11;36686:6;36681:3;36674:19;36726:4;36721:3;36717:14;36702:29;;36553:184;;;;:::o;36743:132::-;36810:4;36833:3;36825:11;;36863:4;36858:3;36854:14;36846:22;;36743:132;;;:::o;36881:108::-;36958:24;36976:5;36958:24;:::i;:::-;36953:3;36946:37;36881:108;;:::o;36995:179::-;37064:10;37085:46;37127:3;37119:6;37085:46;:::i;:::-;37163:4;37158:3;37154:14;37140:28;;36995:179;;;;:::o;37180:113::-;37250:4;37282;37277:3;37273:14;37265:22;;37180:113;;;:::o;37329:732::-;37448:3;37477:54;37525:5;37477:54;:::i;:::-;37547:86;37626:6;37621:3;37547:86;:::i;:::-;37540:93;;37657:56;37707:5;37657:56;:::i;:::-;37736:7;37767:1;37752:284;37777:6;37774:1;37771:13;37752:284;;;37853:6;37847:13;37880:63;37939:3;37924:13;37880:63;:::i;:::-;37873:70;;37966:60;38019:6;37966:60;:::i;:::-;37956:70;;37812:224;37799:1;37796;37792:9;37787:14;;37752:284;;;37756:14;38052:3;38045:10;;37453:608;;;37329:732;;;;:::o;38067:831::-;38330:4;38368:3;38357:9;38353:19;38345:27;;38382:71;38450:1;38439:9;38435:17;38426:6;38382:71;:::i;:::-;38463:80;38539:2;38528:9;38524:18;38515:6;38463:80;:::i;:::-;38590:9;38584:4;38580:20;38575:2;38564:9;38560:18;38553:48;38618:108;38721:4;38712:6;38618:108;:::i;:::-;38610:116;;38736:72;38804:2;38793:9;38789:18;38780:6;38736:72;:::i;:::-;38818:73;38886:3;38875:9;38871:19;38862:6;38818:73;:::i;:::-;38067:831;;;;;;;;:::o;38904:807::-;39153:4;39191:3;39180:9;39176:19;39168:27;;39205:71;39273:1;39262:9;39258:17;39249:6;39205:71;:::i;:::-;39286:72;39354:2;39343:9;39339:18;39330:6;39286:72;:::i;:::-;39368:80;39444:2;39433:9;39429:18;39420:6;39368:80;:::i;:::-;39458;39534:2;39523:9;39519:18;39510:6;39458:80;:::i;:::-;39548:73;39616:3;39605:9;39601:19;39592:6;39548:73;:::i;:::-;39631;39699:3;39688:9;39684:19;39675:6;39631:73;:::i;:::-;38904:807;;;;;;;;;:::o;39717:663::-;39805:6;39813;39821;39870:2;39858:9;39849:7;39845:23;39841:32;39838:119;;;39876:79;;:::i;:::-;39838:119;39996:1;40021:64;40077:7;40068:6;40057:9;40053:22;40021:64;:::i;:::-;40011:74;;39967:128;40134:2;40160:64;40216:7;40207:6;40196:9;40192:22;40160:64;:::i;:::-;40150:74;;40105:129;40273:2;40299:64;40355:7;40346:6;40335:9;40331:22;40299:64;:::i;:::-;40289:74;;40244:129;39717:663;;;;;:::o

Swarm Source

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