ETH Price: $2,794.14 (+1.88%)

Token

BINGO Game Betting Token (BINGO)
 

Overview

Max Total Supply

99,999,952 BINGO

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
0.76950092 BINGO

Value
$0.00
0x8697d74423a69595116100754f234ec8a8087c0f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BingoTokenContract

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-08
*/

/*
   BINGO ERC20 Token - Play Bingo game directly in Telegram

                                        ,********************,                  
                                     ,..,   #%#.          /%%/  ..              
                                    ,    ,. /&%%&*        .%%%%%  ,             
                                  .       .,                       ..           
                                 *          ,                        ,          
                                ,             ,                       ,         
                              ,                /   ###*          ,##(.  ,       
                            ..                  ,. *%%%%/         #%%%&. .      
                           .         /%%(         (.                      /.    
                           ,         %%%#         #%                       /    
                            .         .,         /  (%%%&.        ,%%%%#  ,     
                             .,                 ,  ,%%(,          #&#*  ,.      
                               ,              *          ,/(,          ,        
                             ,,   .*        .*         &%%%%,        .          
                         *.            ,,  *.                       *           
                    .,                     .*&%%%&         /%%%%* ..            
                ,.                             .,.        ,%%#*  ,              
            .,               .&%%%&(                /.........,.                
           ,#,/                *(/.               ,*  ,                         
           ,      ,,                          *   ..  .                         
           , .&%%/    ,*                 ,,.    /%%%* .                         
           ,  .%%%*       ,,.        ,,         %%%.  .                         
           ,                  .%&&#                   .                         
           ,                    ,,                    .                         
           ,                    .         *%%&.       .                         
           ,                    .        *%%%*        .                         
           ,                    .                     .                         
            ,                   .                    ,                          
              ,,           (,   .    #%(          *                             
                  .,      *%%%( .  /%%%/     ..                                 
                      .,.  .%&# .  ,#(   .,                                     
                           ,.   ..   ,.    

   Telegram:  https://t.me/bingo_token_game_bot
   Twitter/X: https://twitter.com/bingoerc20
   Docs:      https://bingobot.gitbook.io/bingo/
*/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

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

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

/**
 * @title BINGOGame
 * @dev Betting token for BINGO Game
 */
