BNB Price: $621.13 (+0.63%)
 

Overview

Max Total Supply

690,690,000,000RATS

Holders

40,437 ( -0.002%)

Market

Price

$0.00 @ 0.000000 BNB (-0.97%)

Onchain Market Cap

$32,952.11

Circulating Supply Market Cap

$29,789.08

Other Info

Token Contract (WITH 9 Decimals)

Balance
25,100 RATS

Value
$0.00 ( ~0 BNB) [0.0000%]
0x802b65b5d9016621E66003aeD0b16615093f328b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Original Rat | Golden Rat $RATS on BNBchain be come true Rats. Rats in the Cats World. When the Rats talk, Chip Chip Chip! Golden Rat.

Market

Volume (24H):$16.73
Market Capitalization:$29,789.08
Circulating Supply:624,391,545,786.00 RATS
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information

Contract Source Code Verified (Exact Match)

Contract Name:
RATS

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at BscScan.com on 2024-10-23
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

interface IERC20Errors {
    error ERC20InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed
    );

    error ERC20InvalidSender(address sender);

    error ERC20InvalidReceiver(address receiver);

    error ERC20InsufficientAllowance(
        address spender,
        uint256 allowance,
        uint256 needed
    );

    error ERC20InvalidApprover(address approver);

    error ERC20InvalidSpender(address spender);
}

interface IERC721Errors {
    error ERC721InvalidOwner(address owner);

    error ERC721NonexistentToken(uint256 tokenId);

    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    error ERC721InvalidSender(address sender);

    error ERC721InvalidReceiver(address receiver);

    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    error ERC721InvalidApprover(address approver);

    error ERC721InvalidOperator(address operator);
}

interface IERC1155Errors {
    error ERC1155InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed,
        uint256 tokenId
    );

    error ERC1155InvalidSender(address sender);

    error ERC1155InvalidReceiver(address receiver);

    error ERC1155MissingApprovalForAll(address operator, address owner);

    error ERC1155InvalidApprover(address approver);

    error ERC1155InvalidOperator(address operator);

    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 value
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    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;
    }

    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                _totalSupply -= value;
            }
        } else {
            unchecked {
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    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);
        }
    }

    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);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);

    error OwnableInvalidOwner(address owner);

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

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC1363 is IERC20, IERC165 {
    /*
     * Note: the ERC-165 identifier for this interface is 0xb0202a11.
     * 0xb0202a11 ===
     *   bytes4(keccak256('transferAndCall(address,uint256)')) ^
     *   bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
     *   bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
     *   bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
     *   bytes4(keccak256('approveAndCall(address,uint256)')) ^
     *   bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
     */

    function transferAndCall(address to, uint256 value) external returns (bool);

    function transferAndCall(
        address to,
        uint256 value,
        bytes calldata data
    ) external returns (bool);

    function transferFromAndCall(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function transferFromAndCall(
        address from,
        address to,
        uint256 value,
        bytes calldata data
    ) external returns (bool);

    function approveAndCall(
        address spender,
        uint256 value
    ) external returns (bool);

    function approveAndCall(
        address spender,
        uint256 value,
        bytes calldata data
    ) external returns (bool);
}

library Errors {
    error InsufficientBalance(uint256 balance, uint256 needed);

    error FailedCall();

    error FailedDeployment();

    error MissingPrecompile(address);
}

library Address {
    error AddressEmptyCode(address target);

    function sendValue(address payable recipient, uint256 amount) internal {
        if (address(this).balance < amount) {
            revert Errors.InsufficientBalance(address(this).balance, amount);
        }

        (bool success, ) = recipient.call{value: amount}("");
        if (!success) {
            revert Errors.FailedCall();
        }
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResultFromTarget(target, success, returndata);
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata
    ) internal pure returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            return returndata;
        }
    }

    function _revert(bytes memory returndata) private pure {
        if (returndata.length > 0) {
            assembly ("memory-safe") {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert Errors.FailedCall();
        }
    }
}

library SafeERC20 {
    error SafeERC20FailedOperation(address token);

    error SafeERC20FailedDecreaseAllowance(
        address spender,
        uint256 currentAllowance,
        uint256 requestedDecrease
    );

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeCall(token.transferFrom, (from, to, value))
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        forceApprove(token, spender, oldAllowance + value);
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 requestedDecrease
    ) internal {
        unchecked {
            uint256 currentAllowance = token.allowance(address(this), spender);
            if (currentAllowance < requestedDecrease) {
                revert SafeERC20FailedDecreaseAllowance(
                    spender,
                    currentAllowance,
                    requestedDecrease
                );
            }
            forceApprove(token, spender, currentAllowance - requestedDecrease);
        }
    }

    function forceApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        bytes memory approvalCall = abi.encodeCall(
            token.approve,
            (spender, value)
        );

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(
                token,
                abi.encodeCall(token.approve, (spender, 0))
            );
            _callOptionalReturn(token, approvalCall);
        }
    }

    function transferAndCallRelaxed(
        IERC1363 token,
        address to,
        uint256 value,
        bytes memory data
    ) internal {
        if (to.code.length == 0) {
            safeTransfer(token, to, value);
        } else if (!token.transferAndCall(to, value, data)) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    function transferFromAndCallRelaxed(
        IERC1363 token,
        address from,
        address to,
        uint256 value,
        bytes memory data
    ) internal {
        if (to.code.length == 0) {
            safeTransferFrom(token, from, to, value);
        } else if (!token.transferFromAndCall(from, to, value, data)) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    function approveAndCallRelaxed(
        IERC1363 token,
        address to,
        uint256 value,
        bytes memory data
    ) internal {
        if (to.code.length == 0) {
            forceApprove(token, to, value);
        } else if (!token.approveAndCall(to, value, data)) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        uint256 returnSize;
        uint256 returnValue;
        assembly ("memory-safe") {
            let success := call(
                gas(),
                token,
                0,
                add(data, 0x20),
                mload(data),
                0,
                0x20
            )

            if iszero(success) {
                let ptr := mload(0x40)
                returndatacopy(ptr, 0, returndatasize())
                revert(ptr, returndatasize())
            }
            returnSize := returndatasize()
            returnValue := mload(0)
        }

        if (
            returnSize == 0 ? address(token).code.length == 0 : returnValue != 1
        ) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    function _callOptionalReturnBool(
        IERC20 token,
        bytes memory data
    ) private returns (bool) {
        bool success;
        uint256 returnSize;
        uint256 returnValue;
        assembly ("memory-safe") {
            success := call(
                gas(),
                token,
                0,
                add(data, 0x20),
                mload(data),
                0,
                0x20
            )
            returnSize := returndatasize()
            returnValue := mload(0)
        }
        return
            success &&
            (
                returnSize == 0
                    ? address(token).code.length > 0
                    : returnValue == 1
            );
    }
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);
    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);
    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);
    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

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

contract RATS is ERC20, Ownable {
    using SafeERC20 for IERC20;

    uint256 public liquidityTaxBuy;
    uint256 public liquidityTaxSell;
    uint256 public liquidityTaxAmount;

    uint256 public marketingTaxBuy;
    uint256 public marketingTaxSell;
    uint256 public marketingTaxAmount;

    uint256 public immutable denominator;

    address public marketingWallet;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isSwapBackEnabled;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool public isLiquified;
    uint256 public timeLiquify;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isAutomatedMarketMakerPair;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    modifier inSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    event UpdateBuyTax(uint256 liquidityTaxBuy, uint256 marketingTaxBuy);
    event UpdateSellTax(uint256 liquidityTaxBuy, uint256 marketingTaxSell);
    event UpdateMarketingWallet(address indexed marketingWallet);
    event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount);
    event UpdateSwapBackStatus(bool status);
    event UpdateExcludeFromFees(address indexed account, bool isExcluded);
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool status);
    event UpdateExcludedFromMaxWallet(address indexed account, bool isExcluded);

    constructor() ERC20("GoldenRat", "RATS") Ownable(getOwnerAddress()) {
        _mint(owner(), 690_690_000_000 * (10 ** 9));

        liquidityTaxBuy = 100;
        liquidityTaxSell = 100;

        marketingTaxBuy = 400;
        marketingTaxSell = 400;

        denominator = 10_000;

        marketingWallet = 0x786Ba6E602253dF257D6930E664eF93b793ad34B;

        swapTokensAtAmount = (totalSupply() * 1) / 10_000;
        isSwapBackEnabled = true;

        address router = getRouterAddress();
        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        address DEAD = address(0xdead);
        address ZERO = address(0x0);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;
        _isExcludedFromFees[address(owner())] = true;
        _isExcludedFromFees[address(DEAD)] = true;
        _isExcludedFromFees[address(ZERO)] = true;

        _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true;

        _isExcludedFromMaxWallet[address(this)] = true;
        _isExcludedFromMaxWallet[address(uniswapV2Pair)] = true;
        _isExcludedFromMaxWallet[address(owner())] = true;
        _isExcludedFromMaxWallet[address(DEAD)] = true;
        _isExcludedFromMaxWallet[address(ZERO)] = true;
    }

    receive() external payable {}

    fallback() external payable {}

    function decimals() public pure override returns (uint8) {
        return 9;
    }

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function getOwnerAddress() public view returns (address) {
        if (block.chainid == 56 || block.chainid == 1) {
            return 0xcaD8ae113d82601Ff14cC8BCbF156DF33fdC930A;
        } else {
            return msg.sender;
        }
    }

    function getRouterAddress() public view returns (address) {
        if (block.chainid == 56) {
            return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 1 || block.chainid == 5) {
            return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Cannot found router on this network");
        }
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");

        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.safeTransfer(msg.sender, balance);
    }

    function setBuyTax(
        uint256 _liquidityTaxBuy,
        uint256 _marketingTaxBuy
    ) external onlyOwner {
        require(
            liquidityTaxBuy != _liquidityTaxBuy ||
                marketingTaxBuy != _marketingTaxBuy,
            "Buy Tax already on that amount"
        );
        require(
            _liquidityTaxBuy + _marketingTaxBuy <= 2000,
            "Buy Tax cannot be more than 20%"
        );

        liquidityTaxBuy = _liquidityTaxBuy;
        marketingTaxBuy = _marketingTaxBuy;

        emit UpdateBuyTax(_liquidityTaxBuy, _marketingTaxBuy);
    }

    function setSellTax(
        uint256 _liquidityTaxSell,
        uint256 _marketingTaxSell
    ) external onlyOwner {
        require(
            liquidityTaxSell != _liquidityTaxSell ||
                marketingTaxSell != _marketingTaxSell,
            "Sell Tax already on that amount"
        );
        require(
            _liquidityTaxSell + _marketingTaxSell <= 2000,
            "Sell Tax cannot be more than 20%"
        );

        liquidityTaxSell = _liquidityTaxSell;
        marketingTaxSell = _marketingTaxSell;

        emit UpdateSellTax(_liquidityTaxSell, _marketingTaxSell);
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(
            _marketingWallet != marketingWallet,
            "Marketing wallet is already that address"
        );
        require(
            _marketingWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_marketingWallet),
            "Marketing wallet cannot be a contract"
        );

        marketingWallet = _marketingWallet;
        emit UpdateMarketingWallet(_marketingWallet);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(
            swapTokensAtAmount != amount,
            "SwapTokensAtAmount already on that amount"
        );
        require(amount >= 1, "Amount must be equal or greater than 1 Wei");

        swapTokensAtAmount = amount;

        emit UpdateSwapTokensAtAmount(amount);
    }

    function toggleSwapBack(bool status) external onlyOwner {
        require(isSwapBackEnabled != status, "SwapBack already on status");

        isSwapBackEnabled = status;
        emit UpdateSwapBackStatus(status);
    }

    function setExcludedFromMaxWallet(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromMaxWallet[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxWallet[account] = excluded;

        emit UpdateExcludedFromMaxWallet(account, excluded);
    }

    function isExcludedFromMaxWallet(
        address account
    ) public view returns (bool) {
        return _isExcludedFromMaxWallet[account];
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool status
    ) public onlyOwner {
        require(
            _isAutomatedMarketMakerPair[pair] != status,
            "Pair address is already the value of 'status'"
        );
        _isAutomatedMarketMakerPair[pair] = status;

        emit UpdateAutomatedMarketMakerPair(pair, status);
    }

    function isAutomatedMarketMakerPair(
        address pair
    ) public view returns (bool) {
        return _isAutomatedMarketMakerPair[pair];
    }

    function setExcludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit UpdateExcludeFromFees(account, excluded);
    }

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

    function _update(
        address from,
        address to,
        uint256 value
    ) internal override {
        if (from == address(0) || to == address(0)) {
            super._update(from, to, value);
            return;
        }
        if (value == 0) {
            super._update(from, to, 0);
            return;
        }

        if (to == uniswapV2Pair) {
            timeLiquify = block.timestamp;
            isLiquified = true;
        }

        if (
            !_isExcludedFromMaxWallet[to] &&
            !isAutomatedMarketMakerPair(to) &&
            isLiquified &&
            block.timestamp < timeLiquify + 1 hours
        ) {
            require(
                balanceOf(to) + value <= (totalSupply() * 1) / 100,
                "Max wallet balance exceeded"
            );
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            _isAutomatedMarketMakerPair[to] &&
            isSwapBackEnabled &&
            from != owner() &&
            to != owner() &&
            liquidityTaxAmount + marketingTaxAmount > 0
        ) {
            swapBack();
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 marketingTax = 0;
            uint256 liquidityTax = 0;

            if (_isAutomatedMarketMakerPair[from]) {
                liquidityTax = (liquidityTaxBuy * value) / denominator;
                marketingTax = (marketingTaxBuy * value) / denominator;
            } else if (_isAutomatedMarketMakerPair[to]) {
                liquidityTax = (liquidityTaxSell * value) / denominator;
                marketingTax = (marketingTaxSell * value) / denominator;
            }

            marketingTaxAmount += marketingTax;
            liquidityTaxAmount += liquidityTax;

            uint256 contractTax = marketingTax + liquidityTax;

            if (contractTax > 0) {
                value -= contractTax;
                super._update(from, address(this), contractTax);
            }
        }

        super._update(from, to, value);
    }

    function swapBack() internal inSwap {
        address[] memory pathWallet = new address[](2);
        pathWallet[0] = address(this);
        pathWallet[1] = uniswapV2Router.WETH();

        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 totalTaxAmount = marketingTaxAmount + liquidityTaxAmount;

        uint256 marketingTokenAmount = (contractTokenBalance *
            (marketingTaxAmount)) / totalTaxAmount;

        uint256 liquidityTokenAmount = (contractTokenBalance -
            marketingTokenAmount);

        if (marketingTokenAmount > 0) {
            try
                uniswapV2Router
                    .swapExactTokensForETHSupportingFeeOnTransferTokens(
                        marketingTokenAmount,
                        0,
                        pathWallet,
                        address(marketingWallet),
                        block.timestamp
                    )
            {} catch {}
        }

        if (liquidityTokenAmount > 0) {
            uint256 half = liquidityTokenAmount / 2;
            uint256 otherHalf = liquidityTokenAmount - half;

            try
                uniswapV2Router
                    .swapExactTokensForETHSupportingFeeOnTransferTokens(
                        half,
                        0,
                        pathWallet,
                        address(this),
                        block.timestamp
                    )
            {} catch {}

            uint256 contractEthBalance = address(this).balance;

            if (contractEthBalance > 0) {
                try
                    uniswapV2Router.addLiquidityETH{value: contractEthBalance}(
                        address(this),
                        otherHalf,
                        0,
                        0,
                        address(0xdead),
                        block.timestamp
                    )
                {} catch {}
            }
        }

        marketingTaxAmount = 0;
        liquidityTaxAmount = 0;
    }

    function manualSwapBack() external {
        uint256 contractTokenBalance = balanceOf(address(this));

        require(contractTokenBalance > 0, "Cant Swap Back 0 Token!");

        swapBack();
    }
}

