ETH Price: $3,103.09 (-3.30%)
Gas: 7 Gwei

Token

0xInsure (0xI)
 

Overview

Max Total Supply

1,000,000,000 0xI

Holders

142

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.156084835703398614 0xI

Value
$0.00
0x93764f433f1eff622f9b7649272e14c5780a929d
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:
InsureToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity 0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)



/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)


/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}



contract InsureToken is ERC20, Ownable {

    uint256 private maxSupply;
   
    uint256 private denominator = 100;

    uint256 private swapThreshold = 0.0000005 ether; // The contract will only swap to ETH, once the fee tokens reach the specified threshold
    uint256 public maxWalletLimit;

    address public devWallet;
    address public insuranceWallet;
    address public liquidityWallet;

    uint256 public devFee;
    uint256 public liquidityFee;
    uint256 public insuranceFee;

    mapping (address => bool) private excludeList;
    mapping (address => uint256) private boughtBlockNumber;
    
    bool public limit = true;
    bool public isTradingEnabled = false;
    
    IUniswapV2Router02 private uniswapV2Router02;
    IUniswapV2Factory private uniswapV2Factory;
    address private uniswapV2Pair;
    
    constructor() ERC20("0xInsure", "0xI") 
    {
        maxSupply = 1e9 * 1e18; // 1 billion tokens
    
        uniswapV2Router02 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Factory = IUniswapV2Factory(uniswapV2Router02.factory());
        uniswapV2Pair = uniswapV2Factory.createPair(address(this), uniswapV2Router02.WETH());

        devWallet = 0x7617CAE48D5d4e77807A463f032F72Bec93542F4;
        liquidityWallet = 0x07cade9ba13098e0B681c91F461e8fbFcEf952c0;
        insuranceWallet = 0x3311e02fF6c6C5f3A4d73372f23ca65Ab00D47ED;  

        devFee = 1;
        liquidityFee = 1;
        insuranceFee =3;   

        maxWalletLimit = maxSupply * 2 / 100;   
        
        excludeList[msg.sender] = true;
        excludeList[address(this)] = true;
        _mint(msg.sender, maxSupply);
    }
    

    
    
    /**
     * @dev Calculates the tax, transfer it to the contract. 
     *  If the user is selling or trasnferring, and the swap threshold is met, it executes the swap
     *  and send the swapped ether to liquidity, insurance and dev wallet as per there share.
     */
    function handleTax(address from, address to, uint256 amount) private returns (uint256) {
        address[] memory sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = uniswapV2Router02.WETH();
        
        if(!isExcluded(from) && !isExcluded(to)) {
            uint256 fees;
            if(limit){
            if(to != uniswapV2Pair) {
                require (balanceOf(to) + amount <= maxWalletLimit, "maxWalletLimit reached");
              }
            }
            if(from == uniswapV2Pair){
                boughtBlockNumber[to] = block.number;
            }
            if(to == uniswapV2Pair){
                 require (block.number > boughtBlockNumber[from], "err sandwich bot");
            }

                 uint256 totalFees = liquidityFee + insuranceFee + devFee;
                 fees = (amount * totalFees) / denominator;
                
                if(fees > 0) {
                    _transfer(from, address(this), fees);   
            
                if(fees == 0) return amount;
                uint256 contractBalance = balanceOf(address(this));
                uint256 ethValue = uniswapV2Router02.getAmountsOut(contractBalance, sellPath)[1];
                
                if(ethValue >= swapThreshold && from != uniswapV2Pair) {
                    uint256 startBalance = address(this).balance;
                    
                    if(allowance(address(this), address(uniswapV2Router02)) < contractBalance){
                    _approve(address(this), address(uniswapV2Router02), ~uint256(0));
                    }
            
                    uniswapV2Router02.swapExactTokensForETHSupportingFeeOnTransferTokens(
                        contractBalance,
                        0,
                        sellPath,
                        address(this),
                        block.timestamp
                    );
                    
                    uint256 ethGained = address(this).balance - startBalance;
                    
                    uint256 liquidityETH = (ethGained * liquidityFee) / totalFees;
                    uint256 devETH = (ethGained * devFee) / totalFees;
                
                   (bool devS,) = devWallet.call{value: devETH}("");
                   (bool lpS,)  = liquidityWallet.call{value: liquidityETH}("");
                   (bool inS,)  = insuranceWallet.call{value: address(this).balance}("");
                    require (devS, "ETH to dev wallet failed");
                    require (lpS, "ETH to liquidity wallet failed");
                    require (inS, "ETH to insurance wallet failed");
                
                }
                
            }
            
            amount -= fees;
        }
        
        return amount;
    }

    
    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override virtual {
        if (!isExcluded(sender)){
            require (isTradingEnabled, "trading is not live yet");
        }
        amount = handleTax(sender, recipient, amount);   
        super._transfer(sender, recipient, amount);
    }
    
    /** @dev enable trading
     *  once enabled, it can't be disabled
     */
    function enableTrading () external onlyOwner {
        require (!isTradingEnabled, "trading is already live");
        isTradingEnabled = true;
    }
    
    /** @dev remove max wallet limit
     *  Once this function called, max wallet limit won't be applicable anymore
     */
    function removeMaxWalletLimit () external onlyOwner {
        limit = false;
    }

     /** @dev update max wallet percentage
     *   @param newPercent: new percentage value to be set
     *   Requirements-
     *   newPercent should be greator than equal to 1 percent
     */
    function updateMaxWalletPercent (uint256 newPercent) external onlyOwner {
        require (newPercent >= 1, "maxWallet limit can't go below 1 percent of the supply");
        maxWalletLimit = (newPercent * totalSupply()) / 100;
    }
    
    /**
     * @dev Burns tokens from caller address.
     */
    function burn(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }
    
    /** @dev claim any erc20 token from contract, if accidently sent by someone.
     *  @param token: address of token,to be rescued.
     *  @notice transfer all the balance to insurance wallet.
     */
    function claimStuckedTokens (IERC20 token) external onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(insuranceWallet, balance);
    }
    
    
    /**
     * @dev Excludes the specified account from tax.
     */
    function excludeFromFee(address account) external onlyOwner {
        require(!isExcluded(account), "0xI: Account is already excluded");
        excludeList[account] = true;
    }
    
    /**
     * @dev Re-enables tax on the specified account.
     */
    function includeInFee(address account) external onlyOwner {
        require(isExcluded(account),"0XI: Account is not excluded");
        excludeList[account] = false;
    }
    
    /**
     * @dev Sets fees.
     */
    function setFees(uint256 dev, uint256 insurance, uint256 liquidity) external onlyOwner {
        devFee = dev;
        insuranceFee = insurance;
        liquidityFee = liquidity;
        require (devFee + insuranceFee + liquidityFee <= 10, "max fees is 10 percent");
    }
    
    
    /**
     * @dev Sets wallets for fees.
     */
    function setFeeWallets(address dev, address insurance, address liquidity) external onlyOwner {
        require (dev != address(0) || insurance != address(0) || liquidity != address(0), "wallet address can't be zero");
        devWallet = dev;
        insuranceWallet = insurance;
        liquidityWallet = liquidity;
    }
    
    
    /**
     * @dev Returns true if the account is excluded, and false otherwise.
     */
    function isExcluded(address account) public view returns (bool) {
        return excludeList[account];
    }
    
    receive() external payable {}
}

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":"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"claimStuckedTokens","outputs":[],"stateMutability":"nonpayable","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":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":[],"name":"insuranceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"insuranceWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"insurance","type":"address"},{"internalType":"address","name":"liquidity","type":"address"}],"name":"setFeeWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"insurance","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"updateMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052606460075564746a528800600855600160125f6101000a81548160ff0219169083151502179055505f601260016101000a81548160ff02191690831515021790555034801562000052575f80fd5b506040518060400160405280600881526020017f3078496e737572650000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f30784900000000000000000000000000000000000000000000000000000000008152508160039081620000d0919062000a49565b508060049081620000e2919062000a49565b50505062000105620000f9620005ac60201b60201c565b620005b360201b60201c565b6b033b2e3c9fd0803ce8000000600681905550737a250d5630b4cf539739df2c5dacb4c659f2488d601260026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ff919062000b92565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200030e919062000b92565b6040518363ffffffff1660e01b81526004016200032d92919062000bd3565b6020604051808303815f875af11580156200034a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000370919062000b92565b60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737617cae48d5d4e77807a463f032f72bec93542f4600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507307cade9ba13098e0b681c91f461e8fbfcef952c0600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733311e02ff6c6c5f3a4d73372f23ca65ab00d47ed600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d819055506001600e819055506003600f8190555060646002600654620004d6919062000c2b565b620004e2919062000ca2565b600981905550600160105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005a6336006546200067660201b60201c565b62000dbd565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006de9062000d37565b60405180910390fd5b620006fa5f8383620007db60201b60201c565b8060025f8282546200070d919062000d57565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007bc919062000da2565b60405180910390a3620007d75f8383620007e060201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200086157607f821691505b6020821081036200087757620008766200081c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200089e565b620008e786836200089e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620009316200092b6200092584620008ff565b62000908565b620008ff565b9050919050565b5f819050919050565b6200094c8362000911565b620009646200095b8262000938565b848454620008aa565b825550505050565b5f90565b6200097a6200096c565b6200098781848462000941565b505050565b5b81811015620009ae57620009a25f8262000970565b6001810190506200098d565b5050565b601f821115620009fd57620009c7816200087d565b620009d2846200088f565b81016020851015620009e2578190505b620009fa620009f1856200088f565b8301826200098c565b50505b505050565b5f82821c905092915050565b5f62000a1f5f198460080262000a02565b1980831691505092915050565b5f62000a39838362000a0e565b9150826002028217905092915050565b62000a5482620007e5565b67ffffffffffffffff81111562000a705762000a6f620007ef565b5b62000a7c825462000849565b62000a89828285620009b2565b5f60209050601f83116001811462000abf575f841562000aaa578287015190505b62000ab6858262000a2c565b86555062000b25565b601f19841662000acf866200087d565b5f5b8281101562000af85784890151825560018201915060208501945060208101905062000ad1565b8683101562000b18578489015162000b14601f89168262000a0e565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000b5c8262000b31565b9050919050565b62000b6e8162000b50565b811462000b79575f80fd5b50565b5f8151905062000b8c8162000b63565b92915050565b5f6020828403121562000baa5762000ba962000b2d565b5b5f62000bb98482850162000b7c565b91505092915050565b62000bcd8162000b50565b82525050565b5f60408201905062000be85f83018562000bc2565b62000bf7602083018462000bc2565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000c3782620008ff565b915062000c4483620008ff565b925082820262000c5481620008ff565b9150828204841483151762000c6e5762000c6d62000bfe565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000cae82620008ff565b915062000cbb83620008ff565b92508262000cce5762000ccd62000c75565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000d1f601f8362000cd9565b915062000d2c8262000ce9565b602082019050919050565b5f6020820190508181035f83015262000d508162000d11565b9050919050565b5f62000d6382620008ff565b915062000d7083620008ff565b925082820190508082111562000d8b5762000d8a62000bfe565b5b92915050565b62000d9c81620008ff565b82525050565b5f60208201905062000db75f83018462000d91565b92915050565b6138c68062000dcb5f395ff3fe6080604052600436106101f1575f3560e01c80638a8c523c1161010c578063a457c2d71161009f578063cec10c111161006e578063cec10c11146106cc578063d4698016146106f4578063dd62ed3e1461071e578063ea2f0b371461075a578063f2fde38b14610782576101f8565b8063a457c2d7146105ee578063a4d66daf1461062a578063a9059cbb14610654578063cba0e99614610690576101f8565b806397c4fac7116100db57806397c4fac71461055c57806398118cb41461058657806398e3bc36146105b05780639e824ea4146105c6576101f8565b80638a8c523c146104c85780638da5cb5b146104de5780638ea5220f1461050857806395d89b4114610532576101f8565b8063437823ec1161018457806366a88d961161015357806366a88d96146104225780636827e7641461044c57806370a0823114610476578063715018a6146104b2576101f8565b8063437823ec1461038057806348d462b1146103a85780635038e06c146103d057806358068eaa146103fa576101f8565b806323b872dd116101c057806323b872dd146102b6578063313ce567146102f2578063395093511461031c57806342966c6814610358576101f8565b8063064a59d0146101fc57806306fdde0314610226578063095ea7b31461025057806318160ddd1461028c576101f8565b366101f857005b5f80fd5b348015610207575f80fd5b506102106107aa565b60405161021d91906123b3565b60405180910390f35b348015610231575f80fd5b5061023a6107bd565b6040516102479190612456565b60405180910390f35b34801561025b575f80fd5b5061027660048036038101906102719190612514565b61084d565b60405161028391906123b3565b60405180910390f35b348015610297575f80fd5b506102a061086f565b6040516102ad9190612561565b60405180910390f35b3480156102c1575f80fd5b506102dc60048036038101906102d7919061257a565b610878565b6040516102e991906123b3565b60405180910390f35b3480156102fd575f80fd5b506103066108a6565b60405161031391906125e5565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190612514565b6108ae565b60405161034f91906123b3565b60405180910390f35b348015610363575f80fd5b5061037e600480360381019061037991906125fe565b6108e4565b005b34801561038b575f80fd5b506103a660048036038101906103a19190612629565b6108f9565b005b3480156103b3575f80fd5b506103ce60048036038101906103c99190612654565b6109a2565b005b3480156103db575f80fd5b506103e4610b4c565b6040516103f191906126b3565b60405180910390f35b348015610405575f80fd5b50610420600480360381019061041b91906125fe565b610b71565b005b34801561042d575f80fd5b50610436610be5565b6040516104439190612561565b60405180910390f35b348015610457575f80fd5b50610460610beb565b60405161046d9190612561565b60405180910390f35b348015610481575f80fd5b5061049c60048036038101906104979190612629565b610bf1565b6040516104a99190612561565b60405180910390f35b3480156104bd575f80fd5b506104c6610c36565b005b3480156104d3575f80fd5b506104dc610c49565b005b3480156104e9575f80fd5b506104f2610cbe565b6040516104ff91906126b3565b60405180910390f35b348015610513575f80fd5b5061051c610ce6565b60405161052991906126b3565b60405180910390f35b34801561053d575f80fd5b50610546610d0b565b6040516105539190612456565b60405180910390f35b348015610567575f80fd5b50610570610d9b565b60405161057d9190612561565b60405180910390f35b348015610591575f80fd5b5061059a610da1565b6040516105a79190612561565b60405180910390f35b3480156105bb575f80fd5b506105c4610da7565b005b3480156105d1575f80fd5b506105ec60048036038101906105e79190612707565b610dca565b005b3480156105f9575f80fd5b50610614600480360381019061060f9190612514565b610eee565b60405161062191906123b3565b60405180910390f35b348015610635575f80fd5b5061063e610f63565b60405161064b91906123b3565b60405180910390f35b34801561065f575f80fd5b5061067a60048036038101906106759190612514565b610f75565b60405161068791906123b3565b60405180910390f35b34801561069b575f80fd5b506106b660048036038101906106b19190612629565b610f97565b6040516106c391906123b3565b60405180910390f35b3480156106d7575f80fd5b506106f260048036038101906106ed9190612732565b610fe9565b005b3480156106ff575f80fd5b5061070861106b565b60405161071591906126b3565b60405180910390f35b348015610729575f80fd5b50610744600480360381019061073f9190612782565b611090565b6040516107519190612561565b60405180910390f35b348015610765575f80fd5b50610780600480360381019061077b9190612629565b611112565b005b34801561078d575f80fd5b506107a860048036038101906107a39190612629565b6111b9565b005b601260019054906101000a900460ff1681565b6060600380546107cc906127ed565b80601f01602080910402602001604051908101604052809291908181526020018280546107f8906127ed565b80156108435780601f1061081a57610100808354040283529160200191610843565b820191905f5260205f20905b81548152906001019060200180831161082657829003601f168201915b5050505050905090565b5f8061085761123b565b9050610864818585611242565b600191505092915050565b5f600254905090565b5f8061088261123b565b905061088f858285611405565b61089a858585611490565b60019150509392505050565b5f6012905090565b5f806108b861123b565b90506108d98185856108ca8589611090565b6108d4919061284a565b611242565b600191505092915050565b6108ec61150a565b6108f63382611588565b50565b61090161150a565b61090a81610f97565b1561094a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610941906128c7565b60405180910390fd5b600160105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6109aa61150a565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580610a1157505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80610a4857505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b610a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7e9061292f565b60405180910390fd5b82600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b7961150a565b6001811015610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb4906129bd565b60405180910390fd5b6064610bc761086f565b82610bd291906129db565b610bdc9190612a49565b60098190555050565b60095481565b600d5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c3e61150a565b610c475f61174b565b565b610c5161150a565b601260019054906101000a900460ff1615610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9890612ac3565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610d1a906127ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610d46906127ed565b8015610d915780601f10610d6857610100808354040283529160200191610d91565b820191905f5260205f20905b815481529060010190602001808311610d7457829003601f168201915b5050505050905090565b600f5481565b600e5481565b610daf61150a565b5f60125f6101000a81548160ff021916908315150217905550565b610dd261150a565b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e0c91906126b3565b602060405180830381865afa158015610e27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4b9190612af5565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610ea9929190612b20565b6020604051808303815f875af1158015610ec5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee99190612b71565b505050565b5f80610ef861123b565b90505f610f058286611090565b905083811015610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190612c0c565b60405180910390fd5b610f578286868403611242565b60019250505092915050565b60125f9054906101000a900460ff1681565b5f80610f7f61123b565b9050610f8c818585611490565b600191505092915050565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610ff161150a565b82600d8190555081600f8190555080600e81905550600a600e54600f54600d5461101b919061284a565b611025919061284a565b1115611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d90612c74565b60405180910390fd5b505050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61111a61150a565b61112381610f97565b611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990612cdc565b60405180910390fd5b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6111c161150a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122690612d6a565b60405180910390fd5b6112388161174b565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790612df8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361131e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131590612e86565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113f89190612561565b60405180910390a3505050565b5f6114108484611090565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461148a578181101561147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390612eee565b60405180910390fd5b6114898484848403611242565b5b50505050565b61149983610f97565b6114ed57601260019054906101000a900460ff166114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390612f56565b60405180910390fd5b5b6114f883838361180e565b9050611505838383612123565b505050565b61151261123b565b73ffffffffffffffffffffffffffffffffffffffff16611530610cbe565b73ffffffffffffffffffffffffffffffffffffffff1614611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d90612fbe565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed9061304c565b60405180910390fd5b611601825f8361238f565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b906130da565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117339190612561565b60405180910390a3611746835f84612394565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80600267ffffffffffffffff81111561182b5761182a6130f8565b5b6040519080825280602002602001820160405280156118595781602001602082028036833780820191505090505b50905030815f815181106118705761186f613125565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611915573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119399190613166565b8160018151811061194d5761194c613125565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061199085610f97565b1580156119a357506119a184610f97565b155b15612117575f60125f9054906101000a900460ff1615611a6b5760145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611a6a5760095484611a1e87610bf1565b611a28919061284a565b1115611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a60906131db565b60405180910390fd5b5b5b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611b02574360115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611bd65760115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544311611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90613243565b60405180910390fd5b5b5f600d54600f54600e54611bea919061284a565b611bf4919061284a565b90506007548186611c0591906129db565b611c0f9190612a49565b91505f82111561210657611c24873084611490565b5f8203611c365784935050505061211c565b5f611c4030610bf1565b90505f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f83876040518363ffffffff1660e01b8152600401611ca0929190613318565b5f60405180830381865afa158015611cba573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611ce29190613459565b600181518110611cf557611cf4613125565b5b602002602001015190506008548110158015611d5e575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b15612103575f47905082611d9430601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611090565b1015611dc957611dc830601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f19611242565b5b601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8930426040518663ffffffff1660e01b8152600401611e2c9594939291906134e2565b5f604051808303815f87803b158015611e43575f80fd5b505af1158015611e55573d5f803e3d5ffd5b505050505f8147611e66919061353a565b90505f85600e5483611e7891906129db565b611e829190612a49565b90505f86600d5484611e9491906129db565b611e9e9190612a49565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611ee69061359a565b5f6040518083038185875af1925050503d805f8114611f20576040519150601f19603f3d011682016040523d82523d5f602084013e611f25565b606091505b505090505f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611f6f9061359a565b5f6040518083038185875af1925050503d805f8114611fa9576040519150601f19603f3d011682016040523d82523d5f602084013e611fae565b606091505b505090505f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611ff89061359a565b5f6040518083038185875af1925050503d805f8114612032576040519150601f19603f3d011682016040523d82523d5f602084013e612037565b606091505b505090508261207b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612072906135f8565b60405180910390fd5b816120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290613660565b60405180910390fd5b806120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f2906136c8565b60405180910390fd5b505050505050505b50505b8185612112919061353a565b945050505b829150505b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218890613756565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f6906137e4565b60405180910390fd5b61220a83838361238f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561228d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228490613872565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123769190612561565b60405180910390a3612389848484612394565b50505050565b505050565b505050565b5f8115159050919050565b6123ad81612399565b82525050565b5f6020820190506123c65f8301846123a4565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156124035780820151818401526020810190506123e8565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612428826123cc565b61243281856123d6565b93506124428185602086016123e6565b61244b8161240e565b840191505092915050565b5f6020820190508181035f83015261246e818461241e565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124b082612487565b9050919050565b6124c0816124a6565b81146124ca575f80fd5b50565b5f813590506124db816124b7565b92915050565b5f819050919050565b6124f3816124e1565b81146124fd575f80fd5b50565b5f8135905061250e816124ea565b92915050565b5f806040838503121561252a5761252961247f565b5b5f612537858286016124cd565b925050602061254885828601612500565b9150509250929050565b61255b816124e1565b82525050565b5f6020820190506125745f830184612552565b92915050565b5f805f606084860312156125915761259061247f565b5b5f61259e868287016124cd565b93505060206125af868287016124cd565b92505060406125c086828701612500565b9150509250925092565b5f60ff82169050919050565b6125df816125ca565b82525050565b5f6020820190506125f85f8301846125d6565b92915050565b5f602082840312156126135761261261247f565b5b5f61262084828501612500565b91505092915050565b5f6020828403121561263e5761263d61247f565b5b5f61264b848285016124cd565b91505092915050565b5f805f6060848603121561266b5761266a61247f565b5b5f612678868287016124cd565b9350506020612689868287016124cd565b925050604061269a868287016124cd565b9150509250925092565b6126ad816124a6565b82525050565b5f6020820190506126c65f8301846126a4565b92915050565b5f6126d6826124a6565b9050919050565b6126e6816126cc565b81146126f0575f80fd5b50565b5f81359050612701816126dd565b92915050565b5f6020828403121561271c5761271b61247f565b5b5f612729848285016126f3565b91505092915050565b5f805f606084860312156127495761274861247f565b5b5f61275686828701612500565b935050602061276786828701612500565b925050604061277886828701612500565b9150509250925092565b5f80604083850312156127985761279761247f565b5b5f6127a5858286016124cd565b92505060206127b6858286016124cd565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061280457607f821691505b602082108103612817576128166127c0565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612854826124e1565b915061285f836124e1565b92508282019050808211156128775761287661281d565b5b92915050565b7f3078493a204163636f756e7420697320616c7265616479206578636c756465645f82015250565b5f6128b16020836123d6565b91506128bc8261287d565b602082019050919050565b5f6020820190508181035f8301526128de816128a5565b9050919050565b7f77616c6c657420616464726573732063616e2774206265207a65726f000000005f82015250565b5f612919601c836123d6565b9150612924826128e5565b602082019050919050565b5f6020820190508181035f8301526129468161290d565b9050919050565b7f6d617857616c6c6574206c696d69742063616e277420676f2062656c6f7720315f8201527f2070657263656e74206f662074686520737570706c7900000000000000000000602082015250565b5f6129a76036836123d6565b91506129b28261294d565b604082019050919050565b5f6020820190508181035f8301526129d48161299b565b9050919050565b5f6129e5826124e1565b91506129f0836124e1565b92508282026129fe816124e1565b91508282048414831517612a1557612a1461281d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a53826124e1565b9150612a5e836124e1565b925082612a6e57612a6d612a1c565b5b828204905092915050565b7f74726164696e6720697320616c7265616479206c6976650000000000000000005f82015250565b5f612aad6017836123d6565b9150612ab882612a79565b602082019050919050565b5f6020820190508181035f830152612ada81612aa1565b9050919050565b5f81519050612aef816124ea565b92915050565b5f60208284031215612b0a57612b0961247f565b5b5f612b1784828501612ae1565b91505092915050565b5f604082019050612b335f8301856126a4565b612b406020830184612552565b9392505050565b612b5081612399565b8114612b5a575f80fd5b50565b5f81519050612b6b81612b47565b92915050565b5f60208284031215612b8657612b8561247f565b5b5f612b9384828501612b5d565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612bf66025836123d6565b9150612c0182612b9c565b604082019050919050565b5f6020820190508181035f830152612c2381612bea565b9050919050565b7f6d617820666565732069732031302070657263656e74000000000000000000005f82015250565b5f612c5e6016836123d6565b9150612c6982612c2a565b602082019050919050565b5f6020820190508181035f830152612c8b81612c52565b9050919050565b7f3058493a204163636f756e74206973206e6f74206578636c75646564000000005f82015250565b5f612cc6601c836123d6565b9150612cd182612c92565b602082019050919050565b5f6020820190508181035f830152612cf381612cba565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612d546026836123d6565b9150612d5f82612cfa565b604082019050919050565b5f6020820190508181035f830152612d8181612d48565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612de26024836123d6565b9150612ded82612d88565b604082019050919050565b5f6020820190508181035f830152612e0f81612dd6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612e706022836123d6565b9150612e7b82612e16565b604082019050919050565b5f6020820190508181035f830152612e9d81612e64565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612ed8601d836123d6565b9150612ee382612ea4565b602082019050919050565b5f6020820190508181035f830152612f0581612ecc565b9050919050565b7f74726164696e67206973206e6f74206c697665207965740000000000000000005f82015250565b5f612f406017836123d6565b9150612f4b82612f0c565b602082019050919050565b5f6020820190508181035f830152612f6d81612f34565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612fa86020836123d6565b9150612fb382612f74565b602082019050919050565b5f6020820190508181035f830152612fd581612f9c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130366021836123d6565b915061304182612fdc565b604082019050919050565b5f6020820190508181035f8301526130638161302a565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130c46022836123d6565b91506130cf8261306a565b604082019050919050565b5f6020820190508181035f8301526130f1816130b8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613160816124b7565b92915050565b5f6020828403121561317b5761317a61247f565b5b5f61318884828501613152565b91505092915050565b7f6d617857616c6c65744c696d69742072656163686564000000000000000000005f82015250565b5f6131c56016836123d6565b91506131d082613191565b602082019050919050565b5f6020820190508181035f8301526131f2816131b9565b9050919050565b7f6572722073616e647769636820626f74000000000000000000000000000000005f82015250565b5f61322d6010836123d6565b9150613238826131f9565b602082019050919050565b5f6020820190508181035f83015261325a81613221565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613293816124a6565b82525050565b5f6132a4838361328a565b60208301905092915050565b5f602082019050919050565b5f6132c682613261565b6132d0818561326b565b93506132db8361327b565b805f5b8381101561330b5781516132f28882613299565b97506132fd836132b0565b9250506001810190506132de565b5085935050505092915050565b5f60408201905061332b5f830185612552565b818103602083015261333d81846132bc565b90509392505050565b5f80fd5b6133538261240e565b810181811067ffffffffffffffff82111715613372576133716130f8565b5b80604052505050565b5f613384612476565b9050613390828261334a565b919050565b5f67ffffffffffffffff8211156133af576133ae6130f8565b5b602082029050602081019050919050565b5f80fd5b5f6133d66133d184613395565b61337b565b905080838252602082019050602084028301858111156133f9576133f86133c0565b5b835b81811015613422578061340e8882612ae1565b8452602084019350506020810190506133fb565b5050509392505050565b5f82601f8301126134405761343f613346565b5b81516134508482602086016133c4565b91505092915050565b5f6020828403121561346e5761346d61247f565b5b5f82015167ffffffffffffffff81111561348b5761348a612483565b5b6134978482850161342c565b91505092915050565b5f819050919050565b5f819050919050565b5f6134cc6134c76134c2846134a0565b6134a9565b6124e1565b9050919050565b6134dc816134b2565b82525050565b5f60a0820190506134f55f830188612552565b61350260208301876134d3565b818103604083015261351481866132bc565b905061352360608301856126a4565b6135306080830184612552565b9695505050505050565b5f613544826124e1565b915061354f836124e1565b92508282039050818111156135675761356661281d565b5b92915050565b5f81905092915050565b50565b5f6135855f8361356d565b915061359082613577565b5f82019050919050565b5f6135a48261357a565b9150819050919050565b7f45544820746f206465762077616c6c6574206661696c656400000000000000005f82015250565b5f6135e26018836123d6565b91506135ed826135ae565b602082019050919050565b5f6020820190508181035f83015261360f816135d6565b9050919050565b7f45544820746f206c69717569646974792077616c6c6574206661696c656400005f82015250565b5f61364a601e836123d6565b915061365582613616565b602082019050919050565b5f6020820190508181035f8301526136778161363e565b9050919050565b7f45544820746f20696e737572616e63652077616c6c6574206661696c656400005f82015250565b5f6136b2601e836123d6565b91506136bd8261367e565b602082019050919050565b5f6020820190508181035f8301526136df816136a6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6137406025836123d6565b915061374b826136e6565b604082019050919050565b5f6020820190508181035f83015261376d81613734565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6137ce6023836123d6565b91506137d982613774565b604082019050919050565b5f6020820190508181035f8301526137fb816137c2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61385c6026836123d6565b915061386782613802565b604082019050919050565b5f6020820190508181035f83015261388981613850565b905091905056fea264697066735822122016bcdcb3ec1395775c53197724b8792dcf12b381ee70513762e8c268e9e1225564736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101f1575f3560e01c80638a8c523c1161010c578063a457c2d71161009f578063cec10c111161006e578063cec10c11146106cc578063d4698016146106f4578063dd62ed3e1461071e578063ea2f0b371461075a578063f2fde38b14610782576101f8565b8063a457c2d7146105ee578063a4d66daf1461062a578063a9059cbb14610654578063cba0e99614610690576101f8565b806397c4fac7116100db57806397c4fac71461055c57806398118cb41461058657806398e3bc36146105b05780639e824ea4146105c6576101f8565b80638a8c523c146104c85780638da5cb5b146104de5780638ea5220f1461050857806395d89b4114610532576101f8565b8063437823ec1161018457806366a88d961161015357806366a88d96146104225780636827e7641461044c57806370a0823114610476578063715018a6146104b2576101f8565b8063437823ec1461038057806348d462b1146103a85780635038e06c146103d057806358068eaa146103fa576101f8565b806323b872dd116101c057806323b872dd146102b6578063313ce567146102f2578063395093511461031c57806342966c6814610358576101f8565b8063064a59d0146101fc57806306fdde0314610226578063095ea7b31461025057806318160ddd1461028c576101f8565b366101f857005b5f80fd5b348015610207575f80fd5b506102106107aa565b60405161021d91906123b3565b60405180910390f35b348015610231575f80fd5b5061023a6107bd565b6040516102479190612456565b60405180910390f35b34801561025b575f80fd5b5061027660048036038101906102719190612514565b61084d565b60405161028391906123b3565b60405180910390f35b348015610297575f80fd5b506102a061086f565b6040516102ad9190612561565b60405180910390f35b3480156102c1575f80fd5b506102dc60048036038101906102d7919061257a565b610878565b6040516102e991906123b3565b60405180910390f35b3480156102fd575f80fd5b506103066108a6565b60405161031391906125e5565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190612514565b6108ae565b60405161034f91906123b3565b60405180910390f35b348015610363575f80fd5b5061037e600480360381019061037991906125fe565b6108e4565b005b34801561038b575f80fd5b506103a660048036038101906103a19190612629565b6108f9565b005b3480156103b3575f80fd5b506103ce60048036038101906103c99190612654565b6109a2565b005b3480156103db575f80fd5b506103e4610b4c565b6040516103f191906126b3565b60405180910390f35b348015610405575f80fd5b50610420600480360381019061041b91906125fe565b610b71565b005b34801561042d575f80fd5b50610436610be5565b6040516104439190612561565b60405180910390f35b348015610457575f80fd5b50610460610beb565b60405161046d9190612561565b60405180910390f35b348015610481575f80fd5b5061049c60048036038101906104979190612629565b610bf1565b6040516104a99190612561565b60405180910390f35b3480156104bd575f80fd5b506104c6610c36565b005b3480156104d3575f80fd5b506104dc610c49565b005b3480156104e9575f80fd5b506104f2610cbe565b6040516104ff91906126b3565b60405180910390f35b348015610513575f80fd5b5061051c610ce6565b60405161052991906126b3565b60405180910390f35b34801561053d575f80fd5b50610546610d0b565b6040516105539190612456565b60405180910390f35b348015610567575f80fd5b50610570610d9b565b60405161057d9190612561565b60405180910390f35b348015610591575f80fd5b5061059a610da1565b6040516105a79190612561565b60405180910390f35b3480156105bb575f80fd5b506105c4610da7565b005b3480156105d1575f80fd5b506105ec60048036038101906105e79190612707565b610dca565b005b3480156105f9575f80fd5b50610614600480360381019061060f9190612514565b610eee565b60405161062191906123b3565b60405180910390f35b348015610635575f80fd5b5061063e610f63565b60405161064b91906123b3565b60405180910390f35b34801561065f575f80fd5b5061067a60048036038101906106759190612514565b610f75565b60405161068791906123b3565b60405180910390f35b34801561069b575f80fd5b506106b660048036038101906106b19190612629565b610f97565b6040516106c391906123b3565b60405180910390f35b3480156106d7575f80fd5b506106f260048036038101906106ed9190612732565b610fe9565b005b3480156106ff575f80fd5b5061070861106b565b60405161071591906126b3565b60405180910390f35b348015610729575f80fd5b50610744600480360381019061073f9190612782565b611090565b6040516107519190612561565b60405180910390f35b348015610765575f80fd5b50610780600480360381019061077b9190612629565b611112565b005b34801561078d575f80fd5b506107a860048036038101906107a39190612629565b6111b9565b005b601260019054906101000a900460ff1681565b6060600380546107cc906127ed565b80601f01602080910402602001604051908101604052809291908181526020018280546107f8906127ed565b80156108435780601f1061081a57610100808354040283529160200191610843565b820191905f5260205f20905b81548152906001019060200180831161082657829003601f168201915b5050505050905090565b5f8061085761123b565b9050610864818585611242565b600191505092915050565b5f600254905090565b5f8061088261123b565b905061088f858285611405565b61089a858585611490565b60019150509392505050565b5f6012905090565b5f806108b861123b565b90506108d98185856108ca8589611090565b6108d4919061284a565b611242565b600191505092915050565b6108ec61150a565b6108f63382611588565b50565b61090161150a565b61090a81610f97565b1561094a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610941906128c7565b60405180910390fd5b600160105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6109aa61150a565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580610a1157505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80610a4857505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b610a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7e9061292f565b60405180910390fd5b82600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b7961150a565b6001811015610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb4906129bd565b60405180910390fd5b6064610bc761086f565b82610bd291906129db565b610bdc9190612a49565b60098190555050565b60095481565b600d5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c3e61150a565b610c475f61174b565b565b610c5161150a565b601260019054906101000a900460ff1615610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9890612ac3565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610d1a906127ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610d46906127ed565b8015610d915780601f10610d6857610100808354040283529160200191610d91565b820191905f5260205f20905b815481529060010190602001808311610d7457829003601f168201915b5050505050905090565b600f5481565b600e5481565b610daf61150a565b5f60125f6101000a81548160ff021916908315150217905550565b610dd261150a565b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e0c91906126b3565b602060405180830381865afa158015610e27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4b9190612af5565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610ea9929190612b20565b6020604051808303815f875af1158015610ec5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee99190612b71565b505050565b5f80610ef861123b565b90505f610f058286611090565b905083811015610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190612c0c565b60405180910390fd5b610f578286868403611242565b60019250505092915050565b60125f9054906101000a900460ff1681565b5f80610f7f61123b565b9050610f8c818585611490565b600191505092915050565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610ff161150a565b82600d8190555081600f8190555080600e81905550600a600e54600f54600d5461101b919061284a565b611025919061284a565b1115611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d90612c74565b60405180910390fd5b505050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61111a61150a565b61112381610f97565b611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990612cdc565b60405180910390fd5b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6111c161150a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122690612d6a565b60405180910390fd5b6112388161174b565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790612df8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361131e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131590612e86565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113f89190612561565b60405180910390a3505050565b5f6114108484611090565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461148a578181101561147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147390612eee565b60405180910390fd5b6114898484848403611242565b5b50505050565b61149983610f97565b6114ed57601260019054906101000a900460ff166114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390612f56565b60405180910390fd5b5b6114f883838361180e565b9050611505838383612123565b505050565b61151261123b565b73ffffffffffffffffffffffffffffffffffffffff16611530610cbe565b73ffffffffffffffffffffffffffffffffffffffff1614611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d90612fbe565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed9061304c565b60405180910390fd5b611601825f8361238f565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b906130da565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117339190612561565b60405180910390a3611746835f84612394565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80600267ffffffffffffffff81111561182b5761182a6130f8565b5b6040519080825280602002602001820160405280156118595781602001602082028036833780820191505090505b50905030815f815181106118705761186f613125565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611915573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119399190613166565b8160018151811061194d5761194c613125565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061199085610f97565b1580156119a357506119a184610f97565b155b15612117575f60125f9054906101000a900460ff1615611a6b5760145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611a6a5760095484611a1e87610bf1565b611a28919061284a565b1115611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a60906131db565b60405180910390fd5b5b5b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611b02574360115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611bd65760115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544311611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90613243565b60405180910390fd5b5b5f600d54600f54600e54611bea919061284a565b611bf4919061284a565b90506007548186611c0591906129db565b611c0f9190612a49565b91505f82111561210657611c24873084611490565b5f8203611c365784935050505061211c565b5f611c4030610bf1565b90505f601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f83876040518363ffffffff1660e01b8152600401611ca0929190613318565b5f60405180830381865afa158015611cba573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611ce29190613459565b600181518110611cf557611cf4613125565b5b602002602001015190506008548110158015611d5e575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b15612103575f47905082611d9430601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611090565b1015611dc957611dc830601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f19611242565b5b601260029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8930426040518663ffffffff1660e01b8152600401611e2c9594939291906134e2565b5f604051808303815f87803b158015611e43575f80fd5b505af1158015611e55573d5f803e3d5ffd5b505050505f8147611e66919061353a565b90505f85600e5483611e7891906129db565b611e829190612a49565b90505f86600d5484611e9491906129db565b611e9e9190612a49565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611ee69061359a565b5f6040518083038185875af1925050503d805f8114611f20576040519150601f19603f3d011682016040523d82523d5f602084013e611f25565b606091505b505090505f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611f6f9061359a565b5f6040518083038185875af1925050503d805f8114611fa9576040519150601f19603f3d011682016040523d82523d5f602084013e611fae565b606091505b505090505f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611ff89061359a565b5f6040518083038185875af1925050503d805f8114612032576040519150601f19603f3d011682016040523d82523d5f602084013e612037565b606091505b505090508261207b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612072906135f8565b60405180910390fd5b816120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290613660565b60405180910390fd5b806120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f2906136c8565b60405180910390fd5b505050505050505b50505b8185612112919061353a565b945050505b829150505b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218890613756565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f6906137e4565b60405180910390fd5b61220a83838361238f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561228d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228490613872565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123769190612561565b60405180910390a3612389848484612394565b50505050565b505050565b505050565b5f8115159050919050565b6123ad81612399565b82525050565b5f6020820190506123c65f8301846123a4565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156124035780820151818401526020810190506123e8565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612428826123cc565b61243281856123d6565b93506124428185602086016123e6565b61244b8161240e565b840191505092915050565b5f6020820190508181035f83015261246e818461241e565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124b082612487565b9050919050565b6124c0816124a6565b81146124ca575f80fd5b50565b5f813590506124db816124b7565b92915050565b5f819050919050565b6124f3816124e1565b81146124fd575f80fd5b50565b5f8135905061250e816124ea565b92915050565b5f806040838503121561252a5761252961247f565b5b5f612537858286016124cd565b925050602061254885828601612500565b9150509250929050565b61255b816124e1565b82525050565b5f6020820190506125745f830184612552565b92915050565b5f805f606084860312156125915761259061247f565b5b5f61259e868287016124cd565b93505060206125af868287016124cd565b92505060406125c086828701612500565b9150509250925092565b5f60ff82169050919050565b6125df816125ca565b82525050565b5f6020820190506125f85f8301846125d6565b92915050565b5f602082840312156126135761261261247f565b5b5f61262084828501612500565b91505092915050565b5f6020828403121561263e5761263d61247f565b5b5f61264b848285016124cd565b91505092915050565b5f805f6060848603121561266b5761266a61247f565b5b5f612678868287016124cd565b9350506020612689868287016124cd565b925050604061269a868287016124cd565b9150509250925092565b6126ad816124a6565b82525050565b5f6020820190506126c65f8301846126a4565b92915050565b5f6126d6826124a6565b9050919050565b6126e6816126cc565b81146126f0575f80fd5b50565b5f81359050612701816126dd565b92915050565b5f6020828403121561271c5761271b61247f565b5b5f612729848285016126f3565b91505092915050565b5f805f606084860312156127495761274861247f565b5b5f61275686828701612500565b935050602061276786828701612500565b925050604061277886828701612500565b9150509250925092565b5f80604083850312156127985761279761247f565b5b5f6127a5858286016124cd565b92505060206127b6858286016124cd565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061280457607f821691505b602082108103612817576128166127c0565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612854826124e1565b915061285f836124e1565b92508282019050808211156128775761287661281d565b5b92915050565b7f3078493a204163636f756e7420697320616c7265616479206578636c756465645f82015250565b5f6128b16020836123d6565b91506128bc8261287d565b602082019050919050565b5f6020820190508181035f8301526128de816128a5565b9050919050565b7f77616c6c657420616464726573732063616e2774206265207a65726f000000005f82015250565b5f612919601c836123d6565b9150612924826128e5565b602082019050919050565b5f6020820190508181035f8301526129468161290d565b9050919050565b7f6d617857616c6c6574206c696d69742063616e277420676f2062656c6f7720315f8201527f2070657263656e74206f662074686520737570706c7900000000000000000000602082015250565b5f6129a76036836123d6565b91506129b28261294d565b604082019050919050565b5f6020820190508181035f8301526129d48161299b565b9050919050565b5f6129e5826124e1565b91506129f0836124e1565b92508282026129fe816124e1565b91508282048414831517612a1557612a1461281d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a53826124e1565b9150612a5e836124e1565b925082612a6e57612a6d612a1c565b5b828204905092915050565b7f74726164696e6720697320616c7265616479206c6976650000000000000000005f82015250565b5f612aad6017836123d6565b9150612ab882612a79565b602082019050919050565b5f6020820190508181035f830152612ada81612aa1565b9050919050565b5f81519050612aef816124ea565b92915050565b5f60208284031215612b0a57612b0961247f565b5b5f612b1784828501612ae1565b91505092915050565b5f604082019050612b335f8301856126a4565b612b406020830184612552565b9392505050565b612b5081612399565b8114612b5a575f80fd5b50565b5f81519050612b6b81612b47565b92915050565b5f60208284031215612b8657612b8561247f565b5b5f612b9384828501612b5d565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612bf66025836123d6565b9150612c0182612b9c565b604082019050919050565b5f6020820190508181035f830152612c2381612bea565b9050919050565b7f6d617820666565732069732031302070657263656e74000000000000000000005f82015250565b5f612c5e6016836123d6565b9150612c6982612c2a565b602082019050919050565b5f6020820190508181035f830152612c8b81612c52565b9050919050565b7f3058493a204163636f756e74206973206e6f74206578636c75646564000000005f82015250565b5f612cc6601c836123d6565b9150612cd182612c92565b602082019050919050565b5f6020820190508181035f830152612cf381612cba565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612d546026836123d6565b9150612d5f82612cfa565b604082019050919050565b5f6020820190508181035f830152612d8181612d48565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612de26024836123d6565b9150612ded82612d88565b604082019050919050565b5f6020820190508181035f830152612e0f81612dd6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612e706022836123d6565b9150612e7b82612e16565b604082019050919050565b5f6020820190508181035f830152612e9d81612e64565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612ed8601d836123d6565b9150612ee382612ea4565b602082019050919050565b5f6020820190508181035f830152612f0581612ecc565b9050919050565b7f74726164696e67206973206e6f74206c697665207965740000000000000000005f82015250565b5f612f406017836123d6565b9150612f4b82612f0c565b602082019050919050565b5f6020820190508181035f830152612f6d81612f34565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612fa86020836123d6565b9150612fb382612f74565b602082019050919050565b5f6020820190508181035f830152612fd581612f9c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130366021836123d6565b915061304182612fdc565b604082019050919050565b5f6020820190508181035f8301526130638161302a565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130c46022836123d6565b91506130cf8261306a565b604082019050919050565b5f6020820190508181035f8301526130f1816130b8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613160816124b7565b92915050565b5f6020828403121561317b5761317a61247f565b5b5f61318884828501613152565b91505092915050565b7f6d617857616c6c65744c696d69742072656163686564000000000000000000005f82015250565b5f6131c56016836123d6565b91506131d082613191565b602082019050919050565b5f6020820190508181035f8301526131f2816131b9565b9050919050565b7f6572722073616e647769636820626f74000000000000000000000000000000005f82015250565b5f61322d6010836123d6565b9150613238826131f9565b602082019050919050565b5f6020820190508181035f83015261325a81613221565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613293816124a6565b82525050565b5f6132a4838361328a565b60208301905092915050565b5f602082019050919050565b5f6132c682613261565b6132d0818561326b565b93506132db8361327b565b805f5b8381101561330b5781516132f28882613299565b97506132fd836132b0565b9250506001810190506132de565b5085935050505092915050565b5f60408201905061332b5f830185612552565b818103602083015261333d81846132bc565b90509392505050565b5f80fd5b6133538261240e565b810181811067ffffffffffffffff82111715613372576133716130f8565b5b80604052505050565b5f613384612476565b9050613390828261334a565b919050565b5f67ffffffffffffffff8211156133af576133ae6130f8565b5b602082029050602081019050919050565b5f80fd5b5f6133d66133d184613395565b61337b565b905080838252602082019050602084028301858111156133f9576133f86133c0565b5b835b81811015613422578061340e8882612ae1565b8452602084019350506020810190506133fb565b5050509392505050565b5f82601f8301126134405761343f613346565b5b81516134508482602086016133c4565b91505092915050565b5f6020828403121561346e5761346d61247f565b5b5f82015167ffffffffffffffff81111561348b5761348a612483565b5b6134978482850161342c565b91505092915050565b5f819050919050565b5f819050919050565b5f6134cc6134c76134c2846134a0565b6134a9565b6124e1565b9050919050565b6134dc816134b2565b82525050565b5f60a0820190506134f55f830188612552565b61350260208301876134d3565b818103604083015261351481866132bc565b905061352360608301856126a4565b6135306080830184612552565b9695505050505050565b5f613544826124e1565b915061354f836124e1565b92508282039050818111156135675761356661281d565b5b92915050565b5f81905092915050565b50565b5f6135855f8361356d565b915061359082613577565b5f82019050919050565b5f6135a48261357a565b9150819050919050565b7f45544820746f206465762077616c6c6574206661696c656400000000000000005f82015250565b5f6135e26018836123d6565b91506135ed826135ae565b602082019050919050565b5f6020820190508181035f83015261360f816135d6565b9050919050565b7f45544820746f206c69717569646974792077616c6c6574206661696c656400005f82015250565b5f61364a601e836123d6565b915061365582613616565b602082019050919050565b5f6020820190508181035f8301526136778161363e565b9050919050565b7f45544820746f20696e737572616e63652077616c6c6574206661696c656400005f82015250565b5f6136b2601e836123d6565b91506136bd8261367e565b602082019050919050565b5f6020820190508181035f8301526136df816136a6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6137406025836123d6565b915061374b826136e6565b604082019050919050565b5f6020820190508181035f83015261376d81613734565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6137ce6023836123d6565b91506137d982613774565b604082019050919050565b5f6020820190508181035f8301526137fb816137c2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61385c6026836123d6565b915061386782613802565b604082019050919050565b5f6020820190508181035f83015261388981613850565b905091905056fea264697066735822122016bcdcb3ec1395775c53197724b8792dcf12b381ee70513762e8c268e9e1225564736f6c63430008140033