contract BingoTokenContract is Ownable, ERC20 {

    IUniswapV2Router02 public router;
    IUniswapV2Factory public factory;
    IUniswapV2Pair public pair;

    uint private constant INITIAL_SUPPLY = 100_000_000 * 10**8;

    // Percent of the initial supply that will go to the LP
    uint constant LP_BPS = 9000;

    // Percent of the initial supply that will go to marketing
    uint constant MARKETING_BPS = 10_000 - LP_BPS;

    //
    // The tax to deduct, in basis points
    //
    uint public buyTaxBps = 500;
    uint public sellTaxBps = 500;
    //
    bool isSellingCollectedTaxes;

    event AntiBotEngaged();
    event AntiBotDisengaged();
    event StealthLaunchEngaged();

    address public bingoContractAddress;

    bool public isLaunched;

    address public gameFeeWallet;
    address public marketingWallet;
    address public revenueWallet;

    bool public engagedOnce;
    bool public disengagedOnce;

    constructor() ERC20("BINGO Game Betting Token", "BINGO", 8) {
        if (isGoerli()) {
            router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (isSepolia()) {
            router = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        } else {
            require(block.chainid == 1, "expected mainnet");
            router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        }
        factory = IUniswapV2Factory(router.factory());

        // Approve infinite spending by DEX, to sell tokens collected via tax.
        allowance[address(this)][address(router)] = type(uint).max;
        emit Approval(address(this), address(router), type(uint).max);

        isLaunched = false;
    }

    modifier lockTheSwap() {
        isSellingCollectedTaxes = true;
        _;
        isSellingCollectedTaxes = false;
    }

    modifier onlyTestnet() {
        require(isTestnet(), "not testnet");
        _;
    }

    receive() external payable {}

    fallback() external payable {}

    function burn(uint amount) external {
        _burn(msg.sender, amount);
    }

    /**
     * @dev Allow minting on testnet so I don't have to deal with
     * buying from Uniswap.
     * @param amount the number of tokens to mint
     */
    function mint(uint amount) external onlyTestnet {
        _mint(address(msg.sender), amount);
    }

    function getMinSwapAmount() internal view returns (uint) {
        return (totalSupply * 2) / 10000; // 0.02%
    }

    function isGoerli() public view returns (bool) {
        return block.chainid == 5;
    }

    function isSepolia() public view returns (bool) {
        return block.chainid == 11155111;
    }

    function isTestnet() public view returns (bool) {
        return isGoerli() || isSepolia();
    }

    function enableAntiBotMode() public onlyOwner {
        require(!engagedOnce, "this is a one shot function");
        engagedOnce = true;
        buyTaxBps = 1000;
        sellTaxBps = 1000;
        emit AntiBotEngaged();
    }

    function disableAntiBotMode() public onlyOwner {
        require(!disengagedOnce, "this is a one shot function");
        disengagedOnce = true;
        buyTaxBps = 500;
        sellTaxBps = 500;
        emit AntiBotDisengaged();
    }

    /**
     * @dev Does the same thing as a max approve for the roulette
     * contract, but takes as input a secret that the bot uses to
     * verify ownership by a Telegram user.
     * @param secret The secret that the bot is expecting.
     * @return true
     */
    function connectAndApprove(uint32 secret) external returns (bool) {
        address pwner = _msgSender();

        allowance[pwner][bingoContractAddress] = type(uint).max;
        emit Approval(pwner, bingoContractAddress, type(uint).max);

        return true;
    }

    function setBingoContractAddress(address a) public onlyOwner {
        require(a != address(0), "null address");
        bingoContractAddress = a;
    }

    function setGameFeeWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        gameFeeWallet = wallet;
    }

    function setMarketingWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        marketingWallet = wallet;
    }

    function setRevenueWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        revenueWallet = wallet;
    }

    function stealthLaunch() external payable onlyOwner {
        require(!isLaunched, "already launched");
        require(gameFeeWallet != address(0), "null address");
        require(marketingWallet != address(0), "null address");
        require(revenueWallet != address(0), "null address");
        require(bingoContractAddress != address(0), "null address");
        isLaunched = true;

        _mint(address(this), INITIAL_SUPPLY * LP_BPS / 10_000);

        router.addLiquidityETH{ value: msg.value }(
            address(this),
            balanceOf[address(this)],
            0,
            0,
            owner(),
            block.timestamp);

        pair = IUniswapV2Pair(factory.getPair(address(this), router.WETH()));

        _mint(marketingWallet, INITIAL_SUPPLY * MARKETING_BPS / 10_000);

        require(totalSupply == INITIAL_SUPPLY, "numbers don't add up");

        // So I don't have to deal with Uniswap when testing
        if (isTestnet()) {
            _mint(address(msg.sender), 10_000 * 10**decimals);
        }

        emit StealthLaunchEngaged();
    }

    /**
     * @dev Calculate the amount of tax to apply to a transaction.
     * @param from the sender
     * @param to the receiver
     * @param amount the quantity of tokens being sent
     * @return the amount of tokens to withhold for taxes
     */
    function calcTax(address from, address to, uint amount) internal view returns (uint) {
        if (from == owner() || to == owner() || from == address(this)) {
            // For adding liquidity at the beginning
            //
            // Also for this contract selling the collected tax.
            return 0;
        } else if (from == address(pair)) {
            // Buy from DEX, or adding liquidity.
            return amount * buyTaxBps / 10_000;
        } else if (to == address(pair)) {
            // Sell from DEX, or removing liquidity.
            return amount * sellTaxBps / 10_000;
        } else {
            // Sending to other wallets (e.g. OTC) is tax-free.
            return 0;
        }
    }

    /**
     * @dev Sell the balance accumulated from taxes.
     */
    function sellCollectedTaxes() internal lockTheSwap {
        // Of the remaining tokens, set aside 2% of the tokens to LP,
        // swap the rest for ETH. LP the tokens with all of the ETH
        // (only enough ETH will be used to pair with the original 2%
        // of tokens). Send the remaining ETH (about 2% the original
        // balance) to 1% marketing wallet

        uint tokensForLiq = balanceOf[address(this)] / 2;
        uint tokensToSwap = balanceOf[address(this)] - tokensForLiq;

        // Sell
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokensToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        router.addLiquidityETH{ value: address(this).balance }(
            address(this),
            tokensForLiq,
            0,
            0,
            owner(),
            block.timestamp);

        gameFeeWallet.call{value:address(this).balance}("");
    }

    /**
     * @dev Transfer tokens from the caller to another address.
     * @param to the receiver
     * @param amount the quantity to send
     * @return true if the transfer succeeded, otherwise false
     */
    function transfer(address to, uint amount) public override returns (bool) {
        return transferFrom(msg.sender, to, amount);
    }

    /**
     * @dev Transfer tokens from one address to another. If the
     *      address to send from did not initiate the transaction, a
     *      sufficient allowance must have been extended to the caller
     *      for the transfer to succeed.
     * @param from the sender
     * @param to the receiver
     * @param amount the quantity to send
     * @return true if the transfer succeeded, otherwise false
     */
    function transferFrom(
        address from,
        address to,
        uint amount
    ) public override returns (bool) {
        if (from != msg.sender) {
            // This is a typical transferFrom

            uint allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

            if (allowed != type(uint).max) allowance[from][msg.sender] = allowed - amount;
        }

        // Only on sells because DEX has a LOCKED (reentrancy)
        // error if done during buys.
        //
        // isSellingCollectedTaxes prevents an infinite loop.
        if (balanceOf[address(this)] > getMinSwapAmount() && !isSellingCollectedTaxes && from != address(pair) && from != address(this)) {
            sellCollectedTaxes();
        }

        uint tax = calcTax(from, to, amount);
        uint afterTaxAmount = amount - tax;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint value.
        unchecked {
            balanceOf[to] += afterTaxAmount;
        }

        emit Transfer(from, to, afterTaxAmount);

        if (tax > 0) {
            // Use 1% of tax for marketting 
            uint marketShare = tax / 5;
            tax -= marketShare;

            unchecked {
                balanceOf[address(this)] += tax;  
                balanceOf[marketingWallet] += marketShare;
            }

            // Any transfer to the contract can be viewed as tax
            emit Transfer(from, address(this), tax);  //
            emit Transfer(from, marketingWallet, marketShare); //0.5% REV
        }

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"AntiBotDisengaged","type":"event"},{"anonymous":false,"inputs":[],"name":"AntiBotEngaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":[],"name":"StealthLaunchEngaged","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bingoContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"connectAndApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disengagedOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"engagedOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGoerli","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSepolia","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTestnet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"setBingoContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setGameFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setRevenueWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stealthLaunch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526101f4600a556101f4600b553480156200001d57600080fd5b506040518060400160405280601881526020017f42494e474f2047616d652042657474696e6720546f6b656e00000000000000008152506040518060400160405280600581526020017f42494e474f0000000000000000000000000000000000000000000000000000008152506008620000ac620000a0620004e060201b60201c565b620004e860201b60201c565b8260019081620000bd9190620008ce565b508160029081620000cf9190620008ce565b508060ff1660808160ff16815250504660a08181525050620000f6620005ac60201b60201c565b60c08181525050505050620001106200063c60201b60201c565b156200017157737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200027f565b620001816200064760201b60201c565b15620001e25773c532a74256d3db42d0bf7a0400fefdbad7694008600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200027e565b6001461462000228576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021f9062000a16565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000313919062000aa2565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051620004b7919062000ae5565b60405180910390a36000600c60156101000a81548160ff02191690831515021790555062000c53565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051620005e0919062000bb1565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646306040516020016200062195949392919062000bf6565b60405160208183030381529060405280519060200120905090565b600060054614905090565b600062aa36a74614905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006d657607f821691505b602082108103620006ec57620006eb6200068e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000717565b62000762868362000717565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007af620007a9620007a3846200077a565b62000784565b6200077a565b9050919050565b6000819050919050565b620007cb836200078e565b620007e3620007da82620007b6565b84845462000724565b825550505050565b600090565b620007fa620007eb565b62000807818484620007c0565b505050565b5b818110156200082f5762000823600082620007f0565b6001810190506200080d565b5050565b601f8211156200087e576200084881620006f2565b620008538462000707565b8101602085101562000863578190505b6200087b620008728562000707565b8301826200080c565b50505b505050565b600082821c905092915050565b6000620008a36000198460080262000883565b1980831691505092915050565b6000620008be838362000890565b9150826002028217905092915050565b620008d98262000654565b67ffffffffffffffff811115620008f557620008f46200065f565b5b620009018254620006bd565b6200090e82828562000833565b600060209050601f83116001811462000946576000841562000931578287015190505b6200093d8582620008b0565b865550620009ad565b601f1984166200095686620006f2565b60005b82811015620009805784890151825560018201915060208501945060208101905062000959565b86831015620009a057848901516200099c601f89168262000890565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f6578706563746564206d61696e6e657400000000000000000000000000000000600082015250565b6000620009fe601083620009b5565b915062000a0b82620009c6565b602082019050919050565b6000602082019050818103600083015262000a3181620009ef565b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a6a8262000a3d565b9050919050565b62000a7c8162000a5d565b811462000a8857600080fd5b50565b60008151905062000a9c8162000a71565b92915050565b60006020828403121562000abb5762000aba62000a38565b5b600062000acb8482850162000a8b565b91505092915050565b62000adf816200077a565b82525050565b600060208201905062000afc600083018462000ad4565b92915050565b600081905092915050565b60008190508160005260206000209050919050565b6000815462000b3181620006bd565b62000b3d818662000b02565b9450600182166000811462000b5b576001811462000b715762000ba8565b60ff198316865281151582028601935062000ba8565b62000b7c8562000b0d565b60005b8381101562000ba05781548189015260018201915060208101905062000b7f565b838801955050505b50505092915050565b600062000bbf828462000b22565b915081905092915050565b6000819050919050565b62000bdf8162000bca565b82525050565b62000bf08162000a5d565b82525050565b600060a08201905062000c0d600083018862000bd4565b62000c1c602083018762000bd4565b62000c2b604083018662000bd4565b62000c3a606083018562000ad4565b62000c49608083018462000be5565b9695505050505050565b60805160a05160c051613f5762000c8a60003960006117cd01526000611799015260008181610f9a01526117730152613f576000f3fe60806040526004361061023f5760003560e01c80638da5cb5b1161012e578063c473413a116100ab578063eec1c69f1161006f578063eec1c69f14610840578063f2fde38b1461087d578063f887ea40146108a6578063f98eb6e1146108d1578063fb235f34146108e857610246565b8063c473413a14610759578063cffd129c14610784578063d505accf146107af578063dd62ed3e146107d8578063e298b8901461081557610246565b8063a8aa1b31116100f2578063a8aa1b3114610672578063a9059cbb1461069d578063ad555676146106da578063b3e5cb4514610703578063c45a01551461072e57610246565b80638da5cb5b1461059f57806392108c86146105ca57806395d89b41146105f55780639b0e6a9914610620578063a0712d681461064957610246565b80633644e515116101bc578063715018a611610180578063715018a6146104ca57806375f0a874146104e15780637d5ea21b1461050c5780637ecebe00146105375780637f50ce171461057457610246565b80633644e515146103e557806342966c681461041057806344478425146104395780635d098b381461046457806370a082311461048d57610246565b806323b872dd1161020357806323b872dd14610310578063270fd20a1461034d5780632ca1b45d14610378578063307aebc91461038f578063313ce567146103ba57610246565b806306fdde031461024857806307df7a0d14610273578063095ea7b31461027d57806318160ddd146102ba5780631a2f029c146102e557610246565b3661024657005b005b34801561025457600080fd5b5061025d610911565b60405161026a9190612d64565b60405180910390f35b61027b61099f565b005b34801561028957600080fd5b506102a4600480360381019061029f9190612e1f565b611006565b6040516102b19190612e7a565b60405180910390f35b3480156102c657600080fd5b506102cf6110f8565b6040516102dc9190612ea4565b60405180910390f35b3480156102f157600080fd5b506102fa6110fe565b6040516103079190612ece565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190612ee9565b611124565b6040516103449190612e7a565b60405180910390f35b34801561035957600080fd5b50610362611698565b60405161036f9190612e7a565b60405180910390f35b34801561038457600080fd5b5061038d6116ab565b005b34801561039b57600080fd5b506103a461175e565b6040516103b19190612e7a565b60405180910390f35b3480156103c657600080fd5b506103cf611771565b6040516103dc9190612f58565b60405180910390f35b3480156103f157600080fd5b506103fa611795565b6040516104079190612f8c565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190612fa7565b6117f2565b005b34801561044557600080fd5b5061044e6117ff565b60405161045b9190612ece565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190612fd4565b611825565b005b34801561049957600080fd5b506104b460048036038101906104af9190612fd4565b6118e0565b6040516104c19190612ea4565b60405180910390f35b3480156104d657600080fd5b506104df6118f8565b005b3480156104ed57600080fd5b506104f661190c565b6040516105039190612ece565b60405180910390f35b34801561051857600080fd5b50610521611932565b60405161052e9190612e7a565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612fd4565b611945565b60405161056b9190612ea4565b60405180910390f35b34801561058057600080fd5b5061058961195d565b6040516105969190612e7a565b60405180910390f35b3480156105ab57600080fd5b506105b461196a565b6040516105c19190612ece565b60405180910390f35b3480156105d657600080fd5b506105df611993565b6040516105ec9190612e7a565b60405180910390f35b34801561060157600080fd5b5061060a6119b1565b6040516106179190612d64565b60405180910390f35b34801561062c57600080fd5b5061064760048036038101906106429190612fd4565b611a3f565b005b34801561065557600080fd5b50610670600480360381019061066b9190612fa7565b611afa565b005b34801561067e57600080fd5b50610687611b4e565b6040516106949190613060565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190612e1f565b611b74565b6040516106d19190612e7a565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612fd4565b611b89565b005b34801561070f57600080fd5b50610718611c44565b6040516107259190612e7a565b60405180910390f35b34801561073a57600080fd5b50610743611c4f565b604051610750919061309c565b60405180910390f35b34801561076557600080fd5b5061076e611c75565b60405161077b9190612ea4565b60405180910390f35b34801561079057600080fd5b50610799611c7b565b6040516107a69190612ea4565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d1919061310f565b611c81565b005b3480156107e457600080fd5b506107ff60048036038101906107fa91906131b1565b611f7a565b60405161080c9190612ea4565b60405180910390f35b34801561082157600080fd5b5061082a611f9f565b6040516108379190612ece565b60405180910390f35b34801561084c57600080fd5b506108676004803603810190610862919061322d565b611fc5565b6040516108749190612e7a565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f9190612fd4565b612146565b005b3480156108b257600080fd5b506108bb6121c9565b6040516108c8919061327b565b60405180910390f35b3480156108dd57600080fd5b506108e66121ef565b005b3480156108f457600080fd5b5061090f600480360381019061090a9190612fd4565b6122a2565b005b6001805461091e906132c5565b80601f016020809104026020016040519081016040528092919081815260200182805461094a906132c5565b80156109975780601f1061096c57610100808354040283529160200191610997565b820191906000526020600020905b81548152906001019060200180831161097a57829003601f168201915b505050505081565b6109a761235d565b600c60159054906101000a900460ff16156109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee90613342565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906133ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b10906133ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba1906133ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c32906133ae565b60405180910390fd5b6001600c60156101000a81548160ff021916908315150217905550610c8130612710612328662386f26fc10000610c7291906133fd565b610c7c919061346e565b6123db565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600080610d0c61196a565b426040518863ffffffff1660e01b8152600401610d2e969594939291906134da565b60606040518083038185885af1158015610d4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d719190613550565b505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4491906135b8565b6040518363ffffffff1660e01b8152600401610e619291906135e5565b602060405180830381865afa158015610e7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea291906135b8565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f3c600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710612328612710610f1b919061360e565b662386f26fc10000610f2d91906133fd565b610f37919061346e565b6123db565b662386f26fc1000060035414610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e9061368e565b60405180910390fd5b610f8f611993565b15610fd857610fd7337f0000000000000000000000000000000000000000000000000000000000000000600a610fc591906137e1565b612710610fd291906133fd565b6123db565b5b7f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe60405160405180910390a1565b600081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110e69190612ea4565b60405180910390a36001905092915050565b60035481565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611290576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461128e57828161120d919061360e565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505b6112986124ab565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180156112f25750600c60009054906101000a900460ff16155b801561134c5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561138457503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611392576113916124ce565b5b600061139f8585856128f9565b9050600081846113af919061360e565b905083600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611400919061360e565b9250508190555080600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114b19190612ea4565b60405180910390a3600082111561168b5760006005836114d1919061346e565b905080836114df919061360e565b925082600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508060046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516115fa9190612ea4565b60405180910390a3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116819190612ea4565b60405180910390a3505b6001925050509392505050565b600f60159054906101000a900460ff1681565b6116b361235d565b600f60149054906101000a900460ff1615611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90613878565b60405180910390fd5b6001600f60146101000a81548160ff0219169083151502179055506103e8600a819055506103e8600b819055507fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436860405160405180910390a1565b600c60159054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000046146117cb576117c6612aac565b6117ed565b7f00000000000000000000000000000000000000000000000000000000000000005b905090565b6117fc3382612b38565b50565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61182d61235d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361189c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611893906133ae565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60046020528060005260406000206000915090505481565b61190061235d565b61190a6000612c08565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60149054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b600062aa36a74614905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061199d611c44565b806119ac57506119ab61195d565b5b905090565b600280546119be906132c5565b80601f01602080910402602001604051908101604052809291908181526020018280546119ea906132c5565b8015611a375780601f10611a0c57610100808354040283529160200191611a37565b820191906000526020600020905b815481529060010190602001808311611a1a57829003601f168201915b505050505081565b611a4761235d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad906133ae565b60405180910390fd5b80600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b02611993565b611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b38906138e4565b60405180910390fd5b611b4b33826123db565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611b81338484611124565b905092915050565b611b9161235d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf7906133ae565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060054614905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600b5481565b42841015611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb90613950565b60405180910390fd5b60006001611cd0611795565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98a8a8a600660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558b604051602001611d5896959493929190613970565b60405160208183030381529060405280519060200120604051602001611d7f929190613a49565b6040516020818303038152906040528051906020012085858560405160008152602001604052604051611db59493929190613a80565b6020604051602081039080840390855afa158015611dd7573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611e4b57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8190613b11565b60405180910390fd5b85600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051611f699190612ea4565b60405180910390a350505050505050565b6005602052816000526040600020602052806000526040600020600091509150505481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611fd0612ccc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516121349190612ea4565b60405180910390a36001915050919050565b61214e61235d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b490613ba3565b60405180910390fd5b6121c681612c08565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121f761235d565b600f60159054906101000a900460ff1615612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90613878565b60405180910390fd5b6001600f60156101000a81548160ff0219169083151502179055506101f4600a819055506101f4600b819055507fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a60405160405180910390a1565b6122aa61235d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612319576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612310906133ae565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612365612ccc565b73ffffffffffffffffffffffffffffffffffffffff1661238361196a565b73ffffffffffffffffffffffffffffffffffffffff16146123d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d090613c0f565b60405180910390fd5b565b80600360008282546123ed9190613c2f565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161249f9190612ea4565b60405180910390a35050565b600061271060026003546124bf91906133fd565b6124c9919061346e565b905090565b6001600c60006101000a81548160ff02191690831515021790555060006002600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612537919061346e565b9050600081600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612586919061360e565b90506000600267ffffffffffffffff8111156125a5576125a4613c63565b5b6040519080825280602002602001820160405280156125d35781602001602082028036833780820191505090505b50905030816000815181106125eb576125ea613c92565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b691906135b8565b816001815181106126ca576126c9613c92565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612768959493929190613d7f565b600060405180830381600087803b15801561278257600080fd5b505af1158015612796573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730866000806127e661196a565b426040518863ffffffff1660e01b8152600401612808969594939291906134da565b60606040518083038185885af1158015612826573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061284b9190613550565b505050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161289490613e0a565b60006040518083038185875af1925050503d80600081146128d1576040519150601f19603f3d011682016040523d82523d6000602084013e6128d6565b606091505b5050505050506000600c60006101000a81548160ff021916908315150217905550565b600061290361196a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061296e575061293f61196a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806129a457503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156129b25760009050612aa5565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612a2957612710600a5483612a1891906133fd565b612a22919061346e565b9050612aa5565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aa057612710600b5483612a8f91906133fd565b612a99919061346e565b9050612aa5565b600090505b9392505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051612ade9190613eb7565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc64630604051602001612b1d959493929190613ece565b60405160208183030381529060405280519060200120905090565b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b87919061360e565b9250508190555080600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bfc9190612ea4565b60405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d0e578082015181840152602081019050612cf3565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d3682612cd4565b612d408185612cdf565b9350612d50818560208601612cf0565b612d5981612d1a565b840191505092915050565b60006020820190508181036000830152612d7e8184612d2b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612db682612d8b565b9050919050565b612dc681612dab565b8114612dd157600080fd5b50565b600081359050612de381612dbd565b92915050565b6000819050919050565b612dfc81612de9565b8114612e0757600080fd5b50565b600081359050612e1981612df3565b92915050565b60008060408385031215612e3657612e35612d86565b5b6000612e4485828601612dd4565b9250506020612e5585828601612e0a565b9150509250929050565b60008115159050919050565b612e7481612e5f565b82525050565b6000602082019050612e8f6000830184612e6b565b92915050565b612e9e81612de9565b82525050565b6000602082019050612eb96000830184612e95565b92915050565b612ec881612dab565b82525050565b6000602082019050612ee36000830184612ebf565b92915050565b600080600060608486031215612f0257612f01612d86565b5b6000612f1086828701612dd4565b9350506020612f2186828701612dd4565b9250506040612f3286828701612e0a565b9150509250925092565b600060ff82169050919050565b612f5281612f3c565b82525050565b6000602082019050612f6d6000830184612f49565b92915050565b6000819050919050565b612f8681612f73565b82525050565b6000602082019050612fa16000830184612f7d565b92915050565b600060208284031215612fbd57612fbc612d86565b5b6000612fcb84828501612e0a565b91505092915050565b600060208284031215612fea57612fe9612d86565b5b6000612ff884828501612dd4565b91505092915050565b6000819050919050565b600061302661302161301c84612d8b565b613001565b612d8b565b9050919050565b60006130388261300b565b9050919050565b600061304a8261302d565b9050919050565b61305a8161303f565b82525050565b60006020820190506130756000830184613051565b92915050565b60006130868261302d565b9050919050565b6130968161307b565b82525050565b60006020820190506130b1600083018461308d565b92915050565b6130c081612f3c565b81146130cb57600080fd5b50565b6000813590506130dd816130b7565b92915050565b6130ec81612f73565b81146130f757600080fd5b50565b600081359050613109816130e3565b92915050565b600080600080600080600060e0888a03121561312e5761312d612d86565b5b600061313c8a828b01612dd4565b975050602061314d8a828b01612dd4565b965050604061315e8a828b01612e0a565b955050606061316f8a828b01612e0a565b94505060806131808a828b016130ce565b93505060a06131918a828b016130fa565b92505060c06131a28a828b016130fa565b91505092959891949750929550565b600080604083850312156131c8576131c7612d86565b5b60006131d685828601612dd4565b92505060206131e785828601612dd4565b9150509250929050565b600063ffffffff82169050919050565b61320a816131f1565b811461321557600080fd5b50565b60008135905061322781613201565b92915050565b60006020828403121561324357613242612d86565b5b600061325184828501613218565b91505092915050565b60006132658261302d565b9050919050565b6132758161325a565b82525050565b6000602082019050613290600083018461326c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132dd57607f821691505b6020821081036132f0576132ef613296565b5b50919050565b7f616c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b600061332c601083612cdf565b9150613337826132f6565b602082019050919050565b6000602082019050818103600083015261335b8161331f565b9050919050565b7f6e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b6000613398600c83612cdf565b91506133a382613362565b602082019050919050565b600060208201905081810360008301526133c78161338b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061340882612de9565b915061341383612de9565b925082820261342181612de9565b91508282048414831517613438576134376133ce565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061347982612de9565b915061348483612de9565b9250826134945761349361343f565b5b828204905092915050565b6000819050919050565b60006134c46134bf6134ba8461349f565b613001565b612de9565b9050919050565b6134d4816134a9565b82525050565b600060c0820190506134ef6000830189612ebf565b6134fc6020830188612e95565b61350960408301876134cb565b61351660608301866134cb565b6135236080830185612ebf565b61353060a0830184612e95565b979650505050505050565b60008151905061354a81612df3565b92915050565b60008060006060848603121561356957613568612d86565b5b60006135778682870161353b565b93505060206135888682870161353b565b92505060406135998682870161353b565b9150509250925092565b6000815190506135b281612dbd565b92915050565b6000602082840312156135ce576135cd612d86565b5b60006135dc848285016135a3565b91505092915050565b60006040820190506135fa6000830185612ebf565b6136076020830184612ebf565b9392505050565b600061361982612de9565b915061362483612de9565b925082820390508181111561363c5761363b6133ce565b5b92915050565b7f6e756d6265727320646f6e277420616464207570000000000000000000000000600082015250565b6000613678601483612cdf565b915061368382613642565b602082019050919050565b600060208201905081810360008301526136a78161366b565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613705578086048111156136e1576136e06133ce565b5b60018516156136f05780820291505b80810290506136fe856136ae565b94506136c5565b94509492505050565b60008261371e57600190506137da565b8161372c57600090506137da565b8160018114613742576002811461374c5761377b565b60019150506137da565b60ff84111561375e5761375d6133ce565b5b8360020a915084821115613775576137746133ce565b5b506137da565b5060208310610133831016604e8410600b84101617156137b05782820a9050838111156137ab576137aa6133ce565b5b6137da565b6137bd84848460016136bb565b925090508184048111156137d4576137d36133ce565b5b81810290505b9392505050565b60006137ec82612de9565b91506137f783612f3c565b92506138247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461370e565b905092915050565b7f746869732069732061206f6e652073686f742066756e6374696f6e0000000000600082015250565b6000613862601b83612cdf565b915061386d8261382c565b602082019050919050565b6000602082019050818103600083015261389181613855565b9050919050565b7f6e6f7420746573746e6574000000000000000000000000000000000000000000600082015250565b60006138ce600b83612cdf565b91506138d982613898565b602082019050919050565b600060208201905081810360008301526138fd816138c1565b9050919050565b7f5045524d49545f444541444c494e455f45585049524544000000000000000000600082015250565b600061393a601783612cdf565b915061394582613904565b602082019050919050565b600060208201905081810360008301526139698161392d565b9050919050565b600060c0820190506139856000830189612f7d565b6139926020830188612ebf565b61399f6040830187612ebf565b6139ac6060830186612e95565b6139b96080830185612e95565b6139c660a0830184612e95565b979650505050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000613a126002836139d1565b9150613a1d826139dc565b600282019050919050565b6000819050919050565b613a43613a3e82612f73565b613a28565b82525050565b6000613a5482613a05565b9150613a608285613a32565b602082019150613a708284613a32565b6020820191508190509392505050565b6000608082019050613a956000830187612f7d565b613aa26020830186612f49565b613aaf6040830185612f7d565b613abc6060830184612f7d565b95945050505050565b7f494e56414c49445f5349474e4552000000000000000000000000000000000000600082015250565b6000613afb600e83612cdf565b9150613b0682613ac5565b602082019050919050565b60006020820190508181036000830152613b2a81613aee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b8d602683612cdf565b9150613b9882613b31565b604082019050919050565b60006020820190508181036000830152613bbc81613b80565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bf9602083612cdf565b9150613c0482613bc3565b602082019050919050565b60006020820190508181036000830152613c2881613bec565b9050919050565b6000613c3a82612de9565b9150613c4583612de9565b9250828201905080821115613c5d57613c5c6133ce565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cf681612dab565b82525050565b6000613d088383613ced565b60208301905092915050565b6000602082019050919050565b6000613d2c82613cc1565b613d368185613ccc565b9350613d4183613cdd565b8060005b83811015613d72578151613d598882613cfc565b9750613d6483613d14565b925050600181019050613d45565b5085935050505092915050565b600060a082019050613d946000830188612e95565b613da160208301876134cb565b8181036040830152613db38186613d21565b9050613dc26060830185612ebf565b613dcf6080830184612e95565b9695505050505050565b600081905092915050565b50565b6000613df4600083613dd9565b9150613dff82613de4565b600082019050919050565b6000613e1582613de7565b9150819050919050565b60008190508160005260206000209050919050565b60008154613e41816132c5565b613e4b8186613dd9565b94506001821660008114613e665760018114613e7b57613eae565b60ff1983168652811515820286019350613eae565b613e8485613e1f565b60005b83811015613ea657815481890152600182019150602081019050613e87565b838801955050505b50505092915050565b6000613ec38284613e34565b915081905092915050565b600060a082019050613ee36000830188612f7d565b613ef06020830187612f7d565b613efd6040830186612f7d565b613f0a6060830185612e95565b613f176080830184612ebf565b969550505050505056fea26469706673582212206e95cc56a1cb8c95956ea67eee49e17121f88f67bab8f075993a0247d2eb206a64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80638da5cb5b1161012e578063c473413a116100ab578063eec1c69f1161006f578063eec1c69f14610840578063f2fde38b1461087d578063f887ea40146108a6578063f98eb6e1146108d1578063fb235f34146108e857610246565b8063c473413a14610759578063cffd129c14610784578063d505accf146107af578063dd62ed3e146107d8578063e298b8901461081557610246565b8063a8aa1b31116100f2578063a8aa1b3114610672578063a9059cbb1461069d578063ad555676146106da578063b3e5cb4514610703578063c45a01551461072e57610246565b80638da5cb5b1461059f57806392108c86146105ca57806395d89b41146105f55780639b0e6a9914610620578063a0712d681461064957610246565b80633644e515116101bc578063715018a611610180578063715018a6146104ca57806375f0a874146104e15780637d5ea21b1461050c5780637ecebe00146105375780637f50ce171461057457610246565b80633644e515146103e557806342966c681461041057806344478425146104395780635d098b381461046457806370a082311461048d57610246565b806323b872dd1161020357806323b872dd14610310578063270fd20a1461034d5780632ca1b45d14610378578063307aebc91461038f578063313ce567146103ba57610246565b806306fdde031461024857806307df7a0d14610273578063095ea7b31461027d57806318160ddd146102ba5780631a2f029c146102e557610246565b3661024657005b005b34801561025457600080fd5b5061025d610911565b60405161026a9190612d64565b60405180910390f35b61027b61099f565b005b34801561028957600080fd5b506102a4600480360381019061029f9190612e1f565b611006565b6040516102b19190612e7a565b60405180910390f35b3480156102c657600080fd5b506102cf6110f8565b6040516102dc9190612ea4565b60405180910390f35b3480156102f157600080fd5b506102fa6110fe565b6040516103079190612ece565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190612ee9565b611124565b6040516103449190612e7a565b60405180910390f35b34801561035957600080fd5b50610362611698565b60405161036f9190612e7a565b60405180910390f35b34801561038457600080fd5b5061038d6116ab565b005b34801561039b57600080fd5b506103a461175e565b6040516103b19190612e7a565b60405180910390f35b3480156103c657600080fd5b506103cf611771565b6040516103dc9190612f58565b60405180910390f35b3480156103f157600080fd5b506103fa611795565b6040516104079190612f8c565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190612fa7565b6117f2565b005b34801561044557600080fd5b5061044e6117ff565b60405161045b9190612ece565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190612fd4565b611825565b005b34801561049957600080fd5b506104b460048036038101906104af9190612fd4565b6118e0565b6040516104c19190612ea4565b60405180910390f35b3480156104d657600080fd5b506104df6118f8565b005b3480156104ed57600080fd5b506104f661190c565b6040516105039190612ece565b60405180910390f35b34801561051857600080fd5b50610521611932565b60405161052e9190612e7a565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612fd4565b611945565b60405161056b9190612ea4565b60405180910390f35b34801561058057600080fd5b5061058961195d565b6040516105969190612e7a565b60405180910390f35b3480156105ab57600080fd5b506105b461196a565b6040516105c19190612ece565b60405180910390f35b3480156105d657600080fd5b506105df611993565b6040516105ec9190612e7a565b60405180910390f35b34801561060157600080fd5b5061060a6119b1565b6040516106179190612d64565b60405180910390f35b34801561062c57600080fd5b5061064760048036038101906106429190612fd4565b611a3f565b005b34801561065557600080fd5b50610670600480360381019061066b9190612fa7565b611afa565b005b34801561067e57600080fd5b50610687611b4e565b6040516106949190613060565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190612e1f565b611b74565b6040516106d19190612e7a565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612fd4565b611b89565b005b34801561070f57600080fd5b50610718611c44565b6040516107259190612e7a565b60405180910390f35b34801561073a57600080fd5b50610743611c4f565b604051610750919061309c565b60405180910390f35b34801561076557600080fd5b5061076e611c75565b60405161077b9190612ea4565b60405180910390f35b34801561079057600080fd5b50610799611c7b565b6040516107a69190612ea4565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d1919061310f565b611c81565b005b3480156107e457600080fd5b506107ff60048036038101906107fa91906131b1565b611f7a565b60405161080c9190612ea4565b60405180910390f35b34801561082157600080fd5b5061082a611f9f565b6040516108379190612ece565b60405180910390f35b34801561084c57600080fd5b506108676004803603810190610862919061322d565b611fc5565b6040516108749190612e7a565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f9190612fd4565b612146565b005b3480156108b257600080fd5b506108bb6121c9565b6040516108c8919061327b565b60405180910390f35b3480156108dd57600080fd5b506108e66121ef565b005b3480156108f457600080fd5b5061090f600480360381019061090a9190612fd4565b6122a2565b005b6001805461091e906132c5565b80601f016020809104026020016040519081016040528092919081815260200182805461094a906132c5565b80156109975780601f1061096c57610100808354040283529160200191610997565b820191906000526020600020905b81548152906001019060200180831161097a57829003601f168201915b505050505081565b6109a761235d565b600c60159054906101000a900460ff16156109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee90613342565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906133ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b10906133ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba1906133ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c32906133ae565b60405180910390fd5b6001600c60156101000a81548160ff021916908315150217905550610c8130612710612328662386f26fc10000610c7291906133fd565b610c7c919061346e565b6123db565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600080610d0c61196a565b426040518863ffffffff1660e01b8152600401610d2e969594939291906134da565b60606040518083038185885af1158015610d4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d719190613550565b505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4491906135b8565b6040518363ffffffff1660e01b8152600401610e619291906135e5565b602060405180830381865afa158015610e7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea291906135b8565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f3c600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710612328612710610f1b919061360e565b662386f26fc10000610f2d91906133fd565b610f37919061346e565b6123db565b662386f26fc1000060035414610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e9061368e565b60405180910390fd5b610f8f611993565b15610fd857610fd7337f0000000000000000000000000000000000000000000000000000000000000008600a610fc591906137e1565b612710610fd291906133fd565b6123db565b5b7f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe60405160405180910390a1565b600081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110e69190612ea4565b60405180910390a36001905092915050565b60035481565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611290576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461128e57828161120d919061360e565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505b6112986124ab565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180156112f25750600c60009054906101000a900460ff16155b801561134c5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561138457503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611392576113916124ce565b5b600061139f8585856128f9565b9050600081846113af919061360e565b905083600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611400919061360e565b9250508190555080600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114b19190612ea4565b60405180910390a3600082111561168b5760006005836114d1919061346e565b905080836114df919061360e565b925082600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508060046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516115fa9190612ea4565b60405180910390a3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116819190612ea4565b60405180910390a3505b6001925050509392505050565b600f60159054906101000a900460ff1681565b6116b361235d565b600f60149054906101000a900460ff1615611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90613878565b60405180910390fd5b6001600f60146101000a81548160ff0219169083151502179055506103e8600a819055506103e8600b819055507fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436860405160405180910390a1565b600c60159054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000881565b60007f000000000000000000000000000000000000000000000000000000000000000146146117cb576117c6612aac565b6117ed565b7f03588dbb349c3d3fbd591d481b60d5e4986bffe5457934533de4ef8635f4e0c25b905090565b6117fc3382612b38565b50565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61182d61235d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361189c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611893906133ae565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60046020528060005260406000206000915090505481565b61190061235d565b61190a6000612c08565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60149054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b600062aa36a74614905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061199d611c44565b806119ac57506119ab61195d565b5b905090565b600280546119be906132c5565b80601f01602080910402602001604051908101604052809291908181526020018280546119ea906132c5565b8015611a375780601f10611a0c57610100808354040283529160200191611a37565b820191906000526020600020905b815481529060010190602001808311611a1a57829003601f168201915b505050505081565b611a4761235d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad906133ae565b60405180910390fd5b80600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b02611993565b611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b38906138e4565b60405180910390fd5b611b4b33826123db565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611b81338484611124565b905092915050565b611b9161235d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf7906133ae565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060054614905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600b5481565b42841015611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb90613950565b60405180910390fd5b60006001611cd0611795565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98a8a8a600660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558b604051602001611d5896959493929190613970565b60405160208183030381529060405280519060200120604051602001611d7f929190613a49565b6040516020818303038152906040528051906020012085858560405160008152602001604052604051611db59493929190613a80565b6020604051602081039080840390855afa158015611dd7573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611e4b57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8190613b11565b60405180910390fd5b85600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051611f699190612ea4565b60405180910390a350505050505050565b6005602052816000526040600020602052806000526040600020600091509150505481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611fd0612ccc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516121349190612ea4565b60405180910390a36001915050919050565b61214e61235d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b490613ba3565b60405180910390fd5b6121c681612c08565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121f761235d565b600f60159054906101000a900460ff1615612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90613878565b60405180910390fd5b6001600f60156101000a81548160ff0219169083151502179055506101f4600a819055506101f4600b819055507fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a60405160405180910390a1565b6122aa61235d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612319576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612310906133ae565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612365612ccc565b73ffffffffffffffffffffffffffffffffffffffff1661238361196a565b73ffffffffffffffffffffffffffffffffffffffff16146123d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d090613c0f565b60405180910390fd5b565b80600360008282546123ed9190613c2f565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161249f9190612ea4565b60405180910390a35050565b600061271060026003546124bf91906133fd565b6124c9919061346e565b905090565b6001600c60006101000a81548160ff02191690831515021790555060006002600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612537919061346e565b9050600081600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612586919061360e565b90506000600267ffffffffffffffff8111156125a5576125a4613c63565b5b6040519080825280602002602001820160405280156125d35781602001602082028036833780820191505090505b50905030816000815181106125eb576125ea613c92565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b691906135b8565b816001815181106126ca576126c9613c92565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612768959493929190613d7f565b600060405180830381600087803b15801561278257600080fd5b505af1158015612796573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730866000806127e661196a565b426040518863ffffffff1660e01b8152600401612808969594939291906134da565b60606040518083038185885af1158015612826573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061284b9190613550565b505050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161289490613e0a565b60006040518083038185875af1925050503d80600081146128d1576040519150601f19603f3d011682016040523d82523d6000602084013e6128d6565b606091505b5050505050506000600c60006101000a81548160ff021916908315150217905550565b600061290361196a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061296e575061293f61196a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806129a457503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156129b25760009050612aa5565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612a2957612710600a5483612a1891906133fd565b612a22919061346e565b9050612aa5565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aa057612710600b5483612a8f91906133fd565b612a99919061346e565b9050612aa5565b600090505b9392505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051612ade9190613eb7565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc64630604051602001612b1d959493929190613ece565b60405160208183030381529060405280519060200120905090565b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b87919061360e565b9250508190555080600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bfc9190612ea4565b60405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d0e578082015181840152602081019050612cf3565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d3682612cd4565b612d408185612cdf565b9350612d50818560208601612cf0565b612d5981612d1a565b840191505092915050565b60006020820190508181036000830152612d7e8184612d2b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612db682612d8b565b9050919050565b612dc681612dab565b8114612dd157600080fd5b50565b600081359050612de381612dbd565b92915050565b6000819050919050565b612dfc81612de9565b8114612e0757600080fd5b50565b600081359050612e1981612df3565b92915050565b60008060408385031215612e3657612e35612d86565b5b6000612e4485828601612dd4565b9250506020612e5585828601612e0a565b9150509250929050565b60008115159050919050565b612e7481612e5f565b82525050565b6000602082019050612e8f6000830184612e6b565b92915050565b612e9e81612de9565b82525050565b6000602082019050612eb96000830184612e95565b92915050565b612ec881612dab565b82525050565b6000602082019050612ee36000830184612ebf565b92915050565b600080600060608486031215612f0257612f01612d86565b5b6000612f1086828701612dd4565b9350506020612f2186828701612dd4565b9250506040612f3286828701612e0a565b9150509250925092565b600060ff82169050919050565b612f5281612f3c565b82525050565b6000602082019050612f6d6000830184612f49565b92915050565b6000819050919050565b612f8681612f73565b82525050565b6000602082019050612fa16000830184612f7d565b92915050565b600060208284031215612fbd57612fbc612d86565b5b6000612fcb84828501612e0a565b91505092915050565b600060208284031215612fea57612fe9612d86565b5b6000612ff884828501612dd4565b91505092915050565b6000819050919050565b600061302661302161301c84612d8b565b613001565b612d8b565b9050919050565b60006130388261300b565b9050919050565b600061304a8261302d565b9050919050565b61305a8161303f565b82525050565b60006020820190506130756000830184613051565b92915050565b60006130868261302d565b9050919050565b6130968161307b565b82525050565b60006020820190506130b1600083018461308d565b92915050565b6130c081612f3c565b81146130cb57600080fd5b50565b6000813590506130dd816130b7565b92915050565b6130ec81612f73565b81146130f757600080fd5b50565b600081359050613109816130e3565b92915050565b600080600080600080600060e0888a03121561312e5761312d612d86565b5b600061313c8a828b01612dd4565b975050602061314d8a828b01612dd4565b965050604061315e8a828b01612e0a565b955050606061316f8a828b01612e0a565b94505060806131808a828b016130ce565b93505060a06131918a828b016130fa565b92505060c06131a28a828b016130fa565b91505092959891949750929550565b600080604083850312156131c8576131c7612d86565b5b60006131d685828601612dd4565b92505060206131e785828601612dd4565b9150509250929050565b600063ffffffff82169050919050565b61320a816131f1565b811461321557600080fd5b50565b60008135905061322781613201565b92915050565b60006020828403121561324357613242612d86565b5b600061325184828501613218565b91505092915050565b60006132658261302d565b9050919050565b6132758161325a565b82525050565b6000602082019050613290600083018461326c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132dd57607f821691505b6020821081036132f0576132ef613296565b5b50919050565b7f616c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b600061332c601083612cdf565b9150613337826132f6565b602082019050919050565b6000602082019050818103600083015261335b8161331f565b9050919050565b7f6e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b6000613398600c83612cdf565b91506133a382613362565b602082019050919050565b600060208201905081810360008301526133c78161338b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061340882612de9565b915061341383612de9565b925082820261342181612de9565b91508282048414831517613438576134376133ce565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061347982612de9565b915061348483612de9565b9250826134945761349361343f565b5b828204905092915050565b6000819050919050565b60006134c46134bf6134ba8461349f565b613001565b612de9565b9050919050565b6134d4816134a9565b82525050565b600060c0820190506134ef6000830189612ebf565b6134fc6020830188612e95565b61350960408301876134cb565b61351660608301866134cb565b6135236080830185612ebf565b61353060a0830184612e95565b979650505050505050565b60008151905061354a81612df3565b92915050565b60008060006060848603121561356957613568612d86565b5b60006135778682870161353b565b93505060206135888682870161353b565b92505060406135998682870161353b565b9150509250925092565b6000815190506135b281612dbd565b92915050565b6000602082840312156135ce576135cd612d86565b5b60006135dc848285016135a3565b91505092915050565b60006040820190506135fa6000830185612ebf565b6136076020830184612ebf565b9392505050565b600061361982612de9565b915061362483612de9565b925082820390508181111561363c5761363b6133ce565b5b92915050565b7f6e756d6265727320646f6e277420616464207570000000000000000000000000600082015250565b6000613678601483612cdf565b915061368382613642565b602082019050919050565b600060208201905081810360008301526136a78161366b565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613705578086048111156136e1576136e06133ce565b5b60018516156136f05780820291505b80810290506136fe856136ae565b94506136c5565b94509492505050565b60008261371e57600190506137da565b8161372c57600090506137da565b8160018114613742576002811461374c5761377b565b60019150506137da565b60ff84111561375e5761375d6133ce565b5b8360020a915084821115613775576137746133ce565b5b506137da565b5060208310610133831016604e8410600b84101617156137b05782820a9050838111156137ab576137aa6133ce565b5b6137da565b6137bd84848460016136bb565b925090508184048111156137d4576137d36133ce565b5b81810290505b9392505050565b60006137ec82612de9565b91506137f783612f3c565b92506138247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461370e565b905092915050565b7f746869732069732061206f6e652073686f742066756e6374696f6e0000000000600082015250565b6000613862601b83612cdf565b915061386d8261382c565b602082019050919050565b6000602082019050818103600083015261389181613855565b9050919050565b7f6e6f7420746573746e6574000000000000000000000000000000000000000000600082015250565b60006138ce600b83612cdf565b91506138d982613898565b602082019050919050565b600060208201905081810360008301526138fd816138c1565b9050919050565b7f5045524d49545f444541444c494e455f45585049524544000000000000000000600082015250565b600061393a601783612cdf565b915061394582613904565b602082019050919050565b600060208201905081810360008301526139698161392d565b9050919050565b600060c0820190506139856000830189612f7d565b6139926020830188612ebf565b61399f6040830187612ebf565b6139ac6060830186612e95565b6139b96080830185612e95565b6139c660a0830184612e95565b979650505050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000613a126002836139d1565b9150613a1d826139dc565b600282019050919050565b6000819050919050565b613a43613a3e82612f73565b613a28565b82525050565b6000613a5482613a05565b9150613a608285613a32565b602082019150613a708284613a32565b6020820191508190509392505050565b6000608082019050613a956000830187612f7d565b613aa26020830186612f49565b613aaf6040830185612f7d565b613abc6060830184612f7d565b95945050505050565b7f494e56414c49445f5349474e4552000000000000000000000000000000000000600082015250565b6000613afb600e83612cdf565b9150613b0682613ac5565b602082019050919050565b60006020820190508181036000830152613b2a81613aee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b8d602683612cdf565b9150613b9882613b31565b604082019050919050565b60006020820190508181036000830152613bbc81613b80565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bf9602083612cdf565b9150613c0482613bc3565b602082019050919050565b60006020820190508181036000830152613c2881613bec565b9050919050565b6000613c3a82612de9565b9150613c4583612de9565b9250828201905080821115613c5d57613c5c6133ce565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cf681612dab565b82525050565b6000613d088383613ced565b60208301905092915050565b6000602082019050919050565b6000613d2c82613cc1565b613d368185613ccc565b9350613d4183613cdd565b8060005b83811015613d72578151613d598882613cfc565b9750613d6483613d14565b925050600181019050613d45565b5085935050505092915050565b600060a082019050613d946000830188612e95565b613da160208301876134cb565b8181036040830152613db38186613d21565b9050613dc26060830185612ebf565b613dcf6080830184612e95565b9695505050505050565b600081905092915050565b50565b6000613df4600083613dd9565b9150613dff82613de4565b600082019050919050565b6000613e1582613de7565b9150819050919050565b60008190508160005260206000209050919050565b60008154613e41816132c5565b613e4b8186613dd9565b94506001821660008114613e665760018114613e7b57613eae565b60ff1983168652811515820286019350613eae565b613e8485613e1f565b60005b83811015613ea657815481890152600182019150602081019050613e87565b838801955050505b50505092915050565b6000613ec38284613e34565b915081905092915050565b600060a082019050613ee36000830188612f7d565b613ef06020830187612f7d565b613efd6040830186612f7d565b613f0a6060830185612e95565b613f176080830184612ebf565b969550505050505056fea26469706673582212206e95cc56a1cb8c95956ea67eee49e17121f88f67bab8f075993a0247d2eb206a64736f6c63430008130033

Deployed Bytecode Sourcemap

21272:10408:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3847:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25854:1113;;;:::i;:::-;;5324:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4130:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21993:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29985:1692;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22207:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24145:233;;;;;;;;;;;;;:::i;:::-;;22037:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3903:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8284:179;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23345:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22140:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25522:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4165:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12423:103;;;;;;;;;;;;;:::i;:::-;;22103:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22177:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4591:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23931:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11775:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24038:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3874:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25195:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23598:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21405:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29405:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25358:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23832:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21366:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21781:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21815:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6749:1527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4218:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22068:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24913:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12681:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21327:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24386:241;;;;;;;;;;;;;:::i;:::-;;25690:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3847:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25854:1113::-;11661:13;:11;:13::i;:::-;25926:10:::1;;;;;;;;;;;25925:11;25917:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;26001:1;25976:27;;:13;;;;;;;;;;;:27;;::::0;25968:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26066:1;26039:29;;:15;;;;;;;;;;;:29;;::::0;26031:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26129:1;26104:27;;:13;;;;;;;;;;;:27;;::::0;26096:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26199:1;26167:34;;:20;;;;;;;;;;;:34;;::::0;26159:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26242:4;26229:10;;:17;;;;;;;;;;;;;;;;;;26259:54;26273:4;26306:6;21591:4;21479:19;26280:23;;;;:::i;:::-;:32;;;;:::i;:::-;26259:5;:54::i;:::-;26326:6;;;;;;;;;;;:22;;;26357:9;26391:4;26411:9;:24;26429:4;26411:24;;;;;;;;;;;;;;;;26450:1;26466::::0;26482:7:::1;:5;:7::i;:::-;26504:15;26326:194;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26555:7;;;;;;;;;;;:15;;;26579:4;26586:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26555:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26533:4;;:68;;;;;;;;;;;;;;;;;;26614:63;26620:15;;;;;;;;;;;26670:6;21591:4;21698:6;:15;;;;:::i;:::-;21479:19;26637:30;;;;:::i;:::-;:39;;;;:::i;:::-;26614:5;:63::i;:::-;21479:19;26698:11;;:29;26690:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26831:11;:9;:11::i;:::-;26827:93;;;26859:49;26873:10;26899:8;26895:2;:12;;;;:::i;:::-;26886:6;:21;;;;:::i;:::-;26859:5;:49::i;:::-;26827:93;26937:22;;;;;;;;;;25854:1113::o:0;5324:217::-;5398:4;5448:6;5415:9;:21;5425:10;5415:21;;;;;;;;;;;;;;;:30;5437:7;5415:30;;;;;;;;;;;;;;;:39;;;;5493:7;5472:37;;5481:10;5472:37;;;5502:6;5472:37;;;;;;:::i;:::-;;;;;;;;5529:4;5522:11;;5324:217;;;;:::o;4130:26::-;;;;:::o;21993:35::-;;;;;;;;;;;;;:::o;29985:1692::-;30105:4;30134:10;30126:18;;:4;:18;;;30122:272;;30210:12;30225:9;:15;30235:4;30225:15;;;;;;;;;;;;;;;:27;30241:10;30225:27;;;;;;;;;;;;;;;;30210:42;;30320:14;30309:7;:25;30305:77;;30376:6;30366:7;:16;;;;:::i;:::-;30336:9;:15;30346:4;30336:15;;;;;;;;;;;;;;;:27;30352:10;30336:27;;;;;;;;;;;;;;;:46;;;;30305:77;30146:248;30122:272;30615:18;:16;:18::i;:::-;30588:9;:24;30606:4;30588:24;;;;;;;;;;;;;;;;:45;:73;;;;;30638:23;;;;;;;;;;;30637:24;30588:73;:98;;;;;30681:4;;;;;;;;;;;30665:21;;:4;:21;;;;30588:98;:123;;;;;30706:4;30690:21;;:4;:21;;;;30588:123;30584:176;;;30728:20;:18;:20::i;:::-;30584:176;30772:8;30783:25;30791:4;30797:2;30801:6;30783:7;:25::i;:::-;30772:36;;30819:19;30850:3;30841:6;:12;;;;:::i;:::-;30819:34;;30885:6;30866:9;:15;30876:4;30866:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;31056:14;31039:9;:13;31049:2;31039:13;;;;;;;;;;;;;;;;:31;;;;;;;;;;;31114:2;31099:34;;31108:4;31099:34;;;31118:14;31099:34;;;;;;:::i;:::-;;;;;;;;31156:1;31150:3;:7;31146:500;;;31220:16;31245:1;31239:3;:7;;;;:::i;:::-;31220:26;;31268:11;31261:18;;;;;:::i;:::-;;;31353:3;31325:9;:24;31343:4;31325:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;31407:11;31377:9;:26;31387:15;;;;;;;;;;;31377:26;;;;;;;;;;;;;;;;:41;;;;;;;;;;;31544:4;31521:34;;31530:4;31521:34;;;31551:3;31521:34;;;;;;:::i;:::-;;;;;;;;31594:15;;;;;;;;;;;31579:44;;31588:4;31579:44;;;31611:11;31579:44;;;;;;:::i;:::-;;;;;;;;31159:487;31146:500;31665:4;31658:11;;;;29985:1692;;;;;:::o;22207:26::-;;;;;;;;;;;;;:::o;24145:233::-;11661:13;:11;:13::i;:::-;24211:11:::1;;;;;;;;;;;24210:12;24202:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;24279:4;24265:11;;:18;;;;;;;;;;;;;;;;;;24306:4;24294:9;:16;;;;24334:4;24321:10;:17;;;;24354:16;;;;;;;;;;24145:233::o:0;22037:22::-;;;;;;;;;;;;;:::o;3903:31::-;;;:::o;8284:179::-;8341:7;8385:16;8368:13;:33;:87;;8431:24;:22;:24::i;:::-;8368:87;;;8404:24;8368:87;8361:94;;8284:179;:::o;23345:80::-;23392:25;23398:10;23410:6;23392:5;:25::i;:::-;23345:80;:::o;22140:28::-;;;;;;;;;;;;;:::o;25522:160::-;11661:13;:11;:13::i;:::-;25620:1:::1;25602:20;;:6;:20;;::::0;25594:45:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25668:6;25650:15;;:24;;;;;;;;;;;;;;;;;;25522:160:::0;:::o;4165:44::-;;;;;;;;;;;;;;;;;:::o;12423:103::-;11661:13;:11;:13::i;:::-;12488:30:::1;12515:1;12488:18;:30::i;:::-;12423:103::o:0;22103:30::-;;;;;;;;;;;;;:::o;22177:23::-;;;;;;;;;;;;;:::o;4591:41::-;;;;;;;;;;;;;;;;;:::o;23931:99::-;23973:4;24014:8;23997:13;:25;23990:32;;23931:99;:::o;11775:87::-;11821:7;11848:6;;;;;;;;;;;11841:13;;11775:87;:::o;24038:99::-;24080:4;24104:10;:8;:10::i;:::-;:25;;;;24118:11;:9;:11::i;:::-;24104:25;24097:32;;24038:99;:::o;3874:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25195:155::-;11661:13;:11;:13::i;:::-;25288:1:::1;25275:15;;:1;:15;;::::0;25267:40:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25341:1;25318:20;;:24;;;;;;;;;;;;;;;;;;25195:155:::0;:::o;23598:101::-;23215:11;:9;:11::i;:::-;23207:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;23657:34:::1;23671:10;23684:6;23657:5;:34::i;:::-;23598:101:::0;:::o;21405:26::-;;;;;;;;;;;;;:::o;29405:136::-;29473:4;29497:36;29510:10;29522:2;29526:6;29497:12;:36::i;:::-;29490:43;;29405:136;;;;:::o;25358:156::-;11661:13;:11;:13::i;:::-;25454:1:::1;25436:20;;:6;:20;;::::0;25428:45:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25500:6;25484:13;;:22;;;;;;;;;;;;;;;;;;25358:156:::0;:::o;23832:91::-;23873:4;23914:1;23897:13;:18;23890:25;;23832:91;:::o;21366:32::-;;;;;;;;;;;;;:::o;21781:27::-;;;;:::o;21815:28::-;;;;:::o;6749:1527::-;6977:15;6965:8;:27;;6957:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7190:24;7217:827;7357:18;:16;:18::i;:::-;7487:167;7689:5;7729:7;7771:5;7811:6;:13;7818:5;7811:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;7861:8;7442:458;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7402:525;;;;;;7277:673;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7245:724;;;;;;7988:1;8008;8028;7217:827;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7190:854;;8097:1;8069:30;;:16;:30;;;;:59;;;;;8123:5;8103:25;;:16;:25;;;8069:59;8061:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;8203:5;8164:9;:27;8174:16;8164:27;;;;;;;;;;;;;;;:36;8192:7;8164:36;;;;;;;;;;;;;;;:44;;;;7165:1055;8253:7;8237:31;;8246:5;8237:31;;;8262:5;8237:31;;;;;;:::i;:::-;;;;;;;;6749:1527;;;;;;;:::o;4218:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22068:28::-;;;;;;;;;;;;;:::o;24913:274::-;24973:4;24990:13;25006:12;:10;:12::i;:::-;24990:28;;25072:14;25031:9;:16;25041:5;25031:16;;;;;;;;;;;;;;;:38;25048:20;;;;;;;;;;;25031:38;;;;;;;;;;;;;;;:55;;;;25118:20;;;;;;;;;;;25102:53;;25111:5;25102:53;;;25140:14;25102:53;;;;;;:::i;:::-;;;;;;;;25175:4;25168:11;;;24913:274;;;:::o;12681:201::-;11661:13;:11;:13::i;:::-;12790:1:::1;12770:22;;:8;:22;;::::0;12762:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12846:28;12865:8;12846:18;:28::i;:::-;12681:201:::0;:::o;21327:32::-;;;;;;;;;;;;;:::o;24386:241::-;11661:13;:11;:13::i;:::-;24453:14:::1;;;;;;;;;;;24452:15;24444:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24527:4;24510:14;;:21;;;;;;;;;;;;;;;;;;24554:3;24542:9;:15;;;;24581:3;24568:10;:16;;;;24600:19;;;;;;;;;;24386:241::o:0;25690:156::-;11661:13;:11;:13::i;:::-;25786:1:::1;25768:20;;:6;:20;;::::0;25760:45:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25832:6;25816:13;;:22;;;;;;;;;;;;;;;;;;25690:156:::0;:::o;11940:132::-;12015:12;:10;:12::i;:::-;12004:23;;:7;:5;:7::i;:::-;:23;;;11996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11940:132::o;9128:335::-;9214:6;9199:11;;:21;;;;;;;:::i;:::-;;;;;;;;9388:6;9371:9;:13;9381:2;9371:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;9444:2;9423:32;;9440:1;9423:32;;;9448:6;9423:32;;;;;;:::i;:::-;;;;;;;;9128:335;;:::o;23707:117::-;23758:4;23802:5;23797:1;23783:11;;:15;;;;:::i;:::-;23782:25;;;;:::i;:::-;23775:32;;23707:117;:::o;28053:1123::-;23099:4;23073:23;;:30;;;;;;;;;;;;;;;;;;28442:17:::1;28489:1;28462:9;:24;28480:4;28462:24;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;28442:48;;28501:17;28548:12;28521:9;:24;28539:4;28521:24;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;28501:59;;28590:21;28628:1;28614:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28590:40;;28659:4;28641;28646:1;28641:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;28685:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28675:4;28680:1;28675:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;28709:6;;;;;;;;;;;:57;;;28781:12;28808:1;28824:4;28851;28871:15;28709:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28910:6;;;;;;;;;;;:22;;;28941:21;28987:4;29007:12;29034:1;29050::::0;29066:7:::1;:5;:7::i;:::-;29088:15;28910:194;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29117:13;;;;;;;;;;;:18;;29142:21;29117:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28104:1072;;;23152:5:::0;23126:23;;:31;;;;;;;;;;;;;;;;;;28053:1123::o;27238:735::-;27317:4;27346:7;:5;:7::i;:::-;27338:15;;:4;:15;;;:32;;;;27363:7;:5;:7::i;:::-;27357:13;;:2;:13;;;27338:32;:57;;;;27390:4;27374:21;;:4;:21;;;27338:57;27334:632;;;27555:1;27548:8;;;;27334:632;27594:4;;;;;;;;;;;27578:21;;:4;:21;;;27574:392;;27695:6;27683:9;;27674:6;:18;;;;:::i;:::-;:27;;;;:::i;:::-;27667:34;;;;27574:392;27737:4;;;;;;;;;;;27723:19;;:2;:19;;;27719:247;;27842:6;27829:10;;27820:6;:19;;;;:::i;:::-;:28;;;;:::i;:::-;27813:35;;;;27719:247;27953:1;27946:8;;27238:735;;;;;;:::o;8471:457::-;8536:7;8637:95;8771:4;8755:22;;;;;;:::i;:::-;;;;;;;;8800:14;8837:13;8881:4;8604:301;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8576:344;;;;;;8556:364;;8471:457;:::o;9471:338::-;9563:6;9544:9;:15;9554:4;9544:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;9732:6;9717:11;;:21;;;;;;;;;;;9790:1;9767:34;;9776:4;9767:34;;;9794:6;9767:34;;;;;;:::i;:::-;;;;;;;;9471:338;;:::o;13042:191::-;13116:16;13135:6;;;;;;;;;;;13116:25;;13161:8;13152:6;;:17;;;;;;;;;;;;;;;;;;13216:8;13185:40;;13206:8;13185:40;;;;;;;;;;;;13105:128;13042:191;:::o;10484:98::-;10537:7;10564:10;10557:17;;10484:98;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:222::-;4015:4;4053:2;4042:9;4038:18;4030:26;;4066:71;4134:1;4123:9;4119:17;4110:6;4066:71;:::i;:::-;3922:222;;;;:::o;4150:619::-;4227:6;4235;4243;4292:2;4280:9;4271:7;4267:23;4263:32;4260:119;;;4298:79;;:::i;:::-;4260:119;4418:1;4443:53;4488:7;4479:6;4468:9;4464:22;4443:53;:::i;:::-;4433:63;;4389:117;4545:2;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4516:118;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4150:619;;;;;:::o;4775:86::-;4810:7;4850:4;4843:5;4839:16;4828:27;;4775:86;;;:::o;4867:112::-;4950:22;4966:5;4950:22;:::i;:::-;4945:3;4938:35;4867:112;;:::o;4985:214::-;5074:4;5112:2;5101:9;5097:18;5089:26;;5125:67;5189:1;5178:9;5174:17;5165:6;5125:67;:::i;:::-;4985:214;;;;:::o;5205:77::-;5242:7;5271:5;5260:16;;5205:77;;;:::o;5288:118::-;5375:24;5393:5;5375:24;:::i;:::-;5370:3;5363:37;5288:118;;:::o;5412:222::-;5505:4;5543:2;5532:9;5528:18;5520:26;;5556:71;5624:1;5613:9;5609:17;5600:6;5556:71;:::i;:::-;5412:222;;;;:::o;5640:329::-;5699:6;5748:2;5736:9;5727:7;5723:23;5719:32;5716:119;;;5754:79;;:::i;:::-;5716:119;5874:1;5899:53;5944:7;5935:6;5924:9;5920:22;5899:53;:::i;:::-;5889:63;;5845:117;5640:329;;;;:::o;5975:::-;6034:6;6083:2;6071:9;6062:7;6058:23;6054:32;6051:119;;;6089:79;;:::i;:::-;6051:119;6209:1;6234:53;6279:7;6270:6;6259:9;6255:22;6234:53;:::i;:::-;6224:63;;6180:117;5975:329;;;;:::o;6310:60::-;6338:3;6359:5;6352:12;;6310:60;;;:::o;6376:142::-;6426:9;6459:53;6477:34;6486:24;6504:5;6486:24;:::i;:::-;6477:34;:::i;:::-;6459:53;:::i;:::-;6446:66;;6376:142;;;:::o;6524:126::-;6574:9;6607:37;6638:5;6607:37;:::i;:::-;6594:50;;6524:126;;;:::o;6656:148::-;6728:9;6761:37;6792:5;6761:37;:::i;:::-;6748:50;;6656:148;;;:::o;6810:175::-;6919:59;6972:5;6919:59;:::i;:::-;6914:3;6907:72;6810:175;;:::o;6991:266::-;7106:4;7144:2;7133:9;7129:18;7121:26;;7157:93;7247:1;7236:9;7232:17;7223:6;7157:93;:::i;:::-;6991:266;;;;:::o;7263:151::-;7338:9;7371:37;7402:5;7371:37;:::i;:::-;7358:50;;7263:151;;;:::o;7420:181::-;7532:62;7588:5;7532:62;:::i;:::-;7527:3;7520:75;7420:181;;:::o;7607:272::-;7725:4;7763:2;7752:9;7748:18;7740:26;;7776:96;7869:1;7858:9;7854:17;7845:6;7776:96;:::i;:::-;7607:272;;;;:::o;7885:118::-;7956:22;7972:5;7956:22;:::i;:::-;7949:5;7946:33;7936:61;;7993:1;7990;7983:12;7936:61;7885:118;:::o;8009:135::-;8053:5;8091:6;8078:20;8069:29;;8107:31;8132:5;8107:31;:::i;:::-;8009:135;;;;:::o;8150:122::-;8223:24;8241:5;8223:24;:::i;:::-;8216:5;8213:35;8203:63;;8262:1;8259;8252:12;8203:63;8150:122;:::o;8278:139::-;8324:5;8362:6;8349:20;8340:29;;8378:33;8405:5;8378:33;:::i;:::-;8278:139;;;;:::o;8423:1199::-;8534:6;8542;8550;8558;8566;8574;8582;8631:3;8619:9;8610:7;8606:23;8602:33;8599:120;;;8638:79;;:::i;:::-;8599:120;8758:1;8783:53;8828:7;8819:6;8808:9;8804:22;8783:53;:::i;:::-;8773:63;;8729:117;8885:2;8911:53;8956:7;8947:6;8936:9;8932:22;8911:53;:::i;:::-;8901:63;;8856:118;9013:2;9039:53;9084:7;9075:6;9064:9;9060:22;9039:53;:::i;:::-;9029:63;;8984:118;9141:2;9167:53;9212:7;9203:6;9192:9;9188:22;9167:53;:::i;:::-;9157:63;;9112:118;9269:3;9296:51;9339:7;9330:6;9319:9;9315:22;9296:51;:::i;:::-;9286:61;;9240:117;9396:3;9423:53;9468:7;9459:6;9448:9;9444:22;9423:53;:::i;:::-;9413:63;;9367:119;9525:3;9552:53;9597:7;9588:6;9577:9;9573:22;9552:53;:::i;:::-;9542:63;;9496:119;8423:1199;;;;;;;;;;:::o;9628:474::-;9696:6;9704;9753:2;9741:9;9732:7;9728:23;9724:32;9721:119;;;9759:79;;:::i;:::-;9721:119;9879:1;9904:53;9949:7;9940:6;9929:9;9925:22;9904:53;:::i;:::-;9894:63;;9850:117;10006:2;10032:53;10077:7;10068:6;10057:9;10053:22;10032:53;:::i;:::-;10022:63;;9977:118;9628:474;;;;;:::o;10108:93::-;10144:7;10184:10;10177:5;10173:22;10162:33;;10108:93;;;:::o;10207:120::-;10279:23;10296:5;10279:23;:::i;:::-;10272:5;10269:34;10259:62;;10317:1;10314;10307:12;10259:62;10207:120;:::o;10333:137::-;10378:5;10416:6;10403:20;10394:29;;10432:32;10458:5;10432:32;:::i;:::-;10333:137;;;;:::o;10476:327::-;10534:6;10583:2;10571:9;10562:7;10558:23;10554:32;10551:119;;;10589:79;;:::i;:::-;10551:119;10709:1;10734:52;10778:7;10769:6;10758:9;10754:22;10734:52;:::i;:::-;10724:62;;10680:116;10476:327;;;;:::o;10809:153::-;10886:9;10919:37;10950:5;10919:37;:::i;:::-;10906:50;;10809:153;;;:::o;10968:185::-;11082:64;11140:5;11082:64;:::i;:::-;11077:3;11070:77;10968:185;;:::o;11159:276::-;11279:4;11317:2;11306:9;11302:18;11294:26;;11330:98;11425:1;11414:9;11410:17;11401:6;11330:98;:::i;:::-;11159:276;;;;:::o;11441:180::-;11489:77;11486:1;11479:88;11586:4;11583:1;11576:15;11610:4;11607:1;11600:15;11627:320;11671:6;11708:1;11702:4;11698:12;11688:22;;11755:1;11749:4;11745:12;11776:18;11766:81;;11832:4;11824:6;11820:17;11810:27;;11766:81;11894:2;11886:6;11883:14;11863:18;11860:38;11857:84;;11913:18;;:::i;:::-;11857:84;11678:269;11627:320;;;:::o;11953:166::-;12093:18;12089:1;12081:6;12077:14;12070:42;11953:166;:::o;12125:366::-;12267:3;12288:67;12352:2;12347:3;12288:67;:::i;:::-;12281:74;;12364:93;12453:3;12364:93;:::i;:::-;12482:2;12477:3;12473:12;12466:19;;12125:366;;;:::o;12497:419::-;12663:4;12701:2;12690:9;12686:18;12678:26;;12750:9;12744:4;12740:20;12736:1;12725:9;12721:17;12714:47;12778:131;12904:4;12778:131;:::i;:::-;12770:139;;12497:419;;;:::o;12922:162::-;13062:14;13058:1;13050:6;13046:14;13039:38;12922:162;:::o;13090:366::-;13232:3;13253:67;13317:2;13312:3;13253:67;:::i;:::-;13246:74;;13329:93;13418:3;13329:93;:::i;:::-;13447:2;13442:3;13438:12;13431:19;;13090:366;;;:::o;13462:419::-;13628:4;13666:2;13655:9;13651:18;13643:26;;13715:9;13709:4;13705:20;13701:1;13690:9;13686:17;13679:47;13743:131;13869:4;13743:131;:::i;:::-;13735:139;;13462:419;;;:::o;13887:180::-;13935:77;13932:1;13925:88;14032:4;14029:1;14022:15;14056:4;14053:1;14046:15;14073:410;14113:7;14136:20;14154:1;14136:20;:::i;:::-;14131:25;;14170:20;14188:1;14170:20;:::i;:::-;14165:25;;14225:1;14222;14218:9;14247:30;14265:11;14247:30;:::i;:::-;14236:41;;14426:1;14417:7;14413:15;14410:1;14407:22;14387:1;14380:9;14360:83;14337:139;;14456:18;;:::i;:::-;14337:139;14121:362;14073:410;;;;:::o;14489:180::-;14537:77;14534:1;14527:88;14634:4;14631:1;14624:15;14658:4;14655:1;14648:15;14675:185;14715:1;14732:20;14750:1;14732:20;:::i;:::-;14727:25;;14766:20;14784:1;14766:20;:::i;:::-;14761:25;;14805:1;14795:35;;14810:18;;:::i;:::-;14795:35;14852:1;14849;14845:9;14840:14;;14675:185;;;;:::o;14866:85::-;14911:7;14940:5;14929:16;;14866:85;;;:::o;14957:158::-;15015:9;15048:61;15066:42;15075:32;15101:5;15075:32;:::i;:::-;15066:42;:::i;:::-;15048:61;:::i;:::-;15035:74;;14957:158;;;:::o;15121:147::-;15216:45;15255:5;15216:45;:::i;:::-;15211:3;15204:58;15121:147;;:::o;15274:807::-;15523:4;15561:3;15550:9;15546:19;15538:27;;15575:71;15643:1;15632:9;15628:17;15619:6;15575:71;:::i;:::-;15656:72;15724:2;15713:9;15709:18;15700:6;15656:72;:::i;:::-;15738:80;15814:2;15803:9;15799:18;15790:6;15738:80;:::i;:::-;15828;15904:2;15893:9;15889:18;15880:6;15828:80;:::i;:::-;15918:73;15986:3;15975:9;15971:19;15962:6;15918:73;:::i;:::-;16001;16069:3;16058:9;16054:19;16045:6;16001:73;:::i;:::-;15274:807;;;;;;;;;:::o;16087:143::-;16144:5;16175:6;16169:13;16160:22;;16191:33;16218:5;16191:33;:::i;:::-;16087:143;;;;:::o;16236:663::-;16324:6;16332;16340;16389:2;16377:9;16368:7;16364:23;16360:32;16357:119;;;16395:79;;:::i;:::-;16357:119;16515:1;16540:64;16596:7;16587:6;16576:9;16572:22;16540:64;:::i;:::-;16530:74;;16486:128;16653:2;16679:64;16735:7;16726:6;16715:9;16711:22;16679:64;:::i;:::-;16669:74;;16624:129;16792:2;16818:64;16874:7;16865:6;16854:9;16850:22;16818:64;:::i;:::-;16808:74;;16763:129;16236:663;;;;;:::o;16905:143::-;16962:5;16993:6;16987:13;16978:22;;17009:33;17036:5;17009:33;:::i;:::-;16905:143;;;;:::o;17054:351::-;17124:6;17173:2;17161:9;17152:7;17148:23;17144:32;17141:119;;;17179:79;;:::i;:::-;17141:119;17299:1;17324:64;17380:7;17371:6;17360:9;17356:22;17324:64;:::i;:::-;17314:74;;17270:128;17054:351;;;;:::o;17411:332::-;17532:4;17570:2;17559:9;17555:18;17547:26;;17583:71;17651:1;17640:9;17636:17;17627:6;17583:71;:::i;:::-;17664:72;17732:2;17721:9;17717:18;17708:6;17664:72;:::i;:::-;17411:332;;;;;:::o;17749:194::-;17789:4;17809:20;17827:1;17809:20;:::i;:::-;17804:25;;17843:20;17861:1;17843:20;:::i;:::-;17838:25;;17887:1;17884;17880:9;17872:17;;17911:1;17905:4;17902:11;17899:37;;;17916:18;;:::i;:::-;17899:37;17749:194;;;;:::o;17949:170::-;18089:22;18085:1;18077:6;18073:14;18066:46;17949:170;:::o;18125:366::-;18267:3;18288:67;18352:2;18347:3;18288:67;:::i;:::-;18281:74;;18364:93;18453:3;18364:93;:::i;:::-;18482:2;18477:3;18473:12;18466:19;;18125:366;;;:::o;18497:419::-;18663:4;18701:2;18690:9;18686:18;18678:26;;18750:9;18744:4;18740:20;18736:1;18725:9;18721:17;18714:47;18778:131;18904:4;18778:131;:::i;:::-;18770:139;;18497:419;;;:::o;18922:102::-;18964:8;19011:5;19008:1;19004:13;18983:34;;18922:102;;;:::o;19030:848::-;19091:5;19098:4;19122:6;19113:15;;19146:5;19137:14;;19160:712;19181:1;19171:8;19168:15;19160:712;;;19276:4;19271:3;19267:14;19261:4;19258:24;19255:50;;;19285:18;;:::i;:::-;19255:50;19335:1;19325:8;19321:16;19318:451;;;19750:4;19743:5;19739:16;19730:25;;19318:451;19800:4;19794;19790:15;19782:23;;19830:32;19853:8;19830:32;:::i;:::-;19818:44;;19160:712;;;19030:848;;;;;;;:::o;19884:1073::-;19938:5;20129:8;20119:40;;20150:1;20141:10;;20152:5;;20119:40;20178:4;20168:36;;20195:1;20186:10;;20197:5;;20168:36;20264:4;20312:1;20307:27;;;;20348:1;20343:191;;;;20257:277;;20307:27;20325:1;20316:10;;20327:5;;;20343:191;20388:3;20378:8;20375:17;20372:43;;;20395:18;;:::i;:::-;20372:43;20444:8;20441:1;20437:16;20428:25;;20479:3;20472:5;20469:14;20466:40;;;20486:18;;:::i;:::-;20466:40;20519:5;;;20257:277;;20643:2;20633:8;20630:16;20624:3;20618:4;20615:13;20611:36;20593:2;20583:8;20580:16;20575:2;20569:4;20566:12;20562:35;20546:111;20543:246;;;20699:8;20693:4;20689:19;20680:28;;20734:3;20727:5;20724:14;20721:40;;;20741:18;;:::i;:::-;20721:40;20774:5;;20543:246;20814:42;20852:3;20842:8;20836:4;20833:1;20814:42;:::i;:::-;20799:57;;;;20888:4;20883:3;20879:14;20872:5;20869:25;20866:51;;;20897:18;;:::i;:::-;20866:51;20946:4;20939:5;20935:16;20926:25;;19884:1073;;;;;;:::o;20963:281::-;21021:5;21045:23;21063:4;21045:23;:::i;:::-;21037:31;;21089:25;21105:8;21089:25;:::i;:::-;21077:37;;21133:104;21170:66;21160:8;21154:4;21133:104;:::i;:::-;21124:113;;20963:281;;;;:::o;21250:177::-;21390:29;21386:1;21378:6;21374:14;21367:53;21250:177;:::o;21433:366::-;21575:3;21596:67;21660:2;21655:3;21596:67;:::i;:::-;21589:74;;21672:93;21761:3;21672:93;:::i;:::-;21790:2;21785:3;21781:12;21774:19;;21433:366;;;:::o;21805:419::-;21971:4;22009:2;21998:9;21994:18;21986:26;;22058:9;22052:4;22048:20;22044:1;22033:9;22029:17;22022:47;22086:131;22212:4;22086:131;:::i;:::-;22078:139;;21805:419;;;:::o;22230:161::-;22370:13;22366:1;22358:6;22354:14;22347:37;22230:161;:::o;22397:366::-;22539:3;22560:67;22624:2;22619:3;22560:67;:::i;:::-;22553:74;;22636:93;22725:3;22636:93;:::i;:::-;22754:2;22749:3;22745:12;22738:19;;22397:366;;;:::o;22769:419::-;22935:4;22973:2;22962:9;22958:18;22950:26;;23022:9;23016:4;23012:20;23008:1;22997:9;22993:17;22986:47;23050:131;23176:4;23050:131;:::i;:::-;23042:139;;22769:419;;;:::o;23194:173::-;23334:25;23330:1;23322:6;23318:14;23311:49;23194:173;:::o;23373:366::-;23515:3;23536:67;23600:2;23595:3;23536:67;:::i;:::-;23529:74;;23612:93;23701:3;23612:93;:::i;:::-;23730:2;23725:3;23721:12;23714:19;;23373:366;;;:::o;23745:419::-;23911:4;23949:2;23938:9;23934:18;23926:26;;23998:9;23992:4;23988:20;23984:1;23973:9;23969:17;23962:47;24026:131;24152:4;24026:131;:::i;:::-;24018:139;;23745:419;;;:::o;24170:775::-;24403:4;24441:3;24430:9;24426:19;24418:27;;24455:71;24523:1;24512:9;24508:17;24499:6;24455:71;:::i;:::-;24536:72;24604:2;24593:9;24589:18;24580:6;24536:72;:::i;:::-;24618;24686:2;24675:9;24671:18;24662:6;24618:72;:::i;:::-;24700;24768:2;24757:9;24753:18;24744:6;24700:72;:::i;:::-;24782:73;24850:3;24839:9;24835:19;24826:6;24782:73;:::i;:::-;24865;24933:3;24922:9;24918:19;24909:6;24865:73;:::i;:::-;24170:775;;;;;;;;;:::o;24951:148::-;25053:11;25090:3;25075:18;;24951:148;;;;:::o;25105:214::-;25245:66;25241:1;25233:6;25229:14;25222:90;25105:214;:::o;25325:400::-;25485:3;25506:84;25588:1;25583:3;25506:84;:::i;:::-;25499:91;;25599:93;25688:3;25599:93;:::i;:::-;25717:1;25712:3;25708:11;25701:18;;25325:400;;;:::o;25731:79::-;25770:7;25799:5;25788:16;;25731:79;;;:::o;25816:157::-;25921:45;25941:24;25959:5;25941:24;:::i;:::-;25921:45;:::i;:::-;25916:3;25909:58;25816:157;;:::o;25979:663::-;26220:3;26242:148;26386:3;26242:148;:::i;:::-;26235:155;;26400:75;26471:3;26462:6;26400:75;:::i;:::-;26500:2;26495:3;26491:12;26484:19;;26513:75;26584:3;26575:6;26513:75;:::i;:::-;26613:2;26608:3;26604:12;26597:19;;26633:3;26626:10;;25979:663;;;;;:::o;26648:545::-;26821:4;26859:3;26848:9;26844:19;26836:27;;26873:71;26941:1;26930:9;26926:17;26917:6;26873:71;:::i;:::-;26954:68;27018:2;27007:9;27003:18;26994:6;26954:68;:::i;:::-;27032:72;27100:2;27089:9;27085:18;27076:6;27032:72;:::i;:::-;27114;27182:2;27171:9;27167:18;27158:6;27114:72;:::i;:::-;26648:545;;;;;;;:::o;27199:164::-;27339:16;27335:1;27327:6;27323:14;27316:40;27199:164;:::o;27369:366::-;27511:3;27532:67;27596:2;27591:3;27532:67;:::i;:::-;27525:74;;27608:93;27697:3;27608:93;:::i;:::-;27726:2;27721:3;27717:12;27710:19;;27369:366;;;:::o;27741:419::-;27907:4;27945:2;27934:9;27930:18;27922:26;;27994:9;27988:4;27984:20;27980:1;27969:9;27965:17;27958:47;28022:131;28148:4;28022:131;:::i;:::-;28014:139;;27741:419;;;:::o;28166:225::-;28306:34;28302:1;28294:6;28290:14;28283:58;28375:8;28370:2;28362:6;28358:15;28351:33;28166:225;:::o;28397:366::-;28539:3;28560:67;28624:2;28619:3;28560:67;:::i;:::-;28553:74;;28636:93;28725:3;28636:93;:::i;:::-;28754:2;28749:3;28745:12;28738:19;;28397:366;;;:::o;28769:419::-;28935:4;28973:2;28962:9;28958:18;28950:26;;29022:9;29016:4;29012:20;29008:1;28997:9;28993:17;28986:47;29050:131;29176:4;29050:131;:::i;:::-;29042:139;;28769:419;;;:::o;29194:182::-;29334:34;29330:1;29322:6;29318:14;29311:58;29194:182;:::o;29382:366::-;29524:3;29545:67;29609:2;29604:3;29545:67;:::i;:::-;29538:74;;29621:93;29710:3;29621:93;:::i;:::-;29739:2;29734:3;29730:12;29723:19;;29382:366;;;:::o;29754:419::-;29920:4;29958:2;29947:9;29943:18;29935:26;;30007:9;30001:4;29997:20;29993:1;29982:9;29978:17;29971:47;30035:131;30161:4;30035:131;:::i;:::-;30027:139;;29754:419;;;:::o;30179:191::-;30219:3;30238:20;30256:1;30238:20;:::i;:::-;30233:25;;30272:20;30290:1;30272:20;:::i;:::-;30267:25;;30315:1;30312;30308:9;30301:16;;30336:3;30333:1;30330:10;30327:36;;;30343:18;;:::i;:::-;30327:36;30179:191;;;;:::o;30376:180::-;30424:77;30421:1;30414:88;30521:4;30518:1;30511:15;30545:4;30542:1;30535:15;30562:180;30610:77;30607:1;30600:88;30707:4;30704:1;30697:15;30731:4;30728:1;30721:15;30748:114;30815:6;30849:5;30843:12;30833:22;;30748:114;;;:::o;30868:184::-;30967:11;31001:6;30996:3;30989:19;31041:4;31036:3;31032:14;31017:29;;30868:184;;;;:::o;31058:132::-;31125:4;31148:3;31140:11;;31178:4;31173:3;31169:14;31161:22;;31058:132;;;:::o;31196:108::-;31273:24;31291:5;31273:24;:::i;:::-;31268:3;31261:37;31196:108;;:::o;31310:179::-;31379:10;31400:46;31442:3;31434:6;31400:46;:::i;:::-;31478:4;31473:3;31469:14;31455:28;;31310:179;;;;:::o;31495:113::-;31565:4;31597;31592:3;31588:14;31580:22;;31495:113;;;:::o;31644:732::-;31763:3;31792:54;31840:5;31792:54;:::i;:::-;31862:86;31941:6;31936:3;31862:86;:::i;:::-;31855:93;;31972:56;32022:5;31972:56;:::i;:::-;32051:7;32082:1;32067:284;32092:6;32089:1;32086:13;32067:284;;;32168:6;32162:13;32195:63;32254:3;32239:13;32195:63;:::i;:::-;32188:70;;32281:60;32334:6;32281:60;:::i;:::-;32271:70;;32127:224;32114:1;32111;32107:9;32102:14;;32067:284;;;32071:14;32367:3;32360:10;;31768:608;;;31644:732;;;;:::o;32382:831::-;32645:4;32683:3;32672:9;32668:19;32660:27;;32697:71;32765:1;32754:9;32750:17;32741:6;32697:71;:::i;:::-;32778:80;32854:2;32843:9;32839:18;32830:6;32778:80;:::i;:::-;32905:9;32899:4;32895:20;32890:2;32879:9;32875:18;32868:48;32933:108;33036:4;33027:6;32933:108;:::i;:::-;32925:116;;33051:72;33119:2;33108:9;33104:18;33095:6;33051:72;:::i;:::-;33133:73;33201:3;33190:9;33186:19;33177:6;33133:73;:::i;:::-;32382:831;;;;;;;;:::o;33219:147::-;33320:11;33357:3;33342:18;;33219:147;;;;:::o;33372:114::-;;:::o;33492:398::-;33651:3;33672:83;33753:1;33748:3;33672:83;:::i;:::-;33665:90;;33764:93;33853:3;33764:93;:::i;:::-;33882:1;33877:3;33873:11;33866:18;;33492:398;;;:::o;33896:379::-;34080:3;34102:147;34245:3;34102:147;:::i;:::-;34095:154;;34266:3;34259:10;;33896:379;;;:::o;34281:144::-;34333:4;34356:3;34348:11;;34379:3;34376:1;34369:14;34413:4;34410:1;34400:18;34392:26;;34281:144;;;:::o;34453:878::-;34558:3;34595:5;34589:12;34624:36;34650:9;34624:36;:::i;:::-;34676:88;34757:6;34752:3;34676:88;:::i;:::-;34669:95;;34795:1;34784:9;34780:17;34811:1;34806:166;;;;34986:1;34981:344;;;;34773:552;;34806:166;34890:4;34886:9;34875;34871:25;34866:3;34859:38;34952:6;34945:14;34938:22;34930:6;34926:35;34921:3;34917:45;34910:52;;34806:166;;34981:344;35048:41;35083:5;35048:41;:::i;:::-;35111:1;35125:154;35139:6;35136:1;35133:13;35125:154;;;35213:7;35207:14;35203:1;35198:3;35194:11;35187:35;35263:1;35254:7;35250:15;35239:26;;35161:4;35158:1;35154:12;35149:17;;35125:154;;;35308:6;35303:3;35299:16;35292:23;;34988:337;;34773:552;;34562:769;;34453:878;;;;:::o;35337:273::-;35468:3;35490:94;35580:3;35571:6;35490:94;:::i;:::-;35483:101;;35601:3;35594:10;;35337:273;;;;:::o;35616:664::-;35821:4;35859:3;35848:9;35844:19;35836:27;;35873:71;35941:1;35930:9;35926:17;35917:6;35873:71;:::i;:::-;35954:72;36022:2;36011:9;36007:18;35998:6;35954:72;:::i;:::-;36036;36104:2;36093:9;36089:18;36080:6;36036:72;:::i;:::-;36118;36186:2;36175:9;36171:18;36162:6;36118:72;:::i;:::-;36200:73;36268:3;36257:9;36253:19;36244:6;36200:73;:::i;:::-;35616:664;;;;;;;;:::o

Swarm Source

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