Contract Security Audit

Contract ABI

API
[{"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"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludedFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"stateMutability":"payable","type":"fallback"},{"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":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxSell","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeLiquify","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","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":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405234801561000f575f5ffd5b5061001e6107f460201b60201c565b6040518060400160405280600981526020017f476f6c64656e52617400000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f524154530000000000000000000000000000000000000000000000000000000081525081600390816100999190611abc565b5080600490816100a99190611abc565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361011c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101139190611bca565b60405180910390fd5b61012b8161082c60201b60201c565b5061015261013d6108ef60201b60201c565b6825713fcf914a8d000061091760201b60201c565b60646006819055506064600781905550610190600981905550610190600a819055506127106080818152505073786ba6e602253df257d6930e664ef93b793ad34b600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061271060016101e561099c60201b60201c565b6101ef9190611c10565b6101f99190611c7e565b600d819055506001600e5f6101000a81548160ff0219169083151502179055505f6102286109a560201b60201c565b90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102cd9190611cdc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610334573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103589190611cdc565b6040518363ffffffff1660e01b8152600401610375929190611d07565b6020604051808303815f875af1158015610391573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b59190611cdc565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505061041b3060a0517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a5c60201b60201c565b5f61dead90505f5f9050600160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f6104e46108ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f60c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f60c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f6106f36108ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050612145565b5f60384614806108045750600146145b156108255773cad8ae113d82601ff14cc8bcbf156df33fdc930a9050610829565b3390505b90565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610987575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161097e9190611bca565b60405180910390fd5b6109985f8383610a7460201b60201c565b5050565b5f600254905090565b5f603846036109ca577310ed43c718714eb63d5aa57b78b54704e256024e9050610a59565b606146036109ee5773d99d1c33f9fc3444f8101754abc46c52416550d19050610a59565b60014614806109fd5750600546145b15610a1e57737a250d5630b4cf539739df2c5dacb4c659f2488d9050610a59565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5090611dae565b60405180910390fd5b90565b610a6f838383600161104760201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ad957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610af457610aef83838361121660201b60201c565b611042565b5f8103610b1157610b0c83835f61121660201b60201c565b611042565b60c05173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b695742600f819055506001600e60016101000a81548160ff0219169083151502179055505b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015610bcc5750610bca8261142f60201b60201c565b155b8015610be45750600e60019054906101000a900460ff165b8015610bfe5750610e10600f54610bfb9190611dcc565b42105b15610c855760646001610c1561099c60201b60201c565b610c1f9190611c10565b610c299190611c7e565b81610c398461148160201b60201c565b610c439190611dcc565b1115610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90611e49565b60405180910390fd5b5b5f610c953061148160201b60201c565b90505f600d548210159050808015610cba5750600c60149054906101000a900460ff16155b8015610d0c575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015610d235750600e5f9054906101000a900460ff165b8015610d685750610d386108ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015610dad5750610d7d6108ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015610dc757505f600b54600854610dc59190611dcc565b115b15610ddb57610dda6114c660201b60201c565b5b5f6001905060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610e7b575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80610e925750600c60149054906101000a900460ff165b15610e9b575f90505b801561102d575f5f90505f5f905060115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610f375760805186600654610f099190611c10565b610f139190611c7e565b905060805186600954610f269190611c10565b610f309190611c7e565b9150610fc2565b60115f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610fc15760805186600754610f979190611c10565b610fa19190611c7e565b905060805186600a54610fb49190611c10565b610fbe9190611c7e565b91505b5b81600b5f828254610fd39190611dcc565b925050819055508060085f828254610feb9190611dcc565b925050819055505f8183610fff9190611dcc565b90505f8111156110295780876110159190611e67565b965061102889308361121660201b60201c565b5b5050505b61103e86868661121660201b60201c565b5050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036110b7575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016110ae9190611bca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611127575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161111e9190611bca565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611210578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112079190611ea9565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611266578060025f82825461125a9190611dcc565b92505081905550611334565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156112ef578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016112e693929190611ec2565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361137b578060025f82825403925050819055506113c5565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114229190611ea9565b60405180910390a3505050565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6001600c60146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156114fd576114fc611889565b5b60405190808252806020026020018201604052801561152b5781602001602082028036833780820191505090505b50905030815f8151811061154257611541611ef7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb9190611cdc565b816001815181106115ff576115fe611ef7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6116493061148160201b60201c565b90505f600854600b5461165c9190611dcc565b90505f81600b548461166e9190611c10565b6116789190611c7e565b90505f81846116879190611e67565b90505f82111561171f5760a05173ffffffffffffffffffffffffffffffffffffffff1663791ac947835f88600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016116f5959493929190612014565b5f604051808303815f87803b15801561170c575f5ffd5b505af192505050801561171d575060015b505b5f811115611850575f6002826117359190611c7e565b90505f81836117449190611e67565b905060a05173ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8a30426040518663ffffffff1660e01b8152600401611789959493929190612014565b5f604051808303815f87803b1580156117a0575f5ffd5b505af19250505080156117b1575060015b505f4790505f81111561184c5760a05173ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f61dead426040518863ffffffff1660e01b81526004016118069695949392919061206c565b60606040518083038185885af19350505050801561184257506040513d601f19601f8201168201806040525081019061183f91906120f5565b60015b1561184b575050505b5b5050505b5f600b819055505f60088190555050505050505f600c60146101000a81548160ff021916908315150217905550565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806118fa57607f821691505b60208210810361190d5761190c6118b6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261196f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611934565b6119798683611934565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6119bd6119b86119b384611991565b61199a565b611991565b9050919050565b5f819050919050565b6119d6836119a3565b6119ea6119e2826119c4565b848454611940565b825550505050565b5f5f905090565b611a016119f2565b611a0c8184846119cd565b505050565b5b81811015611a2f57611a245f826119f9565b600181019050611a12565b5050565b601f821115611a7457611a4581611913565b611a4e84611925565b81016020851015611a5d578190505b611a71611a6985611925565b830182611a11565b50505b505050565b5f82821c905092915050565b5f611a945f1984600802611a79565b1980831691505092915050565b5f611aac8383611a85565b9150826002028217905092915050565b611ac58261187f565b67ffffffffffffffff811115611ade57611add611889565b5b611ae882546118e3565b611af3828285611a33565b5f60209050601f831160018114611b24575f8415611b12578287015190505b611b1c8582611aa1565b865550611b83565b601f198416611b3286611913565b5f5b82811015611b5957848901518255600182019150602085019450602081019050611b34565b86831015611b765784890151611b72601f891682611a85565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611bb482611b8b565b9050919050565b611bc481611baa565b82525050565b5f602082019050611bdd5f830184611bbb565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c1a82611991565b9150611c2583611991565b9250828202611c3381611991565b91508282048414831517611c4a57611c49611be3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611c8882611991565b9150611c9383611991565b925082611ca357611ca2611c51565b5b828204905092915050565b5f5ffd5b611cbb81611baa565b8114611cc5575f5ffd5b50565b5f81519050611cd681611cb2565b92915050565b5f60208284031215611cf157611cf0611cae565b5b5f611cfe84828501611cc8565b91505092915050565b5f604082019050611d1a5f830185611bbb565b611d276020830184611bbb565b9392505050565b5f82825260208201905092915050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574775f8201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b5f611d98602383611d2e565b9150611da382611d3e565b604082019050919050565b5f6020820190508181035f830152611dc581611d8c565b9050919050565b5f611dd682611991565b9150611de183611991565b9250828201905080821115611df957611df8611be3565b5b92915050565b7f4d61782077616c6c65742062616c616e636520657863656564656400000000005f82015250565b5f611e33601b83611d2e565b9150611e3e82611dff565b602082019050919050565b5f6020820190508181035f830152611e6081611e27565b9050919050565b5f611e7182611991565b9150611e7c83611991565b9250828203905081811115611e9457611e93611be3565b5b92915050565b611ea381611991565b82525050565b5f602082019050611ebc5f830184611e9a565b92915050565b5f606082019050611ed55f830186611bbb565b611ee26020830185611e9a565b611eef6040830184611e9a565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f611f47611f42611f3d84611f24565b61199a565b611991565b9050919050565b611f5781611f2d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611f8f81611baa565b82525050565b5f611fa08383611f86565b60208301905092915050565b5f602082019050919050565b5f611fc282611f5d565b611fcc8185611f67565b9350611fd783611f77565b805f5b83811015612007578151611fee8882611f95565b9750611ff983611fac565b925050600181019050611fda565b5085935050505092915050565b5f60a0820190506120275f830188611e9a565b6120346020830187611f4e565b81810360408301526120468186611fb8565b90506120556060830185611bbb565b6120626080830184611e9a565b9695505050505050565b5f60c08201905061207f5f830189611bbb565b61208c6020830188611e9a565b6120996040830187611f4e565b6120a66060830186611f4e565b6120b36080830185611bbb565b6120c060a0830184611e9a565b979650505050505050565b6120d481611991565b81146120de575f5ffd5b50565b5f815190506120ef816120cb565b92915050565b5f5f5f6060848603121561210c5761210b611cae565b5b5f612119868287016120e1565b935050602061212a868287016120e1565b925050604061213b868287016120e1565b9150509250925092565b60805160a05160c051613d9e6121ae5f395f8181610eaa015261245101525f8181610b4101528181611d3a01528181611e6701528181611f3a0152611fd001525f81816113440152818161282c01528181612867015281816128f601526129310152613d9e5ff3fe608060405260043610610249575f3560e01c806366eb37851161013857806396ce0795116100b5578063d54f7d5e11610079578063d54f7d5e14610852578063d63cad221461087c578063dd62ed3e146108a4578063e2f45605146108e0578063f2fde38b1461090a578063f9d0831a146109325761024a565b806396ce0795146107725780639a7a23d61461079c578063a9059cbb146107c4578063afa4f3b214610800578063b7235ad0146108285761024a565b806372398aa8116100fc57806372398aa81461068e57806375f0a874146106b85780637949a403146106e25780638da5cb5b1461071e57806395d89b41146107485761024a565b806366eb3785146105c05780636dd3d39f146105d657806370a0823114610612578063715018a61461064e578063721e6233146106645761024a565b8063248ba7ed116101c65780634685c6571161018a5780634685c657146104de57806349bd5a5e146105085780634fbee1931461053257806352dfc8d01461056e5780635d098b38146105985761024a565b8063248ba7ed1461040e5780632b549ad114610438578063313ce56714610462578063412201041461048c57806342d0b0bc146104b45761024a565b80631694505e1161020d5780631694505e1461032e57806318160ddd146103585780631f88a23e1461038257806323b872dd146103aa578063247b912d146103e65761024a565b806305a1f36d1461024c57806306fdde0314610274578063095ea7b31461029e5780630abc8e7b146102da5780630c4f65bd146103045761024a565b5b005b348015610257575f5ffd5b50610272600480360381019061026d9190612cd0565b61095a565b005b34801561027f575f5ffd5b50610288610a4f565b6040516102959190612d7e565b60405180910390f35b3480156102a9575f5ffd5b506102c460048036038101906102bf9190612df8565b610adf565b6040516102d19190612e50565b60405180910390f35b3480156102e5575f5ffd5b506102ee610b01565b6040516102fb9190612e78565b60405180910390f35b34801561030f575f5ffd5b50610318610b07565b6040516103259190612ea0565b60405180910390f35b348015610339575f5ffd5b50610342610b3f565b60405161034f9190612f14565b60405180910390f35b348015610363575f5ffd5b5061036c610b63565b6040516103799190612e78565b60405180910390f35b34801561038d575f5ffd5b506103a860048036038101906103a39190612f57565b610b6c565b005b3480156103b5575f5ffd5b506103d060048036038101906103cb9190612f82565b610c1b565b6040516103dd9190612e50565b60405180910390f35b3480156103f1575f5ffd5b5061040c60048036038101906104079190612cd0565b610c49565b005b348015610419575f5ffd5b50610422610d3e565b60405161042f9190612e78565b60405180910390f35b348015610443575f5ffd5b5061044c610d44565b6040516104599190612e78565b60405180910390f35b34801561046d575f5ffd5b50610476610d4a565b6040516104839190612fed565b60405180910390f35b348015610497575f5ffd5b506104b260048036038101906104ad9190613006565b610d52565b005b3480156104bf575f5ffd5b506104c8610e8f565b6040516104d59190612e78565b60405180910390f35b3480156104e9575f5ffd5b506104f2610e95565b6040516104ff9190612e50565b60405180910390f35b348015610513575f5ffd5b5061051c610ea8565b6040516105299190612ea0565b60405180910390f35b34801561053d575f5ffd5b5061055860048036038101906105539190613044565b610ecc565b6040516105659190612e50565b60405180910390f35b348015610579575f5ffd5b50610582610f1e565b60405161058f9190612e50565b60405180910390f35b3480156105a3575f5ffd5b506105be60048036038101906105b99190613044565b610f30565b005b3480156105cb575f5ffd5b506105d4611104565b005b3480156105e1575f5ffd5b506105fc60048036038101906105f79190613044565b61115d565b6040516106099190612e50565b60405180910390f35b34801561061d575f5ffd5b5061063860048036038101906106339190613044565b6111af565b6040516106459190612e78565b60405180910390f35b348015610659575f5ffd5b506106626111f4565b005b34801561066f575f5ffd5b50610678611207565b6040516106859190612e78565b60405180910390f35b348015610699575f5ffd5b506106a261120d565b6040516106af9190612e78565b60405180910390f35b3480156106c3575f5ffd5b506106cc611213565b6040516106d99190612ea0565b60405180910390f35b3480156106ed575f5ffd5b5061070860048036038101906107039190613044565b611238565b6040516107159190612e50565b60405180910390f35b348015610729575f5ffd5b5061073261128a565b60405161073f9190612ea0565b60405180910390f35b348015610753575f5ffd5b5061075c6112b2565b6040516107699190612d7e565b60405180910390f35b34801561077d575f5ffd5b50610786611342565b6040516107939190612e78565b60405180910390f35b3480156107a7575f5ffd5b506107c260048036038101906107bd9190613006565b611366565b005b3480156107cf575f5ffd5b506107ea60048036038101906107e59190612df8565b6114a3565b6040516107f79190612e50565b60405180910390f35b34801561080b575f5ffd5b506108266004803603810190610821919061306f565b6114c5565b005b348015610833575f5ffd5b5061083c611596565b6040516108499190612e78565b60405180910390f35b34801561085d575f5ffd5b5061086661159c565b6040516108739190612ea0565b60405180910390f35b348015610887575f5ffd5b506108a2600480360381019061089d9190613006565b611653565b005b3480156108af575f5ffd5b506108ca60048036038101906108c5919061309a565b611790565b6040516108d79190612e78565b60405180910390f35b3480156108eb575f5ffd5b506108f4611812565b6040516109019190612e78565b60405180910390f35b348015610915575f5ffd5b50610930600480360381019061092b9190613044565b611818565b005b34801561093d575f5ffd5b5061095860048036038101906109539190613044565b61189c565b005b610962611a3e565b8160065414158061097557508060095414155b6109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90613122565b60405180910390fd5b6107d081836109c3919061316d565b1115610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb906131ea565b60405180910390fd5b81600681905550806009819055507f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec8282604051610a43929190613208565b60405180910390a15050565b606060038054610a5e9061325c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8a9061325c565b8015610ad55780601f10610aac57610100808354040283529160200191610ad5565b820191905f5260205f20905b815481529060010190602001808311610ab857829003601f168201915b5050505050905090565b5f5f610ae9611ac5565b9050610af6818585611acc565b600191505092915050565b60065481565b5f6038461480610b175750600146145b15610b385773cad8ae113d82601ff14cc8bcbf156df33fdc930a9050610b3c565b3390505b90565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610b74611a3e565b801515600e5f9054906101000a900460ff16151503610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906132d6565b60405180910390fd5b80600e5f6101000a81548160ff0219169083151502179055507fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b781604051610c109190612e50565b60405180910390a150565b5f5f610c25611ac5565b9050610c32858285611ade565b610c3d858585611b70565b60019150509392505050565b610c51611a3e565b81600754141580610c64575080600a5414155b610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a9061333e565b60405180910390fd5b6107d08183610cb2919061316d565b1115610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea906133a6565b60405180910390fd5b8160078190555080600a819055507fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e8282604051610d32929190613208565b60405180910390a15050565b60075481565b60085481565b5f6009905090565b610d5a611a3e565b80151560125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090613434565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9f7d06cb9b03b01b6fb89199a37bd0825030434f6a9f909100d20dfeeb47708782604051610e839190612e50565b60405180910390a25050565b600a5481565b600e60019054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600e5f9054906101000a900460ff1681565b610f38611a3e565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906134c2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90613550565b60405180910390fd5b61103e81611c60565b1561107e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611075906135de565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f060405160405180910390a250565b5f61110e306111af565b90505f8111611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613646565b60405180910390fd5b61115a611c82565b50565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111fc611a3e565b6112055f6120ad565b565b60095481565b600f5481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c19061325c565b80601f01602080910402602001604051908101604052809291908181526020018280546112ed9061325c565b80156113385780601f1061130f57610100808354040283529160200191611338565b820191905f5260205f20905b81548152906001019060200180831161131b57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b61136e611a3e565b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f4906136d4565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f133205826040516114979190612e50565b60405180910390a25050565b5f5f6114ad611ac5565b90506114ba818585611b70565b600191505092915050565b6114cd611a3e565b80600d5403611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613762565b60405180910390fd5b6001811015611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c906137f0565b60405180910390fd5b80600d819055507fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e488160405161158b9190612e78565b60405180910390a150565b600b5481565b5f603846036115c1577310ed43c718714eb63d5aa57b78b54704e256024e9050611650565b606146036115e55773d99d1c33f9fc3444f8101754abc46c52416550d19050611650565b60014614806115f45750600546145b1561161557737a250d5630b4cf539739df2c5dacb4c659f2488d9050611650565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116479061387e565b60405180910390fd5b90565b61165b611a3e565b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613434565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe1826040516117849190612e50565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b611820611a3e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611890575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016118879190612ea0565b60405180910390fd5b611899816120ad565b50565b6118a4611a3e565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611909906138e6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361198e573373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611988573d5f5f3e3d5ffd5b50611a3b565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119cc9190612ea0565b602060405180830381865afa1580156119e7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0b9190613918565b9050611a3833828473ffffffffffffffffffffffffffffffffffffffff166121709092919063ffffffff16565b50505b50565b611a46611ac5565b73ffffffffffffffffffffffffffffffffffffffff16611a6461128a565b73ffffffffffffffffffffffffffffffffffffffff1614611ac357611a87611ac5565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611aba9190612ea0565b60405180910390fd5b565b5f33905090565b611ad983838360016121ef565b505050565b5f611ae98484611790565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b6a5781811015611b5b578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611b5293929190613943565b60405180910390fd5b611b6984848484035f6121ef565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611be0575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611bd79190612ea0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c50575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611c479190612ea0565b60405180910390fd5b611c5b8383836123be565b505050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001600c60146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115611cb957611cb8613978565b5b604051908082528060200260200182016040528015611ce75781602001602082028036833780820191505090505b50905030815f81518110611cfe57611cfd6139a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc591906139e6565b81600181518110611dd957611dd86139a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f611e1d306111af565b90505f600854600b54611e30919061316d565b90505f81600b5484611e429190613a11565b611e4c9190613a7f565b90505f8184611e5b9190613aaf565b90505f821115611f11577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f88600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611ee7959493929190613bd2565b5f604051808303815f87803b158015611efe575f5ffd5b505af1925050508015611f0f575060015b505b5f81111561207e575f600282611f279190613a7f565b90505f8183611f369190613aaf565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8a30426040518663ffffffff1660e01b8152600401611f99959493929190613bd2565b5f604051808303815f87803b158015611fb0575f5ffd5b505af1925050508015611fc1575060015b505f4790505f81111561207a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f61dead426040518863ffffffff1660e01b815260040161203496959493929190613c2a565b60606040518083038185885af19350505050801561207057506040513d601f19601f8201168201806040525081019061206d9190613c89565b60015b15612079575050505b5b5050505b5f600b819055505f60088190555050505050505f600c60146101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6121ea838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016121a3929190613cd9565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129e5565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361225f575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016122569190612ea0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122cf575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016122c69190612ea0565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156123b8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516123af9190612e78565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061242357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561243857612433838383612a80565b6129e0565b5f810361244f5761244a83835f612a80565b6129e0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124c55742600f819055506001600e60016101000a81548160ff0219169083151502179055505b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612522575061252082611238565b155b801561253a5750600e60019054906101000a900460ff165b80156125545750610e10600f54612551919061316d565b42105b156125cf5760646001612565610b63565b61256f9190613a11565b6125799190613a7f565b81612583846111af565b61258d919061316d565b11156125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c590613d4a565b60405180910390fd5b5b5f6125d9306111af565b90505f600d5482101590508080156125fe5750600c60149054906101000a900460ff16155b8015612650575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156126675750600e5f9054906101000a900460ff165b80156126a6575061267661128a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156126e557506126b561128a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156126ff57505f600b546008546126fd919061316d565b115b1561270d5761270c611c82565b5b5f6001905060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127ad575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806127c45750600c60149054906101000a900460ff165b156127cd575f90505b80156129d1575f5f90505f5f905060115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128a5577f0000000000000000000000000000000000000000000000000000000000000000866006546128599190613a11565b6128639190613a7f565b90507f0000000000000000000000000000000000000000000000000000000000000000866009546128949190613a11565b61289e9190613a7f565b915061296c565b60115f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561296b577f0000000000000000000000000000000000000000000000000000000000000000866007546129239190613a11565b61292d9190613a7f565b90507f000000000000000000000000000000000000000000000000000000000000000086600a5461295e9190613a11565b6129689190613a7f565b91505b5b81600b5f82825461297d919061316d565b925050819055508060085f828254612995919061316d565b925050819055505f81836129a9919061316d565b90505f8111156129cd5780876129bf9190613aaf565b96506129cc893083612a80565b5b5050505b6129dc868686612a80565b5050505b505050565b5f5f60205f8451602086015f885af180612a04576040513d5f823e3d81fd5b3d92505f519150505f8214612a1d576001811415612a38565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612a7a57836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401612a719190612ea0565b60405180910390fd5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ad0578060025f828254612ac4919061316d565b92505081905550612b9e565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b59578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612b5093929190613943565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612be5578060025f8282540392505081905550612c2f565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c8c9190612e78565b60405180910390a3505050565b5f5ffd5b5f819050919050565b612caf81612c9d565b8114612cb9575f5ffd5b50565b5f81359050612cca81612ca6565b92915050565b5f5f60408385031215612ce657612ce5612c99565b5b5f612cf385828601612cbc565b9250506020612d0485828601612cbc565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d5082612d0e565b612d5a8185612d18565b9350612d6a818560208601612d28565b612d7381612d36565b840191505092915050565b5f6020820190508181035f830152612d968184612d46565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612dc782612d9e565b9050919050565b612dd781612dbd565b8114612de1575f5ffd5b50565b5f81359050612df281612dce565b92915050565b5f5f60408385031215612e0e57612e0d612c99565b5b5f612e1b85828601612de4565b9250506020612e2c85828601612cbc565b9150509250929050565b5f8115159050919050565b612e4a81612e36565b82525050565b5f602082019050612e635f830184612e41565b92915050565b612e7281612c9d565b82525050565b5f602082019050612e8b5f830184612e69565b92915050565b612e9a81612dbd565b82525050565b5f602082019050612eb35f830184612e91565b92915050565b5f819050919050565b5f612edc612ed7612ed284612d9e565b612eb9565b612d9e565b9050919050565b5f612eed82612ec2565b9050919050565b5f612efe82612ee3565b9050919050565b612f0e81612ef4565b82525050565b5f602082019050612f275f830184612f05565b92915050565b612f3681612e36565b8114612f40575f5ffd5b50565b5f81359050612f5181612f2d565b92915050565b5f60208284031215612f6c57612f6b612c99565b5b5f612f7984828501612f43565b91505092915050565b5f5f5f60608486031215612f9957612f98612c99565b5b5f612fa686828701612de4565b9350506020612fb786828701612de4565b9250506040612fc886828701612cbc565b9150509250925092565b5f60ff82169050919050565b612fe781612fd2565b82525050565b5f6020820190506130005f830184612fde565b92915050565b5f5f6040838503121561301c5761301b612c99565b5b5f61302985828601612de4565b925050602061303a85828601612f43565b9150509250929050565b5f6020828403121561305957613058612c99565b5b5f61306684828501612de4565b91505092915050565b5f6020828403121561308457613083612c99565b5b5f61309184828501612cbc565b91505092915050565b5f5f604083850312156130b0576130af612c99565b5b5f6130bd85828601612de4565b92505060206130ce85828601612de4565b9150509250929050565b7f4275792054617820616c7265616479206f6e207468617420616d6f756e7400005f82015250565b5f61310c601e83612d18565b9150613117826130d8565b602082019050919050565b5f6020820190508181035f83015261313981613100565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61317782612c9d565b915061318283612c9d565b925082820190508082111561319a57613199613140565b5b92915050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e20323025005f82015250565b5f6131d4601f83612d18565b91506131df826131a0565b602082019050919050565b5f6020820190508181035f830152613201816131c8565b9050919050565b5f60408201905061321b5f830185612e69565b6132286020830184612e69565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061327357607f821691505b6020821081036132865761328561322f565b5b50919050565b7f537761704261636b20616c7265616479206f6e207374617475730000000000005f82015250565b5f6132c0601a83612d18565b91506132cb8261328c565b602082019050919050565b5f6020820190508181035f8301526132ed816132b4565b9050919050565b7f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74005f82015250565b5f613328601f83612d18565b9150613333826132f4565b602082019050919050565b5f6020820190508181035f8301526133558161331c565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203230255f82015250565b5f613390602083612d18565b915061339b8261335c565b602082019050919050565b5f6020820190508181035f8301526133bd81613384565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f61341e602a83612d18565b9150613429826133c4565b604082019050919050565b5f6020820190508181035f83015261344b81613412565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c726561647920746861745f8201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b5f6134ac602883612d18565b91506134b782613452565b604082019050919050565b5f6020820190508181035f8301526134d9816134a0565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f61353a602b83612d18565b9150613545826134e0565b604082019050919050565b5f6020820190508181035f8301526135678161352e565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e5f8201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b5f6135c8602583612d18565b91506135d38261356e565b604082019050919050565b5f6020820190508181035f8301526135f5816135bc565b9050919050565b7f43616e742053776170204261636b203020546f6b656e210000000000000000005f82015250565b5f613630601783612d18565b915061363b826135fc565b602082019050919050565b5f6020820190508181035f83015261365d81613624565b9050919050565b7f50616972206164647265737320697320616c7265616479207468652076616c755f8201527f65206f6620277374617475732700000000000000000000000000000000000000602082015250565b5f6136be602d83612d18565b91506136c982613664565b604082019050919050565b5f6020820190508181035f8301526136eb816136b2565b9050919050565b7f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e2074685f8201527f617420616d6f756e740000000000000000000000000000000000000000000000602082015250565b5f61374c602983612d18565b9150613757826136f2565b604082019050919050565b5f6020820190508181035f83015261377981613740565b9050919050565b7f416d6f756e74206d75737420626520657175616c206f722067726561746572205f8201527f7468616e20312057656900000000000000000000000000000000000000000000602082015250565b5f6137da602a83612d18565b91506137e582613780565b604082019050919050565b5f6020820190508181035f830152613807816137ce565b9050919050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574775f8201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b5f613868602383612d18565b91506138738261380e565b604082019050919050565b5f6020820190508181035f8301526138958161385c565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e735f82015250565b5f6138d0602083612d18565b91506138db8261389c565b602082019050919050565b5f6020820190508181035f8301526138fd816138c4565b9050919050565b5f8151905061391281612ca6565b92915050565b5f6020828403121561392d5761392c612c99565b5b5f61393a84828501613904565b91505092915050565b5f6060820190506139565f830186612e91565b6139636020830185612e69565b6139706040830184612e69565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506139e081612dce565b92915050565b5f602082840312156139fb576139fa612c99565b5b5f613a08848285016139d2565b91505092915050565b5f613a1b82612c9d565b9150613a2683612c9d565b9250828202613a3481612c9d565b91508282048414831517613a4b57613a4a613140565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a8982612c9d565b9150613a9483612c9d565b925082613aa457613aa3613a52565b5b828204905092915050565b5f613ab982612c9d565b9150613ac483612c9d565b9250828203905081811115613adc57613adb613140565b5b92915050565b5f819050919050565b5f613b05613b00613afb84613ae2565b612eb9565b612c9d565b9050919050565b613b1581613aeb565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613b4d81612dbd565b82525050565b5f613b5e8383613b44565b60208301905092915050565b5f602082019050919050565b5f613b8082613b1b565b613b8a8185613b25565b9350613b9583613b35565b805f5b83811015613bc5578151613bac8882613b53565b9750613bb783613b6a565b925050600181019050613b98565b5085935050505092915050565b5f60a082019050613be55f830188612e69565b613bf26020830187613b0c565b8181036040830152613c048186613b76565b9050613c136060830185612e91565b613c206080830184612e69565b9695505050505050565b5f60c082019050613c3d5f830189612e91565b613c4a6020830188612e69565b613c576040830187613b0c565b613c646060830186613b0c565b613c716080830185612e91565b613c7e60a0830184612e69565b979650505050505050565b5f5f5f60608486031215613ca057613c9f612c99565b5b5f613cad86828701613904565b9350506020613cbe86828701613904565b9250506040613ccf86828701613904565b9150509250925092565b5f604082019050613cec5f830185612e91565b613cf96020830184612e69565b9392505050565b7f4d61782077616c6c65742062616c616e636520657863656564656400000000005f82015250565b5f613d34601b83612d18565b9150613d3f82613d00565b602082019050919050565b5f6020820190508181035f830152613d6181613d28565b905091905056fea26469706673582212202f588ce69a7713bf99fe41cb5fe7e7c0ff0378bfba88556b31ae6f307e1a048564736f6c634300081c0033

Deployed Bytecode

0x608060405260043610610249575f3560e01c806366eb37851161013857806396ce0795116100b5578063d54f7d5e11610079578063d54f7d5e14610852578063d63cad221461087c578063dd62ed3e146108a4578063e2f45605146108e0578063f2fde38b1461090a578063f9d0831a146109325761024a565b806396ce0795146107725780639a7a23d61461079c578063a9059cbb146107c4578063afa4f3b214610800578063b7235ad0146108285761024a565b806372398aa8116100fc57806372398aa81461068e57806375f0a874146106b85780637949a403146106e25780638da5cb5b1461071e57806395d89b41146107485761024a565b806366eb3785146105c05780636dd3d39f146105d657806370a0823114610612578063715018a61461064e578063721e6233146106645761024a565b8063248ba7ed116101c65780634685c6571161018a5780634685c657146104de57806349bd5a5e146105085780634fbee1931461053257806352dfc8d01461056e5780635d098b38146105985761024a565b8063248ba7ed1461040e5780632b549ad114610438578063313ce56714610462578063412201041461048c57806342d0b0bc146104b45761024a565b80631694505e1161020d5780631694505e1461032e57806318160ddd146103585780631f88a23e1461038257806323b872dd146103aa578063247b912d146103e65761024a565b806305a1f36d1461024c57806306fdde0314610274578063095ea7b31461029e5780630abc8e7b146102da5780630c4f65bd146103045761024a565b5b005b348015610257575f5ffd5b50610272600480360381019061026d9190612cd0565b61095a565b005b34801561027f575f5ffd5b50610288610a4f565b6040516102959190612d7e565b60405180910390f35b3480156102a9575f5ffd5b506102c460048036038101906102bf9190612df8565b610adf565b6040516102d19190612e50565b60405180910390f35b3480156102e5575f5ffd5b506102ee610b01565b6040516102fb9190612e78565b60405180910390f35b34801561030f575f5ffd5b50610318610b07565b6040516103259190612ea0565b60405180910390f35b348015610339575f5ffd5b50610342610b3f565b60405161034f9190612f14565b60405180910390f35b348015610363575f5ffd5b5061036c610b63565b6040516103799190612e78565b60405180910390f35b34801561038d575f5ffd5b506103a860048036038101906103a39190612f57565b610b6c565b005b3480156103b5575f5ffd5b506103d060048036038101906103cb9190612f82565b610c1b565b6040516103dd9190612e50565b60405180910390f35b3480156103f1575f5ffd5b5061040c60048036038101906104079190612cd0565b610c49565b005b348015610419575f5ffd5b50610422610d3e565b60405161042f9190612e78565b60405180910390f35b348015610443575f5ffd5b5061044c610d44565b6040516104599190612e78565b60405180910390f35b34801561046d575f5ffd5b50610476610d4a565b6040516104839190612fed565b60405180910390f35b348015610497575f5ffd5b506104b260048036038101906104ad9190613006565b610d52565b005b3480156104bf575f5ffd5b506104c8610e8f565b6040516104d59190612e78565b60405180910390f35b3480156104e9575f5ffd5b506104f2610e95565b6040516104ff9190612e50565b60405180910390f35b348015610513575f5ffd5b5061051c610ea8565b6040516105299190612ea0565b60405180910390f35b34801561053d575f5ffd5b5061055860048036038101906105539190613044565b610ecc565b6040516105659190612e50565b60405180910390f35b348015610579575f5ffd5b50610582610f1e565b60405161058f9190612e50565b60405180910390f35b3480156105a3575f5ffd5b506105be60048036038101906105b99190613044565b610f30565b005b3480156105cb575f5ffd5b506105d4611104565b005b3480156105e1575f5ffd5b506105fc60048036038101906105f79190613044565b61115d565b6040516106099190612e50565b60405180910390f35b34801561061d575f5ffd5b5061063860048036038101906106339190613044565b6111af565b6040516106459190612e78565b60405180910390f35b348015610659575f5ffd5b506106626111f4565b005b34801561066f575f5ffd5b50610678611207565b6040516106859190612e78565b60405180910390f35b348015610699575f5ffd5b506106a261120d565b6040516106af9190612e78565b60405180910390f35b3480156106c3575f5ffd5b506106cc611213565b6040516106d99190612ea0565b60405180910390f35b3480156106ed575f5ffd5b5061070860048036038101906107039190613044565b611238565b6040516107159190612e50565b60405180910390f35b348015610729575f5ffd5b5061073261128a565b60405161073f9190612ea0565b60405180910390f35b348015610753575f5ffd5b5061075c6112b2565b6040516107699190612d7e565b60405180910390f35b34801561077d575f5ffd5b50610786611342565b6040516107939190612e78565b60405180910390f35b3480156107a7575f5ffd5b506107c260048036038101906107bd9190613006565b611366565b005b3480156107cf575f5ffd5b506107ea60048036038101906107e59190612df8565b6114a3565b6040516107f79190612e50565b60405180910390f35b34801561080b575f5ffd5b506108266004803603810190610821919061306f565b6114c5565b005b348015610833575f5ffd5b5061083c611596565b6040516108499190612e78565b60405180910390f35b34801561085d575f5ffd5b5061086661159c565b6040516108739190612ea0565b60405180910390f35b348015610887575f5ffd5b506108a2600480360381019061089d9190613006565b611653565b005b3480156108af575f5ffd5b506108ca60048036038101906108c5919061309a565b611790565b6040516108d79190612e78565b60405180910390f35b3480156108eb575f5ffd5b506108f4611812565b6040516109019190612e78565b60405180910390f35b348015610915575f5ffd5b50610930600480360381019061092b9190613044565b611818565b005b34801561093d575f5ffd5b5061095860048036038101906109539190613044565b61189c565b005b610962611a3e565b8160065414158061097557508060095414155b6109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90613122565b60405180910390fd5b6107d081836109c3919061316d565b1115610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb906131ea565b60405180910390fd5b81600681905550806009819055507f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec8282604051610a43929190613208565b60405180910390a15050565b606060038054610a5e9061325c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8a9061325c565b8015610ad55780601f10610aac57610100808354040283529160200191610ad5565b820191905f5260205f20905b815481529060010190602001808311610ab857829003601f168201915b5050505050905090565b5f5f610ae9611ac5565b9050610af6818585611acc565b600191505092915050565b60065481565b5f6038461480610b175750600146145b15610b385773cad8ae113d82601ff14cc8bcbf156df33fdc930a9050610b3c565b3390505b90565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e81565b5f600254905090565b610b74611a3e565b801515600e5f9054906101000a900460ff16151503610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906132d6565b60405180910390fd5b80600e5f6101000a81548160ff0219169083151502179055507fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b781604051610c109190612e50565b60405180910390a150565b5f5f610c25611ac5565b9050610c32858285611ade565b610c3d858585611b70565b60019150509392505050565b610c51611a3e565b81600754141580610c64575080600a5414155b610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a9061333e565b60405180910390fd5b6107d08183610cb2919061316d565b1115610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea906133a6565b60405180910390fd5b8160078190555080600a819055507fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e8282604051610d32929190613208565b60405180910390a15050565b60075481565b60085481565b5f6009905090565b610d5a611a3e565b80151560125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090613434565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9f7d06cb9b03b01b6fb89199a37bd0825030434f6a9f909100d20dfeeb47708782604051610e839190612e50565b60405180910390a25050565b600a5481565b600e60019054906101000a900460ff1681565b7f00000000000000000000000050528216e3a3bca66c4064fce3d50aea8d9e68fa81565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600e5f9054906101000a900460ff1681565b610f38611a3e565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906134c2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90613550565b60405180910390fd5b61103e81611c60565b1561107e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611075906135de565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f060405160405180910390a250565b5f61110e306111af565b90505f8111611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613646565b60405180910390fd5b61115a611c82565b50565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111fc611a3e565b6112055f6120ad565b565b60095481565b600f5481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c19061325c565b80601f01602080910402602001604051908101604052809291908181526020018280546112ed9061325c565b80156113385780601f1061130f57610100808354040283529160200191611338565b820191905f5260205f20905b81548152906001019060200180831161131b57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000271081565b61136e611a3e565b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f4906136d4565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f133205826040516114979190612e50565b60405180910390a25050565b5f5f6114ad611ac5565b90506114ba818585611b70565b600191505092915050565b6114cd611a3e565b80600d5403611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613762565b60405180910390fd5b6001811015611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c906137f0565b60405180910390fd5b80600d819055507fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e488160405161158b9190612e78565b60405180910390a150565b600b5481565b5f603846036115c1577310ed43c718714eb63d5aa57b78b54704e256024e9050611650565b606146036115e55773d99d1c33f9fc3444f8101754abc46c52416550d19050611650565b60014614806115f45750600546145b1561161557737a250d5630b4cf539739df2c5dacb4c659f2488d9050611650565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116479061387e565b60405180910390fd5b90565b61165b611a3e565b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613434565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe1826040516117849190612e50565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b611820611a3e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611890575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016118879190612ea0565b60405180910390fd5b611899816120ad565b50565b6118a4611a3e565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611909906138e6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361198e573373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611988573d5f5f3e3d5ffd5b50611a3b565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119cc9190612ea0565b602060405180830381865afa1580156119e7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0b9190613918565b9050611a3833828473ffffffffffffffffffffffffffffffffffffffff166121709092919063ffffffff16565b50505b50565b611a46611ac5565b73ffffffffffffffffffffffffffffffffffffffff16611a6461128a565b73ffffffffffffffffffffffffffffffffffffffff1614611ac357611a87611ac5565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611aba9190612ea0565b60405180910390fd5b565b5f33905090565b611ad983838360016121ef565b505050565b5f611ae98484611790565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b6a5781811015611b5b578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611b5293929190613943565b60405180910390fd5b611b6984848484035f6121ef565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611be0575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611bd79190612ea0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c50575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611c479190612ea0565b60405180910390fd5b611c5b8383836123be565b505050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001600c60146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115611cb957611cb8613978565b5b604051908082528060200260200182016040528015611ce75781602001602082028036833780820191505090505b50905030815f81518110611cfe57611cfd6139a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc591906139e6565b81600181518110611dd957611dd86139a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f611e1d306111af565b90505f600854600b54611e30919061316d565b90505f81600b5484611e429190613a11565b611e4c9190613a7f565b90505f8184611e5b9190613aaf565b90505f821115611f11577f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f88600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611ee7959493929190613bd2565b5f604051808303815f87803b158015611efe575f5ffd5b505af1925050508015611f0f575060015b505b5f81111561207e575f600282611f279190613a7f565b90505f8183611f369190613aaf565b90507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8a30426040518663ffffffff1660e01b8152600401611f99959493929190613bd2565b5f604051808303815f87803b158015611fb0575f5ffd5b505af1925050508015611fc1575060015b505f4790505f81111561207a577f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f61dead426040518863ffffffff1660e01b815260040161203496959493929190613c2a565b60606040518083038185885af19350505050801561207057506040513d601f19601f8201168201806040525081019061206d9190613c89565b60015b15612079575050505b5b5050505b5f600b819055505f60088190555050505050505f600c60146101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6121ea838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016121a3929190613cd9565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129e5565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361225f575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016122569190612ea0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122cf575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016122c69190612ea0565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156123b8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516123af9190612e78565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061242357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561243857612433838383612a80565b6129e0565b5f810361244f5761244a83835f612a80565b6129e0565b7f00000000000000000000000050528216e3a3bca66c4064fce3d50aea8d9e68fa73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124c55742600f819055506001600e60016101000a81548160ff0219169083151502179055505b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612522575061252082611238565b155b801561253a5750600e60019054906101000a900460ff165b80156125545750610e10600f54612551919061316d565b42105b156125cf5760646001612565610b63565b61256f9190613a11565b6125799190613a7f565b81612583846111af565b61258d919061316d565b11156125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c590613d4a565b60405180910390fd5b5b5f6125d9306111af565b90505f600d5482101590508080156125fe5750600c60149054906101000a900460ff16155b8015612650575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156126675750600e5f9054906101000a900460ff165b80156126a6575061267661128a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156126e557506126b561128a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156126ff57505f600b546008546126fd919061316d565b115b1561270d5761270c611c82565b5b5f6001905060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127ad575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806127c45750600c60149054906101000a900460ff165b156127cd575f90505b80156129d1575f5f90505f5f905060115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128a5577f0000000000000000000000000000000000000000000000000000000000002710866006546128599190613a11565b6128639190613a7f565b90507f0000000000000000000000000000000000000000000000000000000000002710866009546128949190613a11565b61289e9190613a7f565b915061296c565b60115f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561296b577f0000000000000000000000000000000000000000000000000000000000002710866007546129239190613a11565b61292d9190613a7f565b90507f000000000000000000000000000000000000000000000000000000000000271086600a5461295e9190613a11565b6129689190613a7f565b91505b5b81600b5f82825461297d919061316d565b925050819055508060085f828254612995919061316d565b925050819055505f81836129a9919061316d565b90505f8111156129cd5780876129bf9190613aaf565b96506129cc893083612a80565b5b5050505b6129dc868686612a80565b5050505b505050565b5f5f60205f8451602086015f885af180612a04576040513d5f823e3d81fd5b3d92505f519150505f8214612a1d576001811415612a38565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612a7a57836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401612a719190612ea0565b60405180910390fd5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ad0578060025f828254612ac4919061316d565b92505081905550612b9e565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b59578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612b5093929190613943565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612be5578060025f8282540392505081905550612c2f565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c8c9190612e78565b60405180910390a3505050565b5f5ffd5b5f819050919050565b612caf81612c9d565b8114612cb9575f5ffd5b50565b5f81359050612cca81612ca6565b92915050565b5f5f60408385031215612ce657612ce5612c99565b5b5f612cf385828601612cbc565b9250506020612d0485828601612cbc565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d5082612d0e565b612d5a8185612d18565b9350612d6a818560208601612d28565b612d7381612d36565b840191505092915050565b5f6020820190508181035f830152612d968184612d46565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612dc782612d9e565b9050919050565b612dd781612dbd565b8114612de1575f5ffd5b50565b5f81359050612df281612dce565b92915050565b5f5f60408385031215612e0e57612e0d612c99565b5b5f612e1b85828601612de4565b9250506020612e2c85828601612cbc565b9150509250929050565b5f8115159050919050565b612e4a81612e36565b82525050565b5f602082019050612e635f830184612e41565b92915050565b612e7281612c9d565b82525050565b5f602082019050612e8b5f830184612e69565b92915050565b612e9a81612dbd565b82525050565b5f602082019050612eb35f830184612e91565b92915050565b5f819050919050565b5f612edc612ed7612ed284612d9e565b612eb9565b612d9e565b9050919050565b5f612eed82612ec2565b9050919050565b5f612efe82612ee3565b9050919050565b612f0e81612ef4565b82525050565b5f602082019050612f275f830184612f05565b92915050565b612f3681612e36565b8114612f40575f5ffd5b50565b5f81359050612f5181612f2d565b92915050565b5f60208284031215612f6c57612f6b612c99565b5b5f612f7984828501612f43565b91505092915050565b5f5f5f60608486031215612f9957612f98612c99565b5b5f612fa686828701612de4565b9350506020612fb786828701612de4565b9250506040612fc886828701612cbc565b9150509250925092565b5f60ff82169050919050565b612fe781612fd2565b82525050565b5f6020820190506130005f830184612fde565b92915050565b5f5f6040838503121561301c5761301b612c99565b5b5f61302985828601612de4565b925050602061303a85828601612f43565b9150509250929050565b5f6020828403121561305957613058612c99565b5b5f61306684828501612de4565b91505092915050565b5f6020828403121561308457613083612c99565b5b5f61309184828501612cbc565b91505092915050565b5f5f604083850312156130b0576130af612c99565b5b5f6130bd85828601612de4565b92505060206130ce85828601612de4565b9150509250929050565b7f4275792054617820616c7265616479206f6e207468617420616d6f756e7400005f82015250565b5f61310c601e83612d18565b9150613117826130d8565b602082019050919050565b5f6020820190508181035f83015261313981613100565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61317782612c9d565b915061318283612c9d565b925082820190508082111561319a57613199613140565b5b92915050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e20323025005f82015250565b5f6131d4601f83612d18565b91506131df826131a0565b602082019050919050565b5f6020820190508181035f830152613201816131c8565b9050919050565b5f60408201905061321b5f830185612e69565b6132286020830184612e69565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061327357607f821691505b6020821081036132865761328561322f565b5b50919050565b7f537761704261636b20616c7265616479206f6e207374617475730000000000005f82015250565b5f6132c0601a83612d18565b91506132cb8261328c565b602082019050919050565b5f6020820190508181035f8301526132ed816132b4565b9050919050565b7f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74005f82015250565b5f613328601f83612d18565b9150613333826132f4565b602082019050919050565b5f6020820190508181035f8301526133558161331c565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203230255f82015250565b5f613390602083612d18565b915061339b8261335c565b602082019050919050565b5f6020820190508181035f8301526133bd81613384565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f61341e602a83612d18565b9150613429826133c4565b604082019050919050565b5f6020820190508181035f83015261344b81613412565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c726561647920746861745f8201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b5f6134ac602883612d18565b91506134b782613452565b604082019050919050565b5f6020820190508181035f8301526134d9816134a0565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f61353a602b83612d18565b9150613545826134e0565b604082019050919050565b5f6020820190508181035f8301526135678161352e565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e5f8201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b5f6135c8602583612d18565b91506135d38261356e565b604082019050919050565b5f6020820190508181035f8301526135f5816135bc565b9050919050565b7f43616e742053776170204261636b203020546f6b656e210000000000000000005f82015250565b5f613630601783612d18565b915061363b826135fc565b602082019050919050565b5f6020820190508181035f83015261365d81613624565b9050919050565b7f50616972206164647265737320697320616c7265616479207468652076616c755f8201527f65206f6620277374617475732700000000000000000000000000000000000000602082015250565b5f6136be602d83612d18565b91506136c982613664565b604082019050919050565b5f6020820190508181035f8301526136eb816136b2565b9050919050565b7f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e2074685f8201527f617420616d6f756e740000000000000000000000000000000000000000000000602082015250565b5f61374c602983612d18565b9150613757826136f2565b604082019050919050565b5f6020820190508181035f83015261377981613740565b9050919050565b7f416d6f756e74206d75737420626520657175616c206f722067726561746572205f8201527f7468616e20312057656900000000000000000000000000000000000000000000602082015250565b5f6137da602a83612d18565b91506137e582613780565b604082019050919050565b5f6020820190508181035f830152613807816137ce565b9050919050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574775f8201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b5f613868602383612d18565b91506138738261380e565b604082019050919050565b5f6020820190508181035f8301526138958161385c565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e735f82015250565b5f6138d0602083612d18565b91506138db8261389c565b602082019050919050565b5f6020820190508181035f8301526138fd816138c4565b9050919050565b5f8151905061391281612ca6565b92915050565b5f6020828403121561392d5761392c612c99565b5b5f61393a84828501613904565b91505092915050565b5f6060820190506139565f830186612e91565b6139636020830185612e69565b6139706040830184612e69565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506139e081612dce565b92915050565b5f602082840312156139fb576139fa612c99565b5b5f613a08848285016139d2565b91505092915050565b5f613a1b82612c9d565b9150613a2683612c9d565b9250828202613a3481612c9d565b91508282048414831517613a4b57613a4a613140565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a8982612c9d565b9150613a9483612c9d565b925082613aa457613aa3613a52565b5b828204905092915050565b5f613ab982612c9d565b9150613ac483612c9d565b9250828203905081811115613adc57613adb613140565b5b92915050565b5f819050919050565b5f613b05613b00613afb84613ae2565b612eb9565b612c9d565b9050919050565b613b1581613aeb565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613b4d81612dbd565b82525050565b5f613b5e8383613b44565b60208301905092915050565b5f602082019050919050565b5f613b8082613b1b565b613b8a8185613b25565b9350613b9583613b35565b805f5b83811015613bc5578151613bac8882613b53565b9750613bb783613b6a565b925050600181019050613b98565b5085935050505092915050565b5f60a082019050613be55f830188612e69565b613bf26020830187613b0c565b8181036040830152613c048186613b76565b9050613c136060830185612e91565b613c206080830184612e69565b9695505050505050565b5f60c082019050613c3d5f830189612e91565b613c4a6020830188612e69565b613c576040830187613b0c565b613c646060830186613b0c565b613c716080830185612e91565b613c7e60a0830184612e69565b979650505050505050565b5f5f5f60608486031215613ca057613c9f612c99565b5b5f613cad86828701613904565b9350506020613cbe86828701613904565b9250506040613ccf86828701613904565b9150509250925092565b5f604082019050613cec5f830185612e91565b613cf96020830184612e69565b9392505050565b7f4d61782077616c6c65742062616c616e636520657863656564656400000000005f82015250565b5f613d34601b83612d18565b9150613d3f82613d00565b602082019050919050565b5f6020820190508181035f830152613d6181613d28565b905091905056fea26469706673582212202f588ce69a7713bf99fe41cb5fe7e7c0ff0378bfba88556b31ae6f307e1a048564736f6c634300081c0033

Deployed Bytecode Sourcemap

24168:13257:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28738:598;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3407:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4299:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24242:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27529:248;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24666:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3701:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30935:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4522:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29344:616;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24279:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24317:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27314:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31167:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24396:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24771:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24724:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32637:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24628:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29968:580;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37217:205;;;;;;;;;;;;;:::i;:::-;;31560:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3808:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8390:103;;;;;;;;;;;;;:::i;:::-;;24359:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24801:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24521:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32106:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8121:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3506:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24476:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31720:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3934:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30556:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24434:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27785:490;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32266:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4124:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24588:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8501:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28283:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28738:598;8080:13;:11;:13::i;:::-;28905:16:::1;28886:15;;:35;;:91;;;;28961:16;28942:15;;:35;;28886:91;28864:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;29107:4;29087:16;29068;:35;;;;:::i;:::-;:43;;29046:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;29201:16;29183:15;:34;;;;29246:16;29228:15;:34;;;;29280:48;29293:16;29311;29280:48;;;;;;;:::i;:::-;;;;;;;;28738:598:::0;;:::o;3407:91::-;3452:13;3485:5;3478:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3407:91;:::o;4299:215::-;4397:4;4414:13;4430:12;:10;:12::i;:::-;4414:28;;4453:31;4462:5;4469:7;4478:5;4453:8;:31::i;:::-;4502:4;4495:11;;;4299:215;;;;:::o;24242:30::-;;;;:::o;27529:248::-;27577:7;27618:2;27601:13;:19;:41;;;;27641:1;27624:13;:18;27601:41;27597:173;;;27666:42;27659:49;;;;27597:173;27748:10;27741:17;;27529:248;;:::o;24666:51::-;;;:::o;3701:99::-;3753:7;3780:12;;3773:19;;3701:99;:::o;30935:224::-;8080:13;:11;:13::i;:::-;31031:6:::1;31010:27;;:17;;;;;;;;;;;:27;;::::0;31002:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31101:6;31081:17;;:26;;;;;;;;;;;;;;;;;;31123:28;31144:6;31123:28;;;;;;:::i;:::-;;;;;;;;30935:224:::0;:::o;4522:283::-;4643:4;4660:15;4678:12;:10;:12::i;:::-;4660:30;;4701:37;4717:4;4723:7;4732:5;4701:15;:37::i;:::-;4749:26;4759:4;4765:2;4769:5;4749:9;:26::i;:::-;4793:4;4786:11;;;4522:283;;;;;:::o;29344:616::-;8080:13;:11;:13::i;:::-;29515:17:::1;29495:16;;:37;;:95;;;;29573:17;29553:16;;:37;;29495:95;29473:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;29723:4;29702:17;29682;:37;;;;:::i;:::-;:45;;29660:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;29819:17;29800:16;:36;;;;29866:17;29847:16;:36;;;;29901:51;29915:17;29934;29901:51;;;;;;;:::i;:::-;;;;;;;;29344:616:::0;;:::o;24279:31::-;;;;:::o;24317:33::-;;;;:::o;27314:84::-;27364:5;27389:1;27382:8;;27314:84;:::o;31167:385::-;8080:13;:11;:13::i;:::-;31347:8:::1;31310:45;;:24;:33;31335:7;31310:33;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;31288:137:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31472:8;31436:24;:33;31461:7;31436:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;31526:7;31498:46;;;31535:8;31498:46;;;;;;:::i;:::-;;;;;;;;31167:385:::0;;:::o;24396:31::-;;;;:::o;24771:23::-;;;;;;;;;;;;;:::o;24724:38::-;;;:::o;32637:126::-;32703:4;32727:19;:28;32747:7;32727:28;;;;;;;;;;;;;;;;;;;;;;;;;32720:35;;32637:126;;;:::o;24628:29::-;;;;;;;;;;;;;:::o;29968:580::-;8080:13;:11;:13::i;:::-;30094:15:::1;;;;;;;;;;;30074:35;;:16;:35;;::::0;30052:125:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30238:1;30210:30;;:16;:30;;::::0;30188:123:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30345:28;30356:16;30345:10;:28::i;:::-;30344:29;30322:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;30469:16;30451:15;;:34;;;;;;;;;;;;;;;;;;30523:16;30501:39;;;;;;;;;;;;29968:580:::0;:::o;37217:205::-;37263:28;37294:24;37312:4;37294:9;:24::i;:::-;37263:55;;37362:1;37339:20;:24;37331:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37404:10;:8;:10::i;:::-;37252:170;37217:205::o;31560:152::-;31647:4;31671:24;:33;31696:7;31671:33;;;;;;;;;;;;;;;;;;;;;;;;;31664:40;;31560:152;;;:::o;3808:118::-;3873:7;3900:9;:18;3910:7;3900:18;;;;;;;;;;;;;;;;3893:25;;3808:118;;;:::o;8390:103::-;8080:13;:11;:13::i;:::-;8455:30:::1;8482:1;8455:18;:30::i;:::-;8390:103::o:0;24359:30::-;;;;:::o;24801:26::-;;;;:::o;24521:30::-;;;;;;;;;;;;;:::o;32106:152::-;32193:4;32217:27;:33;32245:4;32217:33;;;;;;;;;;;;;;;;;;;;;;;;;32210:40;;32106:152;;;:::o;8121:87::-;8167:7;8194:6;;;;;;;;;;;8187:13;;8121:87;:::o;3506:95::-;3553:13;3586:7;3579:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3506:95;:::o;24476:36::-;;;:::o;31720:378::-;8080:13;:11;:13::i;:::-;31896:6:::1;31859:43;;:27;:33;31887:4;31859:33;;;;;;;;;;;;;;;;;;;;;;;;;:43;;::::0;31837:138:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32022:6;31986:27;:33;32014:4;31986:33;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;32077:4;32046:44;;;32083:6;32046:44;;;;;;:::i;:::-;;;;;;;;31720:378:::0;;:::o;3934:182::-;4003:4;4020:13;4036:12;:10;:12::i;:::-;4020:28;;4059:27;4069:5;4076:2;4080:5;4059:9;:27::i;:::-;4104:4;4097:11;;;3934:182;;;;:::o;30556:371::-;8080:13;:11;:13::i;:::-;30677:6:::1;30655:18;;:28:::0;30633:119:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30781:1;30771:6;:11;;30763:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30863:6;30842:18;:27;;;;30887:32;30912:6;30887:32;;;;;;:::i;:::-;;;;;;;;30556:371:::0;:::o;24434:33::-;;;;:::o;27785:490::-;27834:7;27875:2;27858:13;:19;27854:414;;27901:42;27894:49;;;;27854:414;27982:2;27965:13;:19;27961:307;;28008:42;28001:49;;;;27961:307;28089:1;28072:13;:18;:40;;;;28111:1;28094:13;:18;28072:40;28068:200;;;28136:42;28129:49;;;;28068:200;28211:45;;;;;;;;;;:::i;:::-;;;;;;;;27785:490;;:::o;32266:363::-;8080:13;:11;:13::i;:::-;32435:8:::1;32403:40;;:19;:28;32423:7;32403:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;32381:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32555:8;32524:19;:28;32544:7;32524:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32603:7;32581:40;;;32612:8;32581:40;;;;;;:::i;:::-;;;;;;;;32266:363:::0;;:::o;4124:167::-;4229:7;4256:11;:18;4268:5;4256:18;;;;;;;;;;;;;;;:27;4275:7;4256:27;;;;;;;;;;;;;;;;4249:34;;4124:167;;;;:::o;24588:33::-;;;;:::o;8501:220::-;8080:13;:11;:13::i;:::-;8606:1:::1;8586:22;;:8;:22;;::::0;8582:93:::1;;8660:1;8632:31;;;;;;;;;;;:::i;:::-;;;;;;;;8582:93;8685:28;8704:8;8685:18;:28::i;:::-;8501:220:::0;:::o;28283:447::-;8080:13;:11;:13::i;:::-;28379:4:::1;28362:22;;:5;:22;;::::0;28354:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28455:3;28438:21;;:5;:21;;::::0;28434:126:::1;;28484:10;28476:28;;:51;28505:21;28476:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28542:7;;28434:126;28570:17;28597:5;28570:33;;28614:15;28632:10;:20;;;28661:4;28632:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28614:53;;28678:44;28702:10;28714:7;28678:10;:23;;;;:44;;;;;:::i;:::-;28343:387;;8104:1;28283:447:::0;:::o;8216:166::-;8287:12;:10;:12::i;:::-;8276:23;;:7;:5;:7::i;:::-;:23;;;8272:103;;8350:12;:10;:12::i;:::-;8323:40;;;;;;;;;;;:::i;:::-;;;;;;;;8272:103;8216:166::o;1083:98::-;1136:7;1163:10;1156:17;;1083:98;:::o;6307:130::-;6392:37;6401:5;6408:7;6417:5;6424:4;6392:8;:37::i;:::-;6307:130;;;:::o;6939:603::-;7073:24;7100:25;7110:5;7117:7;7100:9;:25::i;:::-;7073:52;;7160:17;7140:16;:37;7136:399;;7217:5;7198:16;:24;7194:214;;;7299:7;7329:16;7368:5;7250:142;;;;;;;;;;;;;:::i;:::-;;;;;;;;7194:214;7451:57;7460:5;7467:7;7495:5;7476:16;:24;7502:5;7451:8;:57::i;:::-;7136:399;7062:480;6939:603;;;:::o;4813:308::-;4913:1;4897:18;;:4;:18;;;4893:88;;4966:1;4939:30;;;;;;;;;;;:::i;:::-;;;;;;;;4893:88;5009:1;4995:16;;:2;:16;;;4991:88;;5064:1;5035:32;;;;;;;;;;;:::i;:::-;;;;;;;;4991:88;5089:24;5097:4;5103:2;5107:5;5089:7;:24::i;:::-;4813:308;;;:::o;27406:115::-;27466:4;27512:1;27490:7;:19;;;:23;27483:30;;27406:115;;;:::o;35140:2069::-;25068:4;25057:8;;:15;;;;;;;;;;;;;;;;;;35187:27:::1;35231:1;35217:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35187:46;;35268:4;35244:10;35255:1;35244:13;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;::::0;::::1;35300:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35284:10;35295:1;35284:13;;;;;;;;:::i;:::-;;;;;;;:38;;;;;;;;;::::0;::::1;35335:28;35366:24;35384:4;35366:9;:24::i;:::-;35335:55;;35401:22;35447:18;;35426;;:39;;;;:::i;:::-;35401:64;;35478:28;35570:14;35547:18;;35510:20;:56;;;;:::i;:::-;35509:75;;;;:::i;:::-;35478:106;;35597:28;35665:20;35629;:56;;;;:::i;:::-;35597:89;;35726:1;35703:20;:24;35699:418;;;35765:15;:88;;;35880:20;35927:1;35955:10;36000:15;;;;;;;;;;;36043;35765:316;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35744:362:::0;35699:418:::1;36156:1;36133:20;:24;36129:1005;;;36174:12;36212:1;36189:20;:24;;;;:::i;:::-;36174:39;;36228:17;36271:4;36248:20;:27;;;;:::i;:::-;36228:47;;36313:15;:88;;;36428:4;36459:1;36487:10;36532:4;36564:15;36313:289;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36292:335:::0;36643:26:::1;36672:21;36643:50;;36735:1;36714:18;:22;36710:413;;;36782:15;:31;;;36821:18;36875:4;36907:9;36943:1;36971;37007:6;37041:15;36782:297;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36757:351:::0;::::1;;;;;;36710:413;36159:975;;;36129:1005;37167:1;37146:18;:22;;;;37200:1;37179:18;:22;;;;35176:2033;;;;;25106:5:::0;25095:8;;:16;;;;;;;;;;;;;;;;;;35140:2069::o;8729:191::-;8803:16;8822:6;;;;;;;;;;;8803:25;;8848:8;8839:6;;:17;;;;;;;;;;;;;;;;;;8903:8;8872:40;;8893:8;8872:40;;;;;;;;;;;;8792:128;8729:191;:::o;13555:162::-;13638:71;13658:5;13680;:14;;;13697:2;13701:5;13665:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13638:19;:71::i;:::-;13555:162;;;:::o;6445:486::-;6618:1;6601:19;;:5;:19;;;6597:91;;6673:1;6644:32;;;;;;;;;;;:::i;:::-;;;;;;;;6597:91;6721:1;6702:21;;:7;:21;;;6698:92;;6775:1;6747:31;;;;;;;;;;;:::i;:::-;;;;;;;;6698:92;6830:5;6800:11;:18;6812:5;6800:18;;;;;;;;;;;;;;;:27;6819:7;6800:27;;;;;;;;;;;;;;;:35;;;;6850:9;6846:78;;;6897:7;6881:31;;6890:5;6881:31;;;6906:5;6881:31;;;;;;:::i;:::-;;;;;;;;6846:78;6445:486;;;;:::o;32771:2361::-;32912:1;32896:18;;:4;:18;;;:38;;;;32932:1;32918:16;;:2;:16;;;32896:38;32892:122;;;32951:30;32965:4;32971:2;32975:5;32951:13;:30::i;:::-;32996:7;;32892:122;33037:1;33028:5;:10;33024:90;;33055:26;33069:4;33075:2;33079:1;33055:13;:26::i;:::-;33096:7;;33024:90;33136:13;33130:19;;:2;:19;;;33126:114;;33180:15;33166:11;:29;;;;33224:4;33210:11;;:18;;;;;;;;;;;;;;;;;;33126:114;33271:24;:28;33296:2;33271:28;;;;;;;;;;;;;;;;;;;;;;;;;33270:29;:77;;;;;33317:30;33344:2;33317:26;:30::i;:::-;33316:31;33270:77;:105;;;;;33364:11;;;;;;;;;;;33270:105;:161;;;;;33424:7;33410:11;;:21;;;;:::i;:::-;33392:15;:39;33270:161;33252:357;;;33531:3;33526:1;33510:13;:11;:13::i;:::-;:17;;;;:::i;:::-;33509:25;;;;:::i;:::-;33500:5;33484:13;33494:2;33484:9;:13::i;:::-;:21;;;;:::i;:::-;:50;;33458:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;33252:357;33621:28;33652:24;33670:4;33652:9;:24::i;:::-;33621:55;;33689:12;33728:18;;33704:20;:42;;33689:57;;33777:7;:33;;;;;33802:8;;;;;;;;;;;33801:9;33777:33;:81;;;;;33827:27;:31;33855:2;33827:31;;;;;;;;;;;;;;;;;;;;;;;;;33777:81;:115;;;;;33875:17;;;;;;;;;;;33777:115;:147;;;;;33917:7;:5;:7::i;:::-;33909:15;;:4;:15;;;;33777:147;:177;;;;;33947:7;:5;:7::i;:::-;33941:13;;:2;:13;;;;33777:177;:237;;;;;34013:1;33992:18;;33971;;:39;;;;:::i;:::-;:43;33777:237;33759:304;;;34041:10;:8;:10::i;:::-;33759:304;34075:12;34090:4;34075:19;;34111;:25;34131:4;34111:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34140:19;:23;34160:2;34140:23;;;;;;;;;;;;;;;;;;;;;;;;;34111:52;:64;;;;34167:8;;;;;;;;;;;34111:64;34107:112;;;34202:5;34192:15;;34107:112;34235:7;34231:851;;;34259:20;34282:1;34259:24;;34298:20;34321:1;34298:24;;34343:27;:33;34371:4;34343:33;;;;;;;;;;;;;;;;;;;;;;;;;34339:408;;;34440:11;34431:5;34413:15;;:23;;;;:::i;:::-;34412:39;;;;:::i;:::-;34397:54;;34513:11;34504:5;34486:15;;:23;;;;:::i;:::-;34485:39;;;;:::i;:::-;34470:54;;34339:408;;;34550:27;:31;34578:2;34550:31;;;;;;;;;;;;;;;;;;;;;;;;;34546:201;;;34646:11;34637:5;34618:16;;:24;;;;:::i;:::-;34617:40;;;;:::i;:::-;34602:55;;34720:11;34711:5;34692:16;;:24;;;;:::i;:::-;34691:40;;;;:::i;:::-;34676:55;;34546:201;34339:408;34785:12;34763:18;;:34;;;;;;;:::i;:::-;;;;;;;;34834:12;34812:18;;:34;;;;;;;:::i;:::-;;;;;;;;34863:19;34900:12;34885;:27;;;;:::i;:::-;34863:49;;34947:1;34933:11;:15;34929:142;;;34978:11;34969:20;;;;;:::i;:::-;;;35008:47;35022:4;35036;35043:11;35008:13;:47::i;:::-;34929:142;34244:838;;;34231:851;35094:30;35108:4;35114:2;35118:5;35094:13;:30::i;:::-;32881:2251;;;32771:2361;;;;:::o;16570:868::-;16651:18;16680:19;16940:4;16920:1;16896:4;16890:11;16866:4;16860;16856:15;16836:1;16812:5;16788;16765:194;16985:7;16975:180;;17030:4;17024:11;17076:16;17073:1;17068:3;17053:40;17123:16;17118:3;17111:29;16975:180;17183:16;17169:30;;17234:1;17228:8;17213:23;;16735:512;17291:1;17277:10;:15;:68;;17344:1;17329:11;:16;;17277:68;;;17325:1;17303:5;17295:26;;;:31;17277:68;17259:172;;;17412:5;17379:40;;;;;;;;;;;:::i;:::-;;;;;;;;17259:172;16640:798;;16570:868;;:::o;5129:730::-;5235:1;5219:18;;:4;:18;;;5215:369;;5270:5;5254:12;;:21;;;;;;;:::i;:::-;;;;;;;;5215:369;;;5308:19;5330:9;:15;5340:4;5330:15;;;;;;;;;;;;;;;;5308:37;;5378:5;5364:11;:19;5360:117;;;5436:4;5442:11;5455:5;5411:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;5360:117;5552:5;5538:11;:19;5520:9;:15;5530:4;5520:15;;;;;;;;;;;;;;;:37;;;;5293:291;5215:369;5614:1;5600:16;;:2;:16;;;5596:213;;5678:5;5662:12;;:21;;;;;;;;;;;5596:213;;;5777:5;5760:9;:13;5770:2;5760:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;5596:213;5841:2;5826:25;;5835:4;5826:25;;;5845:5;5826:25;;;;;;:::i;:::-;;;;;;;;5129:730;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:139::-;1539:6;1534:3;1529;1523:23;1580:1;1571:6;1566:3;1562:16;1555:27;1450:139;;;:::o;1595:102::-;1636:6;1687:2;1683:7;1678:2;1671:5;1667:14;1663:28;1653:38;;1595:102;;;:::o;1703:377::-;1791:3;1819:39;1852:5;1819:39;:::i;:::-;1874:71;1938:6;1933:3;1874:71;:::i;:::-;1867:78;;1954:65;2012:6;2007:3;2000:4;1993:5;1989:16;1954:65;:::i;:::-;2044:29;2066:6;2044:29;:::i;:::-;2039:3;2035:39;2028:46;;1795:285;1703:377;;;;:::o;2086:313::-;2199:4;2237:2;2226:9;2222:18;2214:26;;2286:9;2280:4;2276:20;2272:1;2261:9;2257:17;2250:47;2314:78;2387:4;2378:6;2314:78;:::i;:::-;2306:86;;2086:313;;;;:::o;2405:126::-;2442:7;2482:42;2475:5;2471:54;2460:65;;2405:126;;;:::o;2537:96::-;2574:7;2603:24;2621:5;2603:24;:::i;:::-;2592:35;;2537:96;;;:::o;2639:122::-;2712:24;2730:5;2712:24;:::i;:::-;2705:5;2702:35;2692:63;;2751:1;2748;2741:12;2692:63;2639:122;:::o;2767:139::-;2813:5;2851:6;2838:20;2829:29;;2867:33;2894:5;2867:33;:::i;:::-;2767:139;;;;:::o;2912:474::-;2980:6;2988;3037:2;3025:9;3016:7;3012:23;3008:32;3005:119;;;3043:79;;:::i;:::-;3005:119;3163:1;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3134:117;3290:2;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3261:118;2912:474;;;;;:::o;3392:90::-;3426:7;3469:5;3462:13;3455:21;3444:32;;3392:90;;;:::o;3488:109::-;3569:21;3584:5;3569:21;:::i;:::-;3564:3;3557:34;3488:109;;:::o;3603:210::-;3690:4;3728:2;3717:9;3713:18;3705:26;;3741:65;3803:1;3792:9;3788:17;3779:6;3741:65;:::i;:::-;3603:210;;;;:::o;3819:118::-;3906:24;3924:5;3906:24;:::i;:::-;3901:3;3894:37;3819:118;;:::o;3943:222::-;4036:4;4074:2;4063:9;4059:18;4051:26;;4087:71;4155:1;4144:9;4140:17;4131:6;4087:71;:::i;:::-;3943:222;;;;:::o;4171:118::-;4258:24;4276:5;4258:24;:::i;:::-;4253:3;4246:37;4171:118;;:::o;4295:222::-;4388:4;4426:2;4415:9;4411:18;4403:26;;4439:71;4507:1;4496:9;4492:17;4483:6;4439:71;:::i;:::-;4295:222;;;;:::o;4523:60::-;4551:3;4572:5;4565:12;;4523:60;;;:::o;4589:142::-;4639:9;4672:53;4690:34;4699:24;4717:5;4699:24;:::i;:::-;4690:34;:::i;:::-;4672:53;:::i;:::-;4659:66;;4589:142;;;:::o;4737:126::-;4787:9;4820:37;4851:5;4820:37;:::i;:::-;4807:50;;4737:126;;;:::o;4869:153::-;4946:9;4979:37;5010:5;4979:37;:::i;:::-;4966:50;;4869:153;;;:::o;5028:185::-;5142:64;5200:5;5142:64;:::i;:::-;5137:3;5130:77;5028:185;;:::o;5219:276::-;5339:4;5377:2;5366:9;5362:18;5354:26;;5390:98;5485:1;5474:9;5470:17;5461:6;5390:98;:::i;:::-;5219:276;;;;:::o;5501:116::-;5571:21;5586:5;5571:21;:::i;:::-;5564:5;5561:32;5551:60;;5607:1;5604;5597:12;5551:60;5501:116;:::o;5623:133::-;5666:5;5704:6;5691:20;5682:29;;5720:30;5744:5;5720:30;:::i;:::-;5623:133;;;;:::o;5762:323::-;5818:6;5867:2;5855:9;5846:7;5842:23;5838:32;5835:119;;;5873:79;;:::i;:::-;5835:119;5993:1;6018:50;6060:7;6051:6;6040:9;6036:22;6018:50;:::i;:::-;6008:60;;5964:114;5762:323;;;;:::o;6091:619::-;6168:6;6176;6184;6233:2;6221:9;6212:7;6208:23;6204:32;6201:119;;;6239:79;;:::i;:::-;6201:119;6359:1;6384:53;6429:7;6420:6;6409:9;6405:22;6384:53;:::i;:::-;6374:63;;6330:117;6486:2;6512:53;6557:7;6548:6;6537:9;6533:22;6512:53;:::i;:::-;6502:63;;6457:118;6614:2;6640:53;6685:7;6676:6;6665:9;6661:22;6640:53;:::i;:::-;6630:63;;6585:118;6091:619;;;;;:::o;6716:86::-;6751:7;6791:4;6784:5;6780:16;6769:27;;6716:86;;;:::o;6808:112::-;6891:22;6907:5;6891:22;:::i;:::-;6886:3;6879:35;6808:112;;:::o;6926:214::-;7015:4;7053:2;7042:9;7038:18;7030:26;;7066:67;7130:1;7119:9;7115:17;7106:6;7066:67;:::i;:::-;6926:214;;;;:::o;7146:468::-;7211:6;7219;7268:2;7256:9;7247:7;7243:23;7239:32;7236:119;;;7274:79;;:::i;:::-;7236:119;7394:1;7419:53;7464:7;7455:6;7444:9;7440:22;7419:53;:::i;:::-;7409:63;;7365:117;7521:2;7547:50;7589:7;7580:6;7569:9;7565:22;7547:50;:::i;:::-;7537:60;;7492:115;7146:468;;;;;:::o;7620:329::-;7679:6;7728:2;7716:9;7707:7;7703:23;7699:32;7696:119;;;7734:79;;:::i;:::-;7696:119;7854:1;7879:53;7924:7;7915:6;7904:9;7900:22;7879:53;:::i;:::-;7869:63;;7825:117;7620:329;;;;:::o;7955:::-;8014:6;8063:2;8051:9;8042:7;8038:23;8034:32;8031:119;;;8069:79;;:::i;:::-;8031:119;8189:1;8214:53;8259:7;8250:6;8239:9;8235:22;8214:53;:::i;:::-;8204:63;;8160:117;7955:329;;;;:::o;8290:474::-;8358:6;8366;8415:2;8403:9;8394:7;8390:23;8386:32;8383:119;;;8421:79;;:::i;:::-;8383:119;8541:1;8566:53;8611:7;8602:6;8591:9;8587:22;8566:53;:::i;:::-;8556:63;;8512:117;8668:2;8694:53;8739:7;8730:6;8719:9;8715:22;8694:53;:::i;:::-;8684:63;;8639:118;8290:474;;;;;:::o;8770:180::-;8910:32;8906:1;8898:6;8894:14;8887:56;8770:180;:::o;8956:366::-;9098:3;9119:67;9183:2;9178:3;9119:67;:::i;:::-;9112:74;;9195:93;9284:3;9195:93;:::i;:::-;9313:2;9308:3;9304:12;9297:19;;8956:366;;;:::o;9328:419::-;9494:4;9532:2;9521:9;9517:18;9509:26;;9581:9;9575:4;9571:20;9567:1;9556:9;9552:17;9545:47;9609:131;9735:4;9609:131;:::i;:::-;9601:139;;9328:419;;;:::o;9753:180::-;9801:77;9798:1;9791:88;9898:4;9895:1;9888:15;9922:4;9919:1;9912:15;9939:191;9979:3;9998:20;10016:1;9998:20;:::i;:::-;9993:25;;10032:20;10050:1;10032:20;:::i;:::-;10027:25;;10075:1;10072;10068:9;10061:16;;10096:3;10093:1;10090:10;10087:36;;;10103:18;;:::i;:::-;10087:36;9939:191;;;;:::o;10136:181::-;10276:33;10272:1;10264:6;10260:14;10253:57;10136:181;:::o;10323:366::-;10465:3;10486:67;10550:2;10545:3;10486:67;:::i;:::-;10479:74;;10562:93;10651:3;10562:93;:::i;:::-;10680:2;10675:3;10671:12;10664:19;;10323:366;;;:::o;10695:419::-;10861:4;10899:2;10888:9;10884:18;10876:26;;10948:9;10942:4;10938:20;10934:1;10923:9;10919:17;10912:47;10976:131;11102:4;10976:131;:::i;:::-;10968:139;;10695:419;;;:::o;11120:332::-;11241:4;11279:2;11268:9;11264:18;11256:26;;11292:71;11360:1;11349:9;11345:17;11336:6;11292:71;:::i;:::-;11373:72;11441:2;11430:9;11426:18;11417:6;11373:72;:::i;:::-;11120:332;;;;;:::o;11458:180::-;11506:77;11503:1;11496:88;11603:4;11600:1;11593:15;11627:4;11624:1;11617:15;11644:320;11688:6;11725:1;11719:4;11715:12;11705:22;;11772:1;11766:4;11762:12;11793:18;11783:81;;11849:4;11841:6;11837:17;11827:27;;11783:81;11911:2;11903:6;11900:14;11880:18;11877:38;11874:84;;11930:18;;:::i;:::-;11874:84;11695:269;11644:320;;;:::o;11970:176::-;12110:28;12106:1;12098:6;12094:14;12087:52;11970:176;:::o;12152:366::-;12294:3;12315:67;12379:2;12374:3;12315:67;:::i;:::-;12308:74;;12391:93;12480:3;12391:93;:::i;:::-;12509:2;12504:3;12500:12;12493:19;;12152:366;;;:::o;12524:419::-;12690:4;12728:2;12717:9;12713:18;12705:26;;12777:9;12771:4;12767:20;12763:1;12752:9;12748:17;12741:47;12805:131;12931:4;12805:131;:::i;:::-;12797:139;;12524:419;;;:::o;12949:181::-;13089:33;13085:1;13077:6;13073:14;13066:57;12949:181;:::o;13136:366::-;13278:3;13299:67;13363:2;13358:3;13299:67;:::i;:::-;13292:74;;13375:93;13464:3;13375:93;:::i;:::-;13493:2;13488:3;13484:12;13477:19;;13136:366;;;:::o;13508:419::-;13674:4;13712:2;13701:9;13697:18;13689:26;;13761:9;13755:4;13751:20;13747:1;13736:9;13732:17;13725:47;13789:131;13915:4;13789:131;:::i;:::-;13781:139;;13508:419;;;:::o;13933:182::-;14073:34;14069:1;14061:6;14057:14;14050:58;13933:182;:::o;14121:366::-;14263:3;14284:67;14348:2;14343:3;14284:67;:::i;:::-;14277:74;;14360:93;14449:3;14360:93;:::i;:::-;14478:2;14473:3;14469:12;14462:19;;14121:366;;;:::o;14493:419::-;14659:4;14697:2;14686:9;14682:18;14674:26;;14746:9;14740:4;14736:20;14732:1;14721:9;14717:17;14710:47;14774:131;14900:4;14774:131;:::i;:::-;14766:139;;14493:419;;;:::o;14918:229::-;15058:34;15054:1;15046:6;15042:14;15035:58;15127:12;15122:2;15114:6;15110:15;15103:37;14918:229;:::o;15153:366::-;15295:3;15316:67;15380:2;15375:3;15316:67;:::i;:::-;15309:74;;15392:93;15481:3;15392:93;:::i;:::-;15510:2;15505:3;15501:12;15494:19;;15153:366;;;:::o;15525:419::-;15691:4;15729:2;15718:9;15714:18;15706:26;;15778:9;15772:4;15768:20;15764:1;15753:9;15749:17;15742:47;15806:131;15932:4;15806:131;:::i;:::-;15798:139;;15525:419;;;:::o;15950:227::-;16090:34;16086:1;16078:6;16074:14;16067:58;16159:10;16154:2;16146:6;16142:15;16135:35;15950:227;:::o;16183:366::-;16325:3;16346:67;16410:2;16405:3;16346:67;:::i;:::-;16339:74;;16422:93;16511:3;16422:93;:::i;:::-;16540:2;16535:3;16531:12;16524:19;;16183:366;;;:::o;16555:419::-;16721:4;16759:2;16748:9;16744:18;16736:26;;16808:9;16802:4;16798:20;16794:1;16783:9;16779:17;16772:47;16836:131;16962:4;16836:131;:::i;:::-;16828:139;;16555:419;;;:::o;16980:230::-;17120:34;17116:1;17108:6;17104:14;17097:58;17189:13;17184:2;17176:6;17172:15;17165:38;16980:230;:::o;17216:366::-;17358:3;17379:67;17443:2;17438:3;17379:67;:::i;:::-;17372:74;;17455:93;17544:3;17455:93;:::i;:::-;17573:2;17568:3;17564:12;17557:19;;17216:366;;;:::o;17588:419::-;17754:4;17792:2;17781:9;17777:18;17769:26;;17841:9;17835:4;17831:20;17827:1;17816:9;17812:17;17805:47;17869:131;17995:4;17869:131;:::i;:::-;17861:139;;17588:419;;;:::o;18013:224::-;18153:34;18149:1;18141:6;18137:14;18130:58;18222:7;18217:2;18209:6;18205:15;18198:32;18013:224;:::o;18243:366::-;18385:3;18406:67;18470:2;18465:3;18406:67;:::i;:::-;18399:74;;18482:93;18571:3;18482:93;:::i;:::-;18600:2;18595:3;18591:12;18584:19;;18243:366;;;:::o;18615:419::-;18781:4;18819:2;18808:9;18804:18;18796:26;;18868:9;18862:4;18858:20;18854:1;18843:9;18839:17;18832:47;18896:131;19022:4;18896:131;:::i;:::-;18888:139;;18615:419;;;:::o;19040:173::-;19180:25;19176:1;19168:6;19164:14;19157:49;19040:173;:::o;19219:366::-;19361:3;19382:67;19446:2;19441:3;19382:67;:::i;:::-;19375:74;;19458:93;19547:3;19458:93;:::i;:::-;19576:2;19571:3;19567:12;19560:19;;19219:366;;;:::o;19591:419::-;19757:4;19795:2;19784:9;19780:18;19772:26;;19844:9;19838:4;19834:20;19830:1;19819:9;19815:17;19808:47;19872:131;19998:4;19872:131;:::i;:::-;19864:139;;19591:419;;;:::o;20016:232::-;20156:34;20152:1;20144:6;20140:14;20133:58;20225:15;20220:2;20212:6;20208:15;20201:40;20016:232;:::o;20254:366::-;20396:3;20417:67;20481:2;20476:3;20417:67;:::i;:::-;20410:74;;20493:93;20582:3;20493:93;:::i;:::-;20611:2;20606:3;20602:12;20595:19;;20254:366;;;:::o;20626:419::-;20792:4;20830:2;20819:9;20815:18;20807:26;;20879:9;20873:4;20869:20;20865:1;20854:9;20850:17;20843:47;20907:131;21033:4;20907:131;:::i;:::-;20899:139;;20626:419;;;:::o;21051:228::-;21191:34;21187:1;21179:6;21175:14;21168:58;21260:11;21255:2;21247:6;21243:15;21236:36;21051:228;:::o;21285:366::-;21427:3;21448:67;21512:2;21507:3;21448:67;:::i;:::-;21441:74;;21524:93;21613:3;21524:93;:::i;:::-;21642:2;21637:3;21633:12;21626:19;;21285:366;;;:::o;21657:419::-;21823:4;21861:2;21850:9;21846:18;21838:26;;21910:9;21904:4;21900:20;21896:1;21885:9;21881:17;21874:47;21938:131;22064:4;21938:131;:::i;:::-;21930:139;;21657:419;;;:::o;22082:229::-;22222:34;22218:1;22210:6;22206:14;22199:58;22291:12;22286:2;22278:6;22274:15;22267:37;22082:229;:::o;22317:366::-;22459:3;22480:67;22544:2;22539:3;22480:67;:::i;:::-;22473:74;;22556:93;22645:3;22556:93;:::i;:::-;22674:2;22669:3;22665:12;22658:19;;22317:366;;;:::o;22689:419::-;22855:4;22893:2;22882:9;22878:18;22870:26;;22942:9;22936:4;22932:20;22928:1;22917:9;22913:17;22906:47;22970:131;23096:4;22970:131;:::i;:::-;22962:139;;22689:419;;;:::o;23114:222::-;23254:34;23250:1;23242:6;23238:14;23231:58;23323:5;23318:2;23310:6;23306:15;23299:30;23114:222;:::o;23342:366::-;23484:3;23505:67;23569:2;23564:3;23505:67;:::i;:::-;23498:74;;23581:93;23670:3;23581:93;:::i;:::-;23699:2;23694:3;23690:12;23683:19;;23342:366;;;:::o;23714:419::-;23880:4;23918:2;23907:9;23903:18;23895:26;;23967:9;23961:4;23957:20;23953:1;23942:9;23938:17;23931:47;23995:131;24121:4;23995:131;:::i;:::-;23987:139;;23714:419;;;:::o;24139:182::-;24279:34;24275:1;24267:6;24263:14;24256:58;24139:182;:::o;24327:366::-;24469:3;24490:67;24554:2;24549:3;24490:67;:::i;:::-;24483:74;;24566:93;24655:3;24566:93;:::i;:::-;24684:2;24679:3;24675:12;24668:19;;24327:366;;;:::o;24699:419::-;24865:4;24903:2;24892:9;24888:18;24880:26;;24952:9;24946:4;24942:20;24938:1;24927:9;24923:17;24916:47;24980:131;25106:4;24980:131;:::i;:::-;24972:139;;24699:419;;;:::o;25124:143::-;25181:5;25212:6;25206:13;25197:22;;25228:33;25255:5;25228:33;:::i;:::-;25124:143;;;;:::o;25273:351::-;25343:6;25392:2;25380:9;25371:7;25367:23;25363:32;25360:119;;;25398:79;;:::i;:::-;25360:119;25518:1;25543:64;25599:7;25590:6;25579:9;25575:22;25543:64;:::i;:::-;25533:74;;25489:128;25273:351;;;;:::o;25630:442::-;25779:4;25817:2;25806:9;25802:18;25794:26;;25830:71;25898:1;25887:9;25883:17;25874:6;25830:71;:::i;:::-;25911:72;25979:2;25968:9;25964:18;25955:6;25911:72;:::i;:::-;25993;26061:2;26050:9;26046:18;26037:6;25993:72;:::i;:::-;25630:442;;;;;;:::o;26078:180::-;26126:77;26123:1;26116:88;26223:4;26220:1;26213:15;26247:4;26244:1;26237:15;26264:180;26312:77;26309:1;26302:88;26409:4;26406:1;26399:15;26433:4;26430:1;26423:15;26450:143;26507:5;26538:6;26532:13;26523:22;;26554:33;26581:5;26554:33;:::i;:::-;26450:143;;;;:::o;26599:351::-;26669:6;26718:2;26706:9;26697:7;26693:23;26689:32;26686:119;;;26724:79;;:::i;:::-;26686:119;26844:1;26869:64;26925:7;26916:6;26905:9;26901:22;26869:64;:::i;:::-;26859:74;;26815:128;26599:351;;;;:::o;26956:410::-;26996:7;27019:20;27037:1;27019:20;:::i;:::-;27014:25;;27053:20;27071:1;27053:20;:::i;:::-;27048:25;;27108:1;27105;27101:9;27130:30;27148:11;27130:30;:::i;:::-;27119:41;;27309:1;27300:7;27296:15;27293:1;27290:22;27270:1;27263:9;27243:83;27220:139;;27339:18;;:::i;:::-;27220:139;27004:362;26956:410;;;;:::o;27372:180::-;27420:77;27417:1;27410:88;27517:4;27514:1;27507:15;27541:4;27538:1;27531:15;27558:185;27598:1;27615:20;27633:1;27615:20;:::i;:::-;27610:25;;27649:20;27667:1;27649:20;:::i;:::-;27644:25;;27688:1;27678:35;;27693:18;;:::i;:::-;27678:35;27735:1;27732;27728:9;27723:14;;27558:185;;;;:::o;27749:194::-;27789:4;27809:20;27827:1;27809:20;:::i;:::-;27804:25;;27843:20;27861:1;27843:20;:::i;:::-;27838:25;;27887:1;27884;27880:9;27872:17;;27911:1;27905:4;27902:11;27899:37;;;27916:18;;:::i;:::-;27899:37;27749:194;;;;:::o;27949:85::-;27994:7;28023:5;28012:16;;27949:85;;;:::o;28040:158::-;28098:9;28131:61;28149:42;28158:32;28184:5;28158:32;:::i;:::-;28149:42;:::i;:::-;28131:61;:::i;:::-;28118:74;;28040:158;;;:::o;28204:147::-;28299:45;28338:5;28299:45;:::i;:::-;28294:3;28287:58;28204:147;;:::o;28357:114::-;28424:6;28458:5;28452:12;28442:22;;28357:114;;;:::o;28477:184::-;28576:11;28610:6;28605:3;28598:19;28650:4;28645:3;28641:14;28626:29;;28477:184;;;;:::o;28667:132::-;28734:4;28757:3;28749:11;;28787:4;28782:3;28778:14;28770:22;;28667:132;;;:::o;28805:108::-;28882:24;28900:5;28882:24;:::i;:::-;28877:3;28870:37;28805:108;;:::o;28919:179::-;28988:10;29009:46;29051:3;29043:6;29009:46;:::i;:::-;29087:4;29082:3;29078:14;29064:28;;28919:179;;;;:::o;29104:113::-;29174:4;29206;29201:3;29197:14;29189:22;;29104:113;;;:::o;29253:732::-;29372:3;29401:54;29449:5;29401:54;:::i;:::-;29471:86;29550:6;29545:3;29471:86;:::i;:::-;29464:93;;29581:56;29631:5;29581:56;:::i;:::-;29660:7;29691:1;29676:284;29701:6;29698:1;29695:13;29676:284;;;29777:6;29771:13;29804:63;29863:3;29848:13;29804:63;:::i;:::-;29797:70;;29890:60;29943:6;29890:60;:::i;:::-;29880:70;;29736:224;29723:1;29720;29716:9;29711:14;;29676:284;;;29680:14;29976:3;29969:10;;29377:608;;;29253:732;;;;:::o;29991:831::-;30254:4;30292:3;30281:9;30277:19;30269:27;;30306:71;30374:1;30363:9;30359:17;30350:6;30306:71;:::i;:::-;30387:80;30463:2;30452:9;30448:18;30439:6;30387:80;:::i;:::-;30514:9;30508:4;30504:20;30499:2;30488:9;30484:18;30477:48;30542:108;30645:4;30636:6;30542:108;:::i;:::-;30534:116;;30660:72;30728:2;30717:9;30713:18;30704:6;30660:72;:::i;:::-;30742:73;30810:3;30799:9;30795:19;30786:6;30742:73;:::i;:::-;29991:831;;;;;;;;:::o;30828:807::-;31077:4;31115:3;31104:9;31100:19;31092:27;;31129:71;31197:1;31186:9;31182:17;31173:6;31129:71;:::i;:::-;31210:72;31278:2;31267:9;31263:18;31254:6;31210:72;:::i;:::-;31292:80;31368:2;31357:9;31353:18;31344:6;31292:80;:::i;:::-;31382;31458:2;31447:9;31443:18;31434:6;31382:80;:::i;:::-;31472:73;31540:3;31529:9;31525:19;31516:6;31472:73;:::i;:::-;31555;31623:3;31612:9;31608:19;31599:6;31555:73;:::i;:::-;30828:807;;;;;;;;;:::o;31641:663::-;31729:6;31737;31745;31794:2;31782:9;31773:7;31769:23;31765:32;31762:119;;;31800:79;;:::i;:::-;31762:119;31920:1;31945:64;32001:7;31992:6;31981:9;31977:22;31945:64;:::i;:::-;31935:74;;31891:128;32058:2;32084:64;32140:7;32131:6;32120:9;32116:22;32084:64;:::i;:::-;32074:74;;32029:129;32197:2;32223:64;32279:7;32270:6;32259:9;32255:22;32223:64;:::i;:::-;32213:74;;32168:129;31641:663;;;;;:::o;32310:332::-;32431:4;32469:2;32458:9;32454:18;32446:26;;32482:71;32550:1;32539:9;32535:17;32526:6;32482:71;:::i;:::-;32563:72;32631:2;32620:9;32616:18;32607:6;32563:72;:::i;:::-;32310:332;;;;;:::o;32648:177::-;32788:29;32784:1;32776:6;32772:14;32765:53;32648:177;:::o;32831:366::-;32973:3;32994:67;33058:2;33053:3;32994:67;:::i;:::-;32987:74;;33070:93;33159:3;33070:93;:::i;:::-;33188:2;33183:3;33179:12;33172:19;;32831:366;;;:::o;33203:419::-;33369:4;33407:2;33396:9;33392:18;33384:26;;33456:9;33450:4;33446:20;33442:1;33431:9;33427:17;33420:47;33484:131;33610:4;33484:131;:::i;:::-;33476:139;;33203:419;;;:::o

Swarm Source

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