Deployed Bytecode Sourcemap

21142:8254:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21805:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9254:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11605:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10374:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12386:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10216:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13090:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27378:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27960:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28804:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21481:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27065:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21412:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21557:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10545:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2772:103;;;;;;;;;;;;;:::i;:::-;;26481:152;;;;;;;;;;;;;:::i;:::-;;2124:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21450:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9473:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21619:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21585;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26773:84;;;;;;;;;;;;;:::i;:::-;;27690:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13831:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21774:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10878:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29242:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28455:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21518:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11134:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28226:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3030:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21805:36;;;;;;;;;;;;;:::o;9254:100::-;9308:13;9341:5;9334:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9254:100;:::o;11605:201::-;11688:4;11705:13;11721:12;:10;:12::i;:::-;11705:28;;11744:32;11753:5;11760:7;11769:6;11744:8;:32::i;:::-;11794:4;11787:11;;;11605:201;;;;:::o;10374:108::-;10435:7;10462:12;;10455:19;;10374:108;:::o;12386:295::-;12517:4;12534:15;12552:12;:10;:12::i;:::-;12534:30;;12575:38;12591:4;12597:7;12606:6;12575:15;:38::i;:::-;12624:27;12634:4;12640:2;12644:6;12624:9;:27::i;:::-;12669:4;12662:11;;;12386:295;;;;;:::o;10216:93::-;10274:5;10299:2;10292:9;;10216:93;:::o;13090:238::-;13178:4;13195:13;13211:12;:10;:12::i;:::-;13195:28;;13234:64;13243:5;13250:7;13287:10;13259:25;13269:5;13276:7;13259:9;:25::i;:::-;:38;;;;:::i;:::-;13234:8;:64::i;:::-;13316:4;13309:11;;;13090:238;;;;:::o;27378:91::-;2010:13;:11;:13::i;:::-;27436:25:::1;27442:10;27454:6;27436:5;:25::i;:::-;27378:91:::0;:::o;27960:182::-;2010:13;:11;:13::i;:::-;28040:19:::1;28051:7;28040:10;:19::i;:::-;28039:20;28031:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28130:4;28107:11;:20;28119:7;28107:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27960:182:::0;:::o;28804:327::-;2010:13;:11;:13::i;:::-;28932:1:::1;28917:17;;:3;:17;;;;:44;;;;28959:1;28938:23;;:9;:23;;;;28917:44;:71;;;;28986:1;28965:23;;:9;:23;;;;28917:71;28908:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;29044:3;29032:9;;:15;;;;;;;;;;;;;;;;;;29076:9;29058:15;;:27;;;;;;;;;;;;;;;;;;29114:9;29096:15;;:27;;;;;;;;;;;;;;;;;;28804:327:::0;;;:::o;21481:30::-;;;;;;;;;;;;;:::o;27065:236::-;2010:13;:11;:13::i;:::-;27171:1:::1;27157:10;:15;;27148:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27290:3;27273:13;:11;:13::i;:::-;27260:10;:26;;;;:::i;:::-;27259:34;;;;:::i;:::-;27242:14;:51;;;;27065:236:::0;:::o;21412:29::-;;;;:::o;21557:21::-;;;;:::o;10545:127::-;10619:7;10646:9;:18;10656:7;10646:18;;;;;;;;;;;;;;;;10639:25;;10545:127;;;:::o;2772:103::-;2010:13;:11;:13::i;:::-;2837:30:::1;2864:1;2837:18;:30::i;:::-;2772:103::o:0;26481:152::-;2010:13;:11;:13::i;:::-;26547:16:::1;;;;;;;;;;;26546:17;26537:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26621:4;26602:16;;:23;;;;;;;;;;;;;;;;;;26481:152::o:0;2124:87::-;2170:7;2197:6;;;;;;;;;;;2190:13;;2124:87;:::o;21450:24::-;;;;;;;;;;;;;:::o;9473:104::-;9529:13;9562:7;9555:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9473:104;:::o;21619:27::-;;;;:::o;21585:::-;;;;:::o;26773:84::-;2010:13;:11;:13::i;:::-;26844:5:::1;26836;;:13;;;;;;;;;;;;;;;;;;26773:84::o:0;27690:180::-;2010:13;:11;:13::i;:::-;27763:15:::1;27781:5;:15;;;27805:4;27781:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27763:48;;27822:5;:14;;;27837:15;;;;;;;;;;;27854:7;27822:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27752:118;27690:180:::0;:::o;13831:436::-;13924:4;13941:13;13957:12;:10;:12::i;:::-;13941:28;;13980:24;14007:25;14017:5;14024:7;14007:9;:25::i;:::-;13980:52;;14071:15;14051:16;:35;;14043:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14164:60;14173:5;14180:7;14208:15;14189:16;:34;14164:8;:60::i;:::-;14255:4;14248:11;;;;13831:436;;;;:::o;21774:24::-;;;;;;;;;;;;;:::o;10878:193::-;10957:4;10974:13;10990:12;:10;:12::i;:::-;10974:28;;11013;11023:5;11030:2;11034:6;11013:9;:28::i;:::-;11059:4;11052:11;;;10878:193;;;;:::o;29242:110::-;29300:4;29324:11;:20;29336:7;29324:20;;;;;;;;;;;;;;;;;;;;;;;;;29317:27;;29242:110;;;:::o;28455:277::-;2010:13;:11;:13::i;:::-;28562:3:::1;28553:6;:12;;;;28591:9;28576:12;:24;;;;28626:9;28611:12;:24;;;;28695:2;28679:12;;28664;;28655:6;;:21;;;;:::i;:::-;:36;;;;:::i;:::-;:42;;28646:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;28455:277:::0;;;:::o;21518:30::-;;;;;;;;;;;;;:::o;11134:151::-;11223:7;11250:11;:18;11262:5;11250:18;;;;;;;;;;;;;;;:27;11269:7;11250:27;;;;;;;;;;;;;;;;11243:34;;11134:151;;;;:::o;28226:175::-;2010:13;:11;:13::i;:::-;28303:19:::1;28314:7;28303:10;:19::i;:::-;28295:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;28388:5;28365:11;:20;28377:7;28365:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;28226:175:::0;:::o;3030:201::-;2010:13;:11;:13::i;:::-;3139:1:::1;3119:22;;:8;:22;;::::0;3111:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3195:28;3214:8;3195:18;:28::i;:::-;3030:201:::0;:::o;708:98::-;761:7;788:10;781:17;;708:98;:::o;17858:380::-;18011:1;17994:19;;:5;:19;;;17986:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18092:1;18073:21;;:7;:21;;;18065:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18176:6;18146:11;:18;18158:5;18146:18;;;;;;;;;;;;;;;:27;18165:7;18146:27;;;;;;;;;;;;;;;:36;;;;18214:7;18198:32;;18207:5;18198:32;;;18223:6;18198:32;;;;;;:::i;:::-;;;;;;;;17858:380;;;:::o;18529:453::-;18664:24;18691:25;18701:5;18708:7;18691:9;:25::i;:::-;18664:52;;18751:17;18731:16;:37;18727:248;;18813:6;18793:16;:26;;18785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18897:51;18906:5;18913:7;18941:6;18922:16;:25;18897:8;:51::i;:::-;18727:248;18653:329;18529:453;;;:::o;26023:364::-;26169:18;26180:6;26169:10;:18::i;:::-;26164:104;;26212:16;;;;;;;;;;;26203:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;26164:104;26287:36;26297:6;26305:9;26316:6;26287:9;:36::i;:::-;26278:45;;26337:42;26353:6;26361:9;26372:6;26337:15;:42::i;:::-;26023:364;;;:::o;2289:132::-;2364:12;:10;:12::i;:::-;2353:23;;:7;:5;:7::i;:::-;:23;;;2345:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2289:132::o;16745:675::-;16848:1;16829:21;;:7;:21;;;16821:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16901:49;16922:7;16939:1;16943:6;16901:20;:49::i;:::-;16963:22;16988:9;:18;16998:7;16988:18;;;;;;;;;;;;;;;;16963:43;;17043:6;17025:14;:24;;17017:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17162:6;17145:14;:23;17124:9;:18;17134:7;17124:18;;;;;;;;;;;;;;;:44;;;;17279:6;17263:12;;:22;;;;;;;;;;;17340:1;17314:37;;17323:7;17314:37;;;17344:6;17314:37;;;;;;:::i;:::-;;;;;;;;17364:48;17384:7;17401:1;17405:6;17364:19;:48::i;:::-;16810:610;16745:675;;:::o;3391:191::-;3465:16;3484:6;;;;;;;;;;;3465:25;;3510:8;3501:6;;:17;;;;;;;;;;;;;;;;;;3565:8;3534:40;;3555:8;3534:40;;;;;;;;;;;;3454:128;3391:191;:::o;23151:2852::-;23229:7;23249:25;23291:1;23277:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23249:44;;23326:4;23304:8;23313:1;23304:11;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;23356:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23342:8;23351:1;23342:11;;;;;;;;:::i;:::-;;;;;;;:38;;;;;;;;;;;23405:16;23416:4;23405:10;:16::i;:::-;23404:17;:36;;;;;23426:14;23437:2;23426:10;:14::i;:::-;23425:15;23404:36;23401:2561;;;23457:12;23487:5;;;;;;;;;;;23484:176;;;23517:13;;;;;;;;;;;23511:19;;:2;:19;;;23508:137;;23586:14;;23576:6;23560:13;23570:2;23560:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;23551:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23508:137;23484:176;23685:13;;;;;;;;;;;23677:21;;:4;:21;;;23674:96;;23742:12;23718:17;:21;23736:2;23718:21;;;;;;;;;;;;;;;:36;;;;23674:96;23793:13;;;;;;;;;;;23787:19;;:2;:19;;;23784:127;;23851:17;:23;23869:4;23851:23;;;;;;;;;;;;;;;;23836:12;:38;23827:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23784:127;23932:17;23982:6;;23967:12;;23952;;:27;;;;:::i;:::-;:36;;;;:::i;:::-;23932:56;;24038:11;;24025:9;24016:6;:18;;;;:::i;:::-;24015:34;;;;:::i;:::-;24008:41;;24096:1;24089:4;:8;24086:1822;;;24122:36;24132:4;24146;24153;24122:9;:36::i;:::-;24205:1;24197:4;:9;24194:27;;24215:6;24208:13;;;;;;;24194:27;24240:23;24266:24;24284:4;24266:9;:24::i;:::-;24240:50;;24309:16;24328:17;;;;;;;;;;;:31;;;24360:15;24377:8;24328:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24387:1;24328:61;;;;;;;;:::i;:::-;;;;;;;;24309:80;;24441:13;;24429:8;:25;;:50;;;;;24466:13;;;;;;;;;;;24458:21;;:4;:21;;;;24429:50;24426:1449;;;24504:20;24527:21;24504:44;;24651:15;24596:52;24614:4;24629:17;;;;;;;;;;;24596:9;:52::i;:::-;:70;24593:185;;;24690:64;24707:4;24722:17;;;;;;;;;;;24751:1;24742:11;24690:8;:64::i;:::-;24593:185;24814:17;;;;;;;;;;;:68;;;24909:15;24951:1;24979:8;25022:4;25054:15;24814:278;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25137:17;25181:12;25157:21;:36;;;;:::i;:::-;25137:56;;25238:20;25290:9;25274:12;;25262:9;:24;;;;:::i;:::-;25261:38;;;;:::i;:::-;25238:61;;25322:14;25362:9;25352:6;;25340:9;:18;;;;:::i;:::-;25339:32;;;;:::i;:::-;25322:49;;25412:9;25426;;;;;;;;;;;:14;;25448:6;25426:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25411:48;;;25482:8;25496:15;;;;;;;;;;;:20;;25524:12;25496:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25481:60;;;25564:8;25578:15;;;;;;;;;;;:20;;25606:21;25578:54;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25563:69;;;25664:4;25655:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;25729:3;25720:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;25799:3;25790:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;24481:1394;;;;;;;24426:1449;24099:1809;;24086:1822;25946:4;25936:14;;;;;:::i;:::-;;;23442:2520;;23401:2561;25989:6;25982:13;;;23151:2852;;;;;;:::o;14737:840::-;14884:1;14868:18;;:4;:18;;;14860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14961:1;14947:16;;:2;:16;;;14939:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15016:38;15037:4;15043:2;15047:6;15016:20;:38::i;:::-;15067:19;15089:9;:15;15099:4;15089:15;;;;;;;;;;;;;;;;15067:37;;15138:6;15123:11;:21;;15115:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15255:6;15241:11;:20;15223:9;:15;15233:4;15223:15;;;;;;;;;;;;;;;:38;;;;15458:6;15441:9;:13;15451:2;15441:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15508:2;15493:26;;15502:4;15493:26;;;15512:6;15493:26;;;;;;:::i;:::-;;;;;;;;15532:37;15552:4;15558:2;15562:6;15532:19;:37::i;:::-;14849:728;14737:840;;;:::o;19582:125::-;;;;:::o;20311:124::-;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:246::-;795:1;805:113;819:6;816:1;813:13;805:113;;;904:1;899:3;895:11;889:18;885:1;880:3;876:11;869:39;841:2;838:1;834:10;829:15;;805:113;;;952:1;943:6;938:3;934:16;927:27;776:184;714:246;;;:::o;966:102::-;1007:6;1058:2;1054:7;1049:2;1042:5;1038:14;1034:28;1024:38;;966:102;;;:::o;1074:377::-;1162:3;1190:39;1223:5;1190:39;:::i;:::-;1245:71;1309:6;1304:3;1245:71;:::i;:::-;1238:78;;1325:65;1383:6;1378:3;1371:4;1364:5;1360:16;1325:65;:::i;:::-;1415:29;1437:6;1415:29;:::i;:::-;1410:3;1406:39;1399:46;;1166:285;1074:377;;;;:::o;1457:313::-;1570:4;1608:2;1597:9;1593:18;1585:26;;1657:9;1651:4;1647:20;1643:1;1632:9;1628:17;1621:47;1685:78;1758:4;1749:6;1685:78;:::i;:::-;1677:86;;1457:313;;;;:::o;1776:75::-;1809:6;1842:2;1836:9;1826:19;;1776:75;:::o;1857:117::-;1966:1;1963;1956:12;1980:117;2089:1;2086;2079:12;2103:126;2140:7;2180:42;2173:5;2169:54;2158:65;;2103:126;;;:::o;2235:96::-;2272:7;2301:24;2319:5;2301:24;:::i;:::-;2290:35;;2235:96;;;:::o;2337:122::-;2410:24;2428:5;2410:24;:::i;:::-;2403:5;2400:35;2390:63;;2449:1;2446;2439:12;2390:63;2337:122;:::o;2465:139::-;2511:5;2549:6;2536:20;2527:29;;2565:33;2592:5;2565:33;:::i;:::-;2465:139;;;;:::o;2610:77::-;2647:7;2676:5;2665:16;;2610:77;;;:::o;2693:122::-;2766:24;2784:5;2766:24;:::i;:::-;2759:5;2756:35;2746:63;;2805:1;2802;2795:12;2746:63;2693:122;:::o;2821:139::-;2867:5;2905:6;2892:20;2883:29;;2921:33;2948:5;2921:33;:::i;:::-;2821:139;;;;:::o;2966:474::-;3034:6;3042;3091:2;3079:9;3070:7;3066:23;3062:32;3059:119;;;3097:79;;:::i;:::-;3059:119;3217:1;3242:53;3287:7;3278:6;3267:9;3263:22;3242:53;:::i;:::-;3232:63;;3188:117;3344:2;3370:53;3415:7;3406:6;3395:9;3391:22;3370:53;:::i;:::-;3360:63;;3315:118;2966:474;;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:619::-;5600:6;5608;5616;5665:2;5653:9;5644:7;5640:23;5636:32;5633:119;;;5671:79;;:::i;:::-;5633:119;5791:1;5816:53;5861:7;5852:6;5841:9;5837:22;5816:53;:::i;:::-;5806:63;;5762:117;5918:2;5944:53;5989:7;5980:6;5969:9;5965:22;5944:53;:::i;:::-;5934:63;;5889:118;6046:2;6072:53;6117:7;6108:6;6097:9;6093:22;6072:53;:::i;:::-;6062:63;;6017:118;5523:619;;;;;:::o;6148:118::-;6235:24;6253:5;6235:24;:::i;:::-;6230:3;6223:37;6148:118;;:::o;6272:222::-;6365:4;6403:2;6392:9;6388:18;6380:26;;6416:71;6484:1;6473:9;6469:17;6460:6;6416:71;:::i;:::-;6272:222;;;;:::o;6500:110::-;6551:7;6580:24;6598:5;6580:24;:::i;:::-;6569:35;;6500:110;;;:::o;6616:150::-;6703:38;6735:5;6703:38;:::i;:::-;6696:5;6693:49;6683:77;;6756:1;6753;6746:12;6683:77;6616:150;:::o;6772:167::-;6832:5;6870:6;6857:20;6848:29;;6886:47;6927:5;6886:47;:::i;:::-;6772:167;;;;:::o;6945:357::-;7018:6;7067:2;7055:9;7046:7;7042:23;7038:32;7035:119;;;7073:79;;:::i;:::-;7035:119;7193:1;7218:67;7277:7;7268:6;7257:9;7253:22;7218:67;:::i;:::-;7208:77;;7164:131;6945:357;;;;:::o;7308:619::-;7385:6;7393;7401;7450:2;7438:9;7429:7;7425:23;7421:32;7418:119;;;7456:79;;:::i;:::-;7418:119;7576:1;7601:53;7646:7;7637:6;7626:9;7622:22;7601:53;:::i;:::-;7591:63;;7547:117;7703:2;7729:53;7774:7;7765:6;7754:9;7750:22;7729:53;:::i;:::-;7719:63;;7674:118;7831:2;7857:53;7902:7;7893:6;7882:9;7878:22;7857:53;:::i;:::-;7847:63;;7802:118;7308:619;;;;;:::o;7933:474::-;8001:6;8009;8058:2;8046:9;8037:7;8033:23;8029:32;8026:119;;;8064:79;;:::i;:::-;8026:119;8184:1;8209:53;8254:7;8245:6;8234:9;8230:22;8209:53;:::i;:::-;8199:63;;8155:117;8311:2;8337:53;8382:7;8373:6;8362:9;8358:22;8337:53;:::i;:::-;8327:63;;8282:118;7933:474;;;;;:::o;8413:180::-;8461:77;8458:1;8451:88;8558:4;8555:1;8548:15;8582:4;8579:1;8572:15;8599:320;8643:6;8680:1;8674:4;8670:12;8660:22;;8727:1;8721:4;8717:12;8748:18;8738:81;;8804:4;8796:6;8792:17;8782:27;;8738:81;8866:2;8858:6;8855:14;8835:18;8832:38;8829:84;;8885:18;;:::i;:::-;8829:84;8650:269;8599:320;;;:::o;8925:180::-;8973:77;8970:1;8963:88;9070:4;9067:1;9060:15;9094:4;9091:1;9084:15;9111:191;9151:3;9170:20;9188:1;9170:20;:::i;:::-;9165:25;;9204:20;9222:1;9204:20;:::i;:::-;9199:25;;9247:1;9244;9240:9;9233:16;;9268:3;9265:1;9262:10;9259:36;;;9275:18;;:::i;:::-;9259:36;9111:191;;;;:::o;9308:182::-;9448:34;9444:1;9436:6;9432:14;9425:58;9308:182;:::o;9496:366::-;9638:3;9659:67;9723:2;9718:3;9659:67;:::i;:::-;9652:74;;9735:93;9824:3;9735:93;:::i;:::-;9853:2;9848:3;9844:12;9837:19;;9496:366;;;:::o;9868:419::-;10034:4;10072:2;10061:9;10057:18;10049:26;;10121:9;10115:4;10111:20;10107:1;10096:9;10092:17;10085:47;10149:131;10275:4;10149:131;:::i;:::-;10141:139;;9868:419;;;:::o;10293:178::-;10433:30;10429:1;10421:6;10417:14;10410:54;10293:178;:::o;10477:366::-;10619:3;10640:67;10704:2;10699:3;10640:67;:::i;:::-;10633:74;;10716:93;10805:3;10716:93;:::i;:::-;10834:2;10829:3;10825:12;10818:19;;10477:366;;;:::o;10849:419::-;11015:4;11053:2;11042:9;11038:18;11030:26;;11102:9;11096:4;11092:20;11088:1;11077:9;11073:17;11066:47;11130:131;11256:4;11130:131;:::i;:::-;11122:139;;10849:419;;;:::o;11274:241::-;11414:34;11410:1;11402:6;11398:14;11391:58;11483:24;11478:2;11470:6;11466:15;11459:49;11274:241;:::o;11521:366::-;11663:3;11684:67;11748:2;11743:3;11684:67;:::i;:::-;11677:74;;11760:93;11849:3;11760:93;:::i;:::-;11878:2;11873:3;11869:12;11862:19;;11521:366;;;:::o;11893:419::-;12059:4;12097:2;12086:9;12082:18;12074:26;;12146:9;12140:4;12136:20;12132:1;12121:9;12117:17;12110:47;12174:131;12300:4;12174:131;:::i;:::-;12166:139;;11893:419;;;:::o;12318:410::-;12358:7;12381:20;12399:1;12381:20;:::i;:::-;12376:25;;12415:20;12433:1;12415:20;:::i;:::-;12410:25;;12470:1;12467;12463:9;12492:30;12510:11;12492:30;:::i;:::-;12481:41;;12671:1;12662:7;12658:15;12655:1;12652:22;12632:1;12625:9;12605:83;12582:139;;12701:18;;:::i;:::-;12582:139;12366:362;12318:410;;;;:::o;12734:180::-;12782:77;12779:1;12772:88;12879:4;12876:1;12869:15;12903:4;12900:1;12893:15;12920:185;12960:1;12977:20;12995:1;12977:20;:::i;:::-;12972:25;;13011:20;13029:1;13011:20;:::i;:::-;13006:25;;13050:1;13040:35;;13055:18;;:::i;:::-;13040:35;13097:1;13094;13090:9;13085:14;;12920:185;;;;:::o;13111:173::-;13251:25;13247:1;13239:6;13235:14;13228:49;13111:173;:::o;13290:366::-;13432:3;13453:67;13517:2;13512:3;13453:67;:::i;:::-;13446:74;;13529:93;13618:3;13529:93;:::i;:::-;13647:2;13642:3;13638:12;13631:19;;13290:366;;;:::o;13662:419::-;13828:4;13866:2;13855:9;13851:18;13843:26;;13915:9;13909:4;13905:20;13901:1;13890:9;13886:17;13879:47;13943:131;14069:4;13943:131;:::i;:::-;13935:139;;13662:419;;;:::o;14087:143::-;14144:5;14175:6;14169:13;14160:22;;14191:33;14218:5;14191:33;:::i;:::-;14087:143;;;;:::o;14236:351::-;14306:6;14355:2;14343:9;14334:7;14330:23;14326:32;14323:119;;;14361:79;;:::i;:::-;14323:119;14481:1;14506:64;14562:7;14553:6;14542:9;14538:22;14506:64;:::i;:::-;14496:74;;14452:128;14236:351;;;;:::o;14593:332::-;14714:4;14752:2;14741:9;14737:18;14729:26;;14765:71;14833:1;14822:9;14818:17;14809:6;14765:71;:::i;:::-;14846:72;14914:2;14903:9;14899:18;14890:6;14846:72;:::i;:::-;14593:332;;;;;:::o;14931:116::-;15001:21;15016:5;15001:21;:::i;:::-;14994:5;14991:32;14981:60;;15037:1;15034;15027:12;14981:60;14931:116;:::o;15053:137::-;15107:5;15138:6;15132:13;15123:22;;15154:30;15178:5;15154:30;:::i;:::-;15053:137;;;;:::o;15196:345::-;15263:6;15312:2;15300:9;15291:7;15287:23;15283:32;15280:119;;;15318:79;;:::i;:::-;15280:119;15438:1;15463:61;15516:7;15507:6;15496:9;15492:22;15463:61;:::i;:::-;15453:71;;15409:125;15196:345;;;;:::o;15547:224::-;15687:34;15683:1;15675:6;15671:14;15664:58;15756:7;15751:2;15743:6;15739:15;15732:32;15547:224;:::o;15777:366::-;15919:3;15940:67;16004:2;15999:3;15940:67;:::i;:::-;15933:74;;16016:93;16105:3;16016:93;:::i;:::-;16134:2;16129:3;16125:12;16118:19;;15777:366;;;:::o;16149:419::-;16315:4;16353:2;16342:9;16338:18;16330:26;;16402:9;16396:4;16392:20;16388:1;16377:9;16373:17;16366:47;16430:131;16556:4;16430:131;:::i;:::-;16422:139;;16149:419;;;:::o;16574:172::-;16714:24;16710:1;16702:6;16698:14;16691:48;16574:172;:::o;16752:366::-;16894:3;16915:67;16979:2;16974:3;16915:67;:::i;:::-;16908:74;;16991:93;17080:3;16991:93;:::i;:::-;17109:2;17104:3;17100:12;17093:19;;16752:366;;;:::o;17124:419::-;17290:4;17328:2;17317:9;17313:18;17305:26;;17377:9;17371:4;17367:20;17363:1;17352:9;17348:17;17341:47;17405:131;17531:4;17405:131;:::i;:::-;17397:139;;17124:419;;;:::o;17549:178::-;17689:30;17685:1;17677:6;17673:14;17666:54;17549:178;:::o;17733:366::-;17875:3;17896:67;17960:2;17955:3;17896:67;:::i;:::-;17889:74;;17972:93;18061:3;17972:93;:::i;:::-;18090:2;18085:3;18081:12;18074:19;;17733:366;;;:::o;18105:419::-;18271:4;18309:2;18298:9;18294:18;18286:26;;18358:9;18352:4;18348:20;18344:1;18333:9;18329:17;18322:47;18386:131;18512:4;18386:131;:::i;:::-;18378:139;;18105:419;;;:::o;18530:225::-;18670:34;18666:1;18658:6;18654:14;18647:58;18739:8;18734:2;18726:6;18722:15;18715:33;18530:225;:::o;18761:366::-;18903:3;18924:67;18988:2;18983:3;18924:67;:::i;:::-;18917:74;;19000:93;19089:3;19000:93;:::i;:::-;19118:2;19113:3;19109:12;19102:19;;18761:366;;;:::o;19133:419::-;19299:4;19337:2;19326:9;19322:18;19314:26;;19386:9;19380:4;19376:20;19372:1;19361:9;19357:17;19350:47;19414:131;19540:4;19414:131;:::i;:::-;19406:139;;19133:419;;;:::o;19558:223::-;19698:34;19694:1;19686:6;19682:14;19675:58;19767:6;19762:2;19754:6;19750:15;19743:31;19558:223;:::o;19787:366::-;19929:3;19950:67;20014:2;20009:3;19950:67;:::i;:::-;19943:74;;20026:93;20115:3;20026:93;:::i;:::-;20144:2;20139:3;20135:12;20128:19;;19787:366;;;:::o;20159:419::-;20325:4;20363:2;20352:9;20348:18;20340:26;;20412:9;20406:4;20402:20;20398:1;20387:9;20383:17;20376:47;20440:131;20566:4;20440:131;:::i;:::-;20432:139;;20159:419;;;:::o;20584:221::-;20724:34;20720:1;20712:6;20708:14;20701:58;20793:4;20788:2;20780:6;20776:15;20769:29;20584:221;:::o;20811:366::-;20953:3;20974:67;21038:2;21033:3;20974:67;:::i;:::-;20967:74;;21050:93;21139:3;21050:93;:::i;:::-;21168:2;21163:3;21159:12;21152:19;;20811:366;;;:::o;21183:419::-;21349:4;21387:2;21376:9;21372:18;21364:26;;21436:9;21430:4;21426:20;21422:1;21411:9;21407:17;21400:47;21464:131;21590:4;21464:131;:::i;:::-;21456:139;;21183:419;;;:::o;21608:179::-;21748:31;21744:1;21736:6;21732:14;21725:55;21608:179;:::o;21793:366::-;21935:3;21956:67;22020:2;22015:3;21956:67;:::i;:::-;21949:74;;22032:93;22121:3;22032:93;:::i;:::-;22150:2;22145:3;22141:12;22134:19;;21793:366;;;:::o;22165:419::-;22331:4;22369:2;22358:9;22354:18;22346:26;;22418:9;22412:4;22408:20;22404:1;22393:9;22389:17;22382:47;22446:131;22572:4;22446:131;:::i;:::-;22438:139;;22165:419;;;:::o;22590:173::-;22730:25;22726:1;22718:6;22714:14;22707:49;22590:173;:::o;22769:366::-;22911:3;22932:67;22996:2;22991:3;22932:67;:::i;:::-;22925:74;;23008:93;23097:3;23008:93;:::i;:::-;23126:2;23121:3;23117:12;23110:19;;22769:366;;;:::o;23141:419::-;23307:4;23345:2;23334:9;23330:18;23322:26;;23394:9;23388:4;23384:20;23380:1;23369:9;23365:17;23358:47;23422:131;23548:4;23422:131;:::i;:::-;23414:139;;23141:419;;;:::o;23566:182::-;23706:34;23702:1;23694:6;23690:14;23683:58;23566:182;:::o;23754:366::-;23896:3;23917:67;23981:2;23976:3;23917:67;:::i;:::-;23910:74;;23993:93;24082:3;23993:93;:::i;:::-;24111:2;24106:3;24102:12;24095:19;;23754:366;;;:::o;24126:419::-;24292:4;24330:2;24319:9;24315:18;24307:26;;24379:9;24373:4;24369:20;24365:1;24354:9;24350:17;24343:47;24407:131;24533:4;24407:131;:::i;:::-;24399:139;;24126:419;;;:::o;24551:220::-;24691:34;24687:1;24679:6;24675:14;24668:58;24760:3;24755:2;24747:6;24743:15;24736:28;24551:220;:::o;24777:366::-;24919:3;24940:67;25004:2;24999:3;24940:67;:::i;:::-;24933:74;;25016:93;25105:3;25016:93;:::i;:::-;25134:2;25129:3;25125:12;25118:19;;24777:366;;;:::o;25149:419::-;25315:4;25353:2;25342:9;25338:18;25330:26;;25402:9;25396:4;25392:20;25388:1;25377:9;25373:17;25366:47;25430:131;25556:4;25430:131;:::i;:::-;25422:139;;25149:419;;;:::o;25574:221::-;25714:34;25710:1;25702:6;25698:14;25691:58;25783:4;25778:2;25770:6;25766:15;25759:29;25574:221;:::o;25801:366::-;25943:3;25964:67;26028:2;26023:3;25964:67;:::i;:::-;25957:74;;26040:93;26129:3;26040:93;:::i;:::-;26158:2;26153:3;26149:12;26142:19;;25801:366;;;:::o;26173:419::-;26339:4;26377:2;26366:9;26362:18;26354:26;;26426:9;26420:4;26416:20;26412:1;26401:9;26397:17;26390:47;26454:131;26580:4;26454:131;:::i;:::-;26446:139;;26173:419;;;:::o;26598:180::-;26646:77;26643:1;26636:88;26743:4;26740:1;26733:15;26767:4;26764:1;26757:15;26784:180;26832:77;26829:1;26822:88;26929:4;26926:1;26919:15;26953:4;26950:1;26943:15;26970:143;27027:5;27058:6;27052:13;27043:22;;27074:33;27101:5;27074:33;:::i;:::-;26970:143;;;;:::o;27119:351::-;27189:6;27238:2;27226:9;27217:7;27213:23;27209:32;27206:119;;;27244:79;;:::i;:::-;27206:119;27364:1;27389:64;27445:7;27436:6;27425:9;27421:22;27389:64;:::i;:::-;27379:74;;27335:128;27119:351;;;;:::o;27476:172::-;27616:24;27612:1;27604:6;27600:14;27593:48;27476:172;:::o;27654:366::-;27796:3;27817:67;27881:2;27876:3;27817:67;:::i;:::-;27810:74;;27893:93;27982:3;27893:93;:::i;:::-;28011:2;28006:3;28002:12;27995:19;;27654:366;;;:::o;28026:419::-;28192:4;28230:2;28219:9;28215:18;28207:26;;28279:9;28273:4;28269:20;28265:1;28254:9;28250:17;28243:47;28307:131;28433:4;28307:131;:::i;:::-;28299:139;;28026:419;;;:::o;28451:166::-;28591:18;28587:1;28579:6;28575:14;28568:42;28451:166;:::o;28623:366::-;28765:3;28786:67;28850:2;28845:3;28786:67;:::i;:::-;28779:74;;28862:93;28951:3;28862:93;:::i;:::-;28980:2;28975:3;28971:12;28964:19;;28623:366;;;:::o;28995:419::-;29161:4;29199:2;29188:9;29184:18;29176:26;;29248:9;29242:4;29238:20;29234:1;29223:9;29219:17;29212:47;29276:131;29402:4;29276:131;:::i;:::-;29268:139;;28995:419;;;:::o;29420:114::-;29487:6;29521:5;29515:12;29505:22;;29420:114;;;:::o;29540:184::-;29639:11;29673:6;29668:3;29661:19;29713:4;29708:3;29704:14;29689:29;;29540:184;;;;:::o;29730:132::-;29797:4;29820:3;29812:11;;29850:4;29845:3;29841:14;29833:22;;29730:132;;;:::o;29868:108::-;29945:24;29963:5;29945:24;:::i;:::-;29940:3;29933:37;29868:108;;:::o;29982:179::-;30051:10;30072:46;30114:3;30106:6;30072:46;:::i;:::-;30150:4;30145:3;30141:14;30127:28;;29982:179;;;;:::o;30167:113::-;30237:4;30269;30264:3;30260:14;30252:22;;30167:113;;;:::o;30316:732::-;30435:3;30464:54;30512:5;30464:54;:::i;:::-;30534:86;30613:6;30608:3;30534:86;:::i;:::-;30527:93;;30644:56;30694:5;30644:56;:::i;:::-;30723:7;30754:1;30739:284;30764:6;30761:1;30758:13;30739:284;;;30840:6;30834:13;30867:63;30926:3;30911:13;30867:63;:::i;:::-;30860:70;;30953:60;31006:6;30953:60;:::i;:::-;30943:70;;30799:224;30786:1;30783;30779:9;30774:14;;30739:284;;;30743:14;31039:3;31032:10;;30440:608;;;30316:732;;;;:::o;31054:483::-;31225:4;31263:2;31252:9;31248:18;31240:26;;31276:71;31344:1;31333:9;31329:17;31320:6;31276:71;:::i;:::-;31394:9;31388:4;31384:20;31379:2;31368:9;31364:18;31357:48;31422:108;31525:4;31516:6;31422:108;:::i;:::-;31414:116;;31054:483;;;;;:::o;31543:117::-;31652:1;31649;31642:12;31666:281;31749:27;31771:4;31749:27;:::i;:::-;31741:6;31737:40;31879:6;31867:10;31864:22;31843:18;31831:10;31828:34;31825:62;31822:88;;;31890:18;;:::i;:::-;31822:88;31930:10;31926:2;31919:22;31709:238;31666:281;;:::o;31953:129::-;31987:6;32014:20;;:::i;:::-;32004:30;;32043:33;32071:4;32063:6;32043:33;:::i;:::-;31953:129;;;:::o;32088:311::-;32165:4;32255:18;32247:6;32244:30;32241:56;;;32277:18;;:::i;:::-;32241:56;32327:4;32319:6;32315:17;32307:25;;32387:4;32381;32377:15;32369:23;;32088:311;;;:::o;32405:117::-;32514:1;32511;32504:12;32545:732;32652:5;32677:81;32693:64;32750:6;32693:64;:::i;:::-;32677:81;:::i;:::-;32668:90;;32778:5;32807:6;32800:5;32793:21;32841:4;32834:5;32830:16;32823:23;;32894:4;32886:6;32882:17;32874:6;32870:30;32923:3;32915:6;32912:15;32909:122;;;32942:79;;:::i;:::-;32909:122;33057:6;33040:231;33074:6;33069:3;33066:15;33040:231;;;33149:3;33178:48;33222:3;33210:10;33178:48;:::i;:::-;33173:3;33166:61;33256:4;33251:3;33247:14;33240:21;;33116:155;33100:4;33095:3;33091:14;33084:21;;33040:231;;;33044:21;32658:619;;32545:732;;;;;:::o;33300:385::-;33382:5;33431:3;33424:4;33416:6;33412:17;33408:27;33398:122;;33439:79;;:::i;:::-;33398:122;33549:6;33543:13;33574:105;33675:3;33667:6;33660:4;33652:6;33648:17;33574:105;:::i;:::-;33565:114;;33388:297;33300:385;;;;:::o;33691:554::-;33786:6;33835:2;33823:9;33814:7;33810:23;33806:32;33803:119;;;33841:79;;:::i;:::-;33803:119;33982:1;33971:9;33967:17;33961:24;34012:18;34004:6;34001:30;33998:117;;;34034:79;;:::i;:::-;33998:117;34139:89;34220:7;34211:6;34200:9;34196:22;34139:89;:::i;:::-;34129:99;;33932:306;33691:554;;;;:::o;34251:85::-;34296:7;34325:5;34314:16;;34251:85;;;:::o;34342:60::-;34370:3;34391:5;34384:12;;34342:60;;;:::o;34408:158::-;34466:9;34499:61;34517:42;34526:32;34552:5;34526:32;:::i;:::-;34517:42;:::i;:::-;34499:61;:::i;:::-;34486:74;;34408:158;;;:::o;34572:147::-;34667:45;34706:5;34667:45;:::i;:::-;34662:3;34655:58;34572:147;;:::o;34725:831::-;34988:4;35026:3;35015:9;35011:19;35003:27;;35040:71;35108:1;35097:9;35093:17;35084:6;35040:71;:::i;:::-;35121:80;35197:2;35186:9;35182:18;35173:6;35121:80;:::i;:::-;35248:9;35242:4;35238:20;35233:2;35222:9;35218:18;35211:48;35276:108;35379:4;35370:6;35276:108;:::i;:::-;35268:116;;35394:72;35462:2;35451:9;35447:18;35438:6;35394:72;:::i;:::-;35476:73;35544:3;35533:9;35529:19;35520:6;35476:73;:::i;:::-;34725:831;;;;;;;;:::o;35562:194::-;35602:4;35622:20;35640:1;35622:20;:::i;:::-;35617:25;;35656:20;35674:1;35656:20;:::i;:::-;35651:25;;35700:1;35697;35693:9;35685:17;;35724:1;35718:4;35715:11;35712:37;;;35729:18;;:::i;:::-;35712:37;35562:194;;;;:::o;35762:147::-;35863:11;35900:3;35885:18;;35762:147;;;;:::o;35915:114::-;;:::o;36035:398::-;36194:3;36215:83;36296:1;36291:3;36215:83;:::i;:::-;36208:90;;36307:93;36396:3;36307:93;:::i;:::-;36425:1;36420:3;36416:11;36409:18;;36035:398;;;:::o;36439:379::-;36623:3;36645:147;36788:3;36645:147;:::i;:::-;36638:154;;36809:3;36802:10;;36439:379;;;:::o;36824:174::-;36964:26;36960:1;36952:6;36948:14;36941:50;36824:174;:::o;37004:366::-;37146:3;37167:67;37231:2;37226:3;37167:67;:::i;:::-;37160:74;;37243:93;37332:3;37243:93;:::i;:::-;37361:2;37356:3;37352:12;37345:19;;37004:366;;;:::o;37376:419::-;37542:4;37580:2;37569:9;37565:18;37557:26;;37629:9;37623:4;37619:20;37615:1;37604:9;37600:17;37593:47;37657:131;37783:4;37657:131;:::i;:::-;37649:139;;37376:419;;;:::o;37801:180::-;37941:32;37937:1;37929:6;37925:14;37918:56;37801:180;:::o;37987:366::-;38129:3;38150:67;38214:2;38209:3;38150:67;:::i;:::-;38143:74;;38226:93;38315:3;38226:93;:::i;:::-;38344:2;38339:3;38335:12;38328:19;;37987:366;;;:::o;38359:419::-;38525:4;38563:2;38552:9;38548:18;38540:26;;38612:9;38606:4;38602:20;38598:1;38587:9;38583:17;38576:47;38640:131;38766:4;38640:131;:::i;:::-;38632:139;;38359:419;;;:::o;38784:180::-;38924:32;38920:1;38912:6;38908:14;38901:56;38784:180;:::o;38970:366::-;39112:3;39133:67;39197:2;39192:3;39133:67;:::i;:::-;39126:74;;39209:93;39298:3;39209:93;:::i;:::-;39327:2;39322:3;39318:12;39311:19;;38970:366;;;:::o;39342:419::-;39508:4;39546:2;39535:9;39531:18;39523:26;;39595:9;39589:4;39585:20;39581:1;39570:9;39566:17;39559:47;39623:131;39749:4;39623:131;:::i;:::-;39615:139;;39342:419;;;:::o;39767:224::-;39907:34;39903:1;39895:6;39891:14;39884:58;39976:7;39971:2;39963:6;39959:15;39952:32;39767:224;:::o;39997:366::-;40139:3;40160:67;40224:2;40219:3;40160:67;:::i;:::-;40153:74;;40236:93;40325:3;40236:93;:::i;:::-;40354:2;40349:3;40345:12;40338:19;;39997:366;;;:::o;40369:419::-;40535:4;40573:2;40562:9;40558:18;40550:26;;40622:9;40616:4;40612:20;40608:1;40597:9;40593:17;40586:47;40650:131;40776:4;40650:131;:::i;:::-;40642:139;;40369:419;;;:::o;40794:222::-;40934:34;40930:1;40922:6;40918:14;40911:58;41003:5;40998:2;40990:6;40986:15;40979:30;40794:222;:::o;41022:366::-;41164:3;41185:67;41249:2;41244:3;41185:67;:::i;:::-;41178:74;;41261:93;41350:3;41261:93;:::i;:::-;41379:2;41374:3;41370:12;41363:19;;41022:366;;;:::o;41394:419::-;41560:4;41598:2;41587:9;41583:18;41575:26;;41647:9;41641:4;41637:20;41633:1;41622:9;41618:17;41611:47;41675:131;41801:4;41675:131;:::i;:::-;41667:139;;41394:419;;;:::o;41819:225::-;41959:34;41955:1;41947:6;41943:14;41936:58;42028:8;42023:2;42015:6;42011:15;42004:33;41819:225;:::o;42050:366::-;42192:3;42213:67;42277:2;42272:3;42213:67;:::i;:::-;42206:74;;42289:93;42378:3;42289:93;:::i;:::-;42407:2;42402:3;42398:12;42391:19;;42050:366;;;:::o;42422:419::-;42588:4;42626:2;42615:9;42611:18;42603:26;;42675:9;42669:4;42665:20;42661:1;42650:9;42646:17;42639:47;42703:131;42829:4;42703:131;:::i;:::-;42695:139;;42422:419;;;:::o

Swarm Source

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