ETH Price: $3,473.22 (-0.49%)

Token

Risu (RISU)
 

Overview

Max Total Supply

1,000,000,000 RISU

Holders

958 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
109.249709849 RISU

Value
$0.00
0x832a80AdEecFC584e09c973e68f7ea9146A09549
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

RISU is deflationary token restoring integrity to meme coin by building the safest Dex RISU Swap, RISU Bridge Cross-chain Bridge, RISU Wallet and RISU Blockchain.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RISU

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 2022-10-17
*/

pragma solidity 0.8.10;
pragma experimental ABIEncoderV2;

// SPDX-License-Identifier: MIT
// ORIGINAL RISU CODE
// VISIT US https://risublockchain.com/
// TELEGRAM @Risuchain

interface IBEP20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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() {
        require(owner() == _msgSender(), "Ownable: caller is not 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);
    }
}


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by 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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract RISU is Context, IBEP20, Ownable {
    using SafeMath for uint256;

    // all private variables and functions are only for contract use
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromReward;
    mapping(address => bool) private _isExcludedFromMaxHoldLimit;
    mapping(address => bool) private _isExcludedFromMinBuyLimit;
    mapping(address => bool) public isSniper;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 1e9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Risu"; // token name
    string private _symbol = "RISU"; // token ticker
    uint8 private _decimals = 9; // token decimals

    IDexRouter public dexRouter; // Dex router address
    address public dexPair; // LP token address
    address payable public marketWallet; // market wallet address
    address public burnAddress = (0x000000000000000000000000000000000000dEaD);

    uint256 public minTokenToSwap = 1000000 * 1e9; // 100k amount will trigger the swap and add liquidity
    uint256 public maxHoldingAmount = 20000000 * 1e9;
    uint256 public minBuyLimit = 20000000 * 1e9;

    uint256 private excludedTSupply; // for contract use
    uint256 private excludedRSupply; // for contract use

    bool public swapAndLiquifyEnabled = true; // should be true to turn on to liquidate the pool
    bool public Fees = true;
    bool public antiBotStopEnabled = false;
    bool public isMaxHoldLimitValid = true; // max Holding Limit is valid if it's true

    // buy tax fee
    uint256 public reflectionFeeOnBuying = 10;
    uint256 public liquidityFeeOnBuying = 10;
    uint256 public marketWalletFeeOnBuying = 50;
    uint256 public burnFeeOnBuying = 15;

    // sell tax fee
    uint256 public reflectionFeeOnSelling = 10;
    uint256 public liquidityFeeOnSelling = 10;
    uint256 public marketWalletFeeOnSelling = 50;
    uint256 public burnFeeOnSelling = 15;

    // for smart contract use
    uint256 private _currentReflectionFee;
    uint256 private _currentLiquidityFee;
    uint256 private _currentmarketWalletFee;
    uint256 private _currentBurnFee;

    uint256 private _accumulatedLiquidity;
    uint256 private _accumulatedMarketWallet;

    //Events for blockchain
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event AntiBotStopEnableUpdated(bool enabled);

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

    // constructor for initializing the contract
    constructor(address payable _marketWallet) {
        _rOwned[owner()] = _rTotal;
        marketWallet = _marketWallet;

        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            // 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D //testnet
        );
        // Create a Dex pair for this new token
        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 addresses from max holding limit
        _isExcludedFromMaxHoldLimit[owner()] = true;
        _isExcludedFromMaxHoldLimit[address(this)] = true;
        _isExcludedFromMaxHoldLimit[dexPair] = true;
        _isExcludedFromMaxHoldLimit[burnAddress] = true;

        _isExcludedFromMinBuyLimit[owner()] = true;
        _isExcludedFromMinBuyLimit[dexPair] = true;

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

    // token standards by Blockchain

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

    function balanceOf(address _account)
        public
        view
        override
        returns (uint256)
    {
        if (_isExcludedFromReward[_account]) return _tOwned[_account];
        return tokenFromReflection(_rOwned[_account]);
    }

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

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


    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) {
        require(!isSniper[sender], "Sniper detected");
        require(!isSniper[recipient], "Sniper detected");
        require(!antiBotStopEnabled, "Trading shifted for bot deletion.");

        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "Token: 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,
                "Token: decreased allowance below zero"
            )
        );
        return true;
    }

    // public view able functions

    // to check wether the address is excluded from reward or not
    function isExcludedFromReward(address _account) public view returns (bool) {
        return _isExcludedFromReward[_account];
    }

    // to check how much tokens get redistributed among holders till now
    function totalHolderDistribution() public view returns (uint256) {
        return _tFeeTotal;
    }

    // to check wether the address is excluded from fee or not
    function isExcludedFromFee(address _account) public view returns (bool) {
        return _isExcludedFromFee[_account];
    }
    // to check wether the address is excluded from max Holding or not
    function isExcludedFromMaxHoldLimit(address _account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxHoldLimit[_account];
    }

    // to check wether the address is excluded from max txn or not
    function isExcludedFromMaxTxnLimit(address _account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMinBuyLimit[_account];
    }

    // For manual distribution to the holders
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcludedFromReward[sender],
            "Token: Excluded addresses cannot call this function"
        );
        uint256 rAmount = tAmount.mul(_getRate());
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "BEP20: Amount must be less than supply");
        if (!deductTransferFee) {
            uint256 rAmount = tAmount.mul(_getRate());
            return rAmount;
        } else {
            uint256 rAmount = tAmount.mul(_getRate());
            uint256 rTransferAmount = rAmount.sub(
                totalFeePerTx(tAmount).mul(_getRate())
            );
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Token: Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    //to include or exludde  any address from max hold limit
    function includeOrExcludeFromMaxHoldLimit(address _address, bool value)
        public
        onlyOwner
    {
        _isExcludedFromMaxHoldLimit[_address] = value;
    }

    //to include or exludde  any address from max hold limit
    function includeOrExcludeFromMaxTxnLimit(address _address, bool value)
        public
        onlyOwner
    {
        _isExcludedFromMinBuyLimit[_address] = value;
    }

    //only owner can change sniper shift
    function setAntiBotStopEnabled(bool _state) public onlyOwner {
        antiBotStopEnabled = _state;
        emit AntiBotStopEnableUpdated(_state);
    }

    //only owner can change MaxHoldingAmount
    function setMaxHoldingAmount(uint256 _amount) public onlyOwner {
        maxHoldingAmount = _amount;
    }

    //only owner can change MaxHoldingAmount
    function setMinBuyLimit(uint256 _amount) public onlyOwner {
        minBuyLimit = _amount;
    }

    // owner can remove stuck tokens in case of any issue
    function removeStuckToken(address _token, uint256 _amount)
        external
        onlyOwner
    {
        IBEP20(_token).transfer(owner(), _amount);
    }
    
    //only owner can change SellFeePercentages any time after deployment
    function setSellFeePercent(
        uint256 _redistributionFee,
        uint256 _liquidityFee,
        uint256 _marketWalletFee,
        uint256 _burnFee
    ) external onlyOwner {
        reflectionFeeOnSelling = _redistributionFee;
        liquidityFeeOnSelling = _liquidityFee;
        marketWalletFeeOnSelling = _marketWalletFee;
        burnFeeOnSelling = _burnFee;
    }

    //to include or exludde  any address from fee
    function includeOrExcludeFromFee(address _account, bool _value)
        public
        onlyOwner
    {
        _isExcludedFromFee[_account] = _value;
    }

    //only owner can change MinTokenToSwap
    function setMinTokenToSwap(uint256 _amount) public onlyOwner {
        minTokenToSwap = _amount;
    }

    //only owner can change BuyFeePercentages any time after deployment
    function setBuyFeePercent(
        uint256 _redistributionFee,
        uint256 _liquidityFee,
        uint256 _marketWalletFee,
        uint256 _burnFee
    ) external onlyOwner {
        reflectionFeeOnBuying = _redistributionFee;
        liquidityFeeOnBuying = _liquidityFee;
        marketWalletFeeOnBuying = _marketWalletFee;
        burnFeeOnBuying = _burnFee;
    }

    
    //only owner can change state of swapping, he can turn it in to true or false any time after deployment
    function enableOrDisableSwapAndLiquify(bool _state) public onlyOwner {
        swapAndLiquifyEnabled = _state;
        emit SwapAndLiquifyEnabledUpdated(_state);
    }

    //To enable or disable all fees when set it to true fees will be disabled
    function enableOrDisableFees(bool _state) external onlyOwner {
        Fees = _state;
    }

    // owner can change market address
    function setmarketWalletAddress(address payable _newAddress)
        external
        onlyOwner
    {
        marketWallet = _newAddress;
    }

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

    // internal functions for contract use

    function totalFeePerTx(uint256 tAmount) internal view returns (uint256) {
        uint256 percentage = tAmount
            .mul(
                _currentReflectionFee.add(_currentLiquidityFee).add(
                    _currentmarketWalletFee.add(_currentBurnFee)
                )
            )
            .div(1e3);
        return percentage;
    }

    function _checkMaxWalletAmount(address to, uint256 amount) private view{
        if (
            !_isExcludedFromMaxHoldLimit[to] // by default false
        ) {
            if (isMaxHoldLimitValid) {
                require(
                    balanceOf(to).add(amount) <= maxHoldingAmount,
                    "BEP20: amount exceed max holding limit"
                );
            }
        }
    }


    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function setBuyFee() private {
        _currentReflectionFee = reflectionFeeOnBuying;
        _currentLiquidityFee = liquidityFeeOnBuying;
        _currentmarketWalletFee = marketWalletFeeOnBuying;
        _currentBurnFee = burnFeeOnBuying; 
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        rSupply = rSupply.sub(excludedRSupply);
        tSupply = tSupply.sub(excludedTSupply);
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function removeAllFee() private {
        _currentReflectionFee = 0;
        _currentLiquidityFee = 0;
        _currentmarketWalletFee = 0;
        _currentBurnFee = 0;
    }

    function setSellFee() private {
        _currentReflectionFee = reflectionFeeOnSelling;
        _currentLiquidityFee = liquidityFeeOnSelling;
        _currentmarketWalletFee = marketWalletFeeOnSelling;
        _currentBurnFee = burnFeeOnSelling;
    }

     function addSniperInList(address _account) external onlyOwner {
        require(_account != address(dexRouter), "We can not blacklist router");
        require(!isSniper[_account], "Sniper already exist");
        isSniper[_account] = true;
    }

    function removeSniperFromList(address _account) external onlyOwner {
        require(isSniper[_account], "Not a sniper");
        isSniper[_account] = false;
    }

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

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

    // base function to transfer tokens
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "Token: transfer from the zero address");
        require(to != address(0), "Token: transfer to the zero address");
        require(amount > 0, "Token: transfer amount must be greater than zero");
        
        // swap and liquify
        swapAndLiquify(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] || !Fees) {
            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 {
        // buying handler
        require(!isSniper[sender], "Sniper detected");
        require(!isSniper[recipient], "Sniper detected");
        require(!antiBotStopEnabled, "Trading shifted for bot deletion.");

        if(!_isExcludedFromMinBuyLimit[recipient]){
            require(amount <= minBuyLimit,"Amount must be greater than minimum buy Limit" );
        }
        if (sender == dexPair && takeFee) {
            setBuyFee();
        }
        // selling handler
        else if (recipient == dexPair && takeFee) {
            setSellFee();
        }
        // normal transaction handler
        else {
            removeAllFee();
        }

        // check if sender or reciver excluded from reward then do transfer accordingly
        if (
            _isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]
        ) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (
            !_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]
        ) {
            _transferToExcluded(sender, recipient, amount);
        } else if (
            _isExcludedFromReward[sender] && _isExcludedFromReward[recipient]
        ) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    // if both sender and receiver are not excluded from reward
    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(
            totalFeePerTx(tAmount).mul(currentRate)
        );
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllFee(sender,tAmount, currentRate);
        _takeBurnFee(sender,tAmount, currentRate);
        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    // if sender is excluded from reward
    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(
            totalFeePerTx(tAmount).mul(currentRate)
        );
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        excludedTSupply = excludedTSupply.sub(tAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllFee(sender,tAmount, currentRate);
        _takeBurnFee(sender,tAmount, currentRate);
        _reflectFee(tAmount);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    // if both sender and receiver are excluded from reward
    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        excludedTSupply = excludedTSupply.sub(tAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        excludedTSupply = excludedTSupply.add(tAmount);
        _takeAllFee(sender,tAmount, currentRate);
        _takeBurnFee(sender,tAmount, currentRate);
        _reflectFee(tAmount);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    // if receiver is excluded from reward
    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        _checkMaxWalletAmount(recipient, tTransferAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        excludedTSupply = excludedTSupply.add(tAmount);
        _takeAllFee(sender,tAmount, currentRate);
        _takeBurnFee(sender,tAmount, currentRate);
        _reflectFee(tAmount);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    // for automatic redistribution among all holders on each tx
    function _reflectFee(uint256 tAmount) private {
        uint256 tFee = tAmount.mul(_currentReflectionFee).div(1e3);
        uint256 rFee = tFee.mul(_getRate());
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

     // take fees for liquidity, market/dev
    function _takeAllFee(address sender,uint256 tAmount, uint256 currentRate) internal {
        uint256 tFee = tAmount
            .mul(_currentLiquidityFee.add(_currentmarketWalletFee))
            .div(1e3);

        if (tFee > 0) {
            _accumulatedLiquidity = _accumulatedLiquidity.add(
                tAmount.mul(_currentLiquidityFee).div(1e3)
            );
            _accumulatedMarketWallet = _accumulatedMarketWallet.add(
                tAmount.mul(_currentmarketWalletFee).div(1e3)
            );

            uint256 rFee = tFee.mul(currentRate);
            if (_isExcludedFromReward[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)].add(tFee);
            else _rOwned[address(this)] = _rOwned[address(this)].add(rFee);

            emit Transfer(sender, address(this), tFee);
        }
    }
   function _takeBurnFee(address sender,uint256 tAmount, uint256 currentRate) internal {
        uint256 burnFee = tAmount.mul(_currentBurnFee).div(1e3);
        uint256 rBurnFee = burnFee.mul(currentRate);
        _rOwned[burnAddress] = _rOwned[burnAddress].add(rBurnFee);

        emit Transfer(sender, burnAddress, burnFee);
    }

    
    function swapAndLiquify(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 &&
            swapAndLiquifyEnabled &&
            !(from == address(this) && to == address(dexPair)) // swap 1 time
        ) {
            // approve contract
            _approve(address(this), address(dexRouter), contractTokenBalance);

            uint256 halfLiquid = _accumulatedLiquidity.div(2);
            uint256 otherHalfLiquid = _accumulatedLiquidity.sub(halfLiquid);

            uint256 tokenAmountToBeSwapped = contractTokenBalance.sub(
                otherHalfLiquid
            );

            // now is to lock into liquidty pool
            Utils.swapTokensForEth(address(dexRouter), tokenAmountToBeSwapped);

            uint256 deltaBalance = address(this).balance;
            uint256 bnbToBeAddedToLiquidity = deltaBalance.mul(halfLiquid).div(tokenAmountToBeSwapped);
            uint256 bnbFormarketWallet = deltaBalance.sub(bnbToBeAddedToLiquidity);  

            // sending bnb to award pool wallet
            if(bnbFormarketWallet > 0)
                marketWallet.transfer(bnbFormarketWallet); 

            // add liquidity to Dex
            if(bnbToBeAddedToLiquidity > 0){
                Utils.addLiquidity(
                    address(dexRouter),
                    owner(),
                    otherHalfLiquid,
                    bnbToBeAddedToLiquidity
                );

                emit SwapAndLiquify(
                    halfLiquid,
                    bnbToBeAddedToLiquidity,
                    otherHalfLiquid
                );
            }

            // Reset current accumulated amount
            _accumulatedLiquidity = 0; 
            _accumulatedMarketWallet = 0;
        }
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_marketWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AntiBotStopEnableUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Fees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addSniperInList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotStopEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"enableOrDisableFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"enableOrDisableSwapAndLiquify","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":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeOrExcludeFromMaxHoldLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeOrExcludeFromMaxTxnLimit","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":"_account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isExcludedFromMaxHoldLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isExcludedFromMaxTxnLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaxHoldLimitValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","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":"marketWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketWalletFeeOnBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketWalletFeeOnSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyLimit","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":"reflectionFeeOnBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeOnSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeSniperFromList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"removeStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setAntiBotStopEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_redistributionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketWalletFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxHoldingAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMinBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMinTokenToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_redistributionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketWalletFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newAddress","type":"address"}],"name":"setmarketWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHolderDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"}]

6080604052670de0b6b3a764000060095560095460001962000022919062000a7e565b60001962000031919062000ae5565b600a556040518060400160405280600481526020017f5269737500000000000000000000000000000000000000000000000000000000815250600c90805190602001906200008192919062000995565b506040518060400160405280600481526020017f5249535500000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000cf92919062000995565b506009600e60006101000a81548160ff021916908360ff16021790555061dead601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066038d7ea4c6800060125566470de4df82000060135566470de4df8200006014556001601760006101000a81548160ff0219169083151502179055506001601760016101000a81548160ff0219169083151502179055506000601760026101000a81548160ff0219169083151502179055506001601760036101000a81548160ff021916908315150217905550600a601855600a6019556032601a55600f601b55600a601c55600a601d556032601e55600f601f55348015620001f157600080fd5b5060405162006c4a38038062006c4a833981810160405281019062000217919062000b8a565b620002376200022b620008a060201b60201c565b620008a860201b60201c565b600a54600160006200024e6200096c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000358919062000c01565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e6919062000c01565b6040518363ffffffff1660e01b81526004016200040592919062000c44565b6020604051808303816000875af115801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000c01565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620004e26200096c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620005a16200096c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620007546200096c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200082f6200096c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60095460405162000890919062000c82565b60405180910390a3505062000d04565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620009a39062000cce565b90600052602060002090601f016020900481019282620009c7576000855562000a13565b82601f10620009e257805160ff191683800117855562000a13565b8280016001018555821562000a13579182015b8281111562000a12578251825591602001919060010190620009f5565b5b50905062000a22919062000a26565b5090565b5b8082111562000a4157600081600090555060010162000a27565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a8b8262000a45565b915062000a988362000a45565b92508262000aab5762000aaa62000a4f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000af28262000a45565b915062000aff8362000a45565b92508282101562000b155762000b1462000ab6565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b528262000b25565b9050919050565b62000b648162000b45565b811462000b7057600080fd5b50565b60008151905062000b848162000b59565b92915050565b60006020828403121562000ba35762000ba262000b20565b5b600062000bb38482850162000b73565b91505092915050565b600062000bc98262000b25565b9050919050565b62000bdb8162000bbc565b811462000be757600080fd5b50565b60008151905062000bfb8162000bd0565b92915050565b60006020828403121562000c1a5762000c1962000b20565b5b600062000c2a8482850162000bea565b91505092915050565b62000c3e8162000bbc565b82525050565b600060408201905062000c5b600083018562000c33565b62000c6a602083018462000c33565b9392505050565b62000c7c8162000a45565b82525050565b600060208201905062000c99600083018462000c71565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ce757607f821691505b6020821081141562000cfe5762000cfd62000c9f565b5b50919050565b615f368062000d146000396000f3fe6080604052600436106103785760003560e01c8063775a1f6c116101d1578063b81df74211610102578063dd7bd775116100a0578063f097ea1a1161006f578063f097ea1a14610d35578063f242ab4114610d5e578063f2fde38b14610d89578063fe1a711114610db25761037f565b8063dd7bd77514610c8d578063e4440a8614610cb6578063e6c84dc614610ce1578063ea5b9e8514610d0c5761037f565b8063cb5c474c116100dc578063cb5c474c14610bd1578063ce261d1014610bfc578063dd07382914610c25578063dd62ed3e14610c505761037f565b8063b81df74214610b54578063bded89fb14610b7f578063c624b42314610ba85761037f565b806399b770321161016f578063a457c2d711610149578063a457c2d714610a88578063a9059cbb14610ac5578063afee32a914610b02578063b0bc2a2d14610b2b5761037f565b806399b7703214610a0b5780639d3feb9a14610a345780639d854b6314610a5f5761037f565b806389f9a1d3116101ab57806389f9a1d31461095f5780638da5cb5b1461098a5780639285c1ca146109b557806395d89b41146109e05761037f565b8063775a1f6c146108ce57806388f82020146108f957806389f5649e146109365761037f565b806339509351116102ab5780635342acb41161024957806370a082311161022357806370a082311461081257806370d5ae051461084f578063715018a61461087a5780637584817c146108915761037f565b80635342acb4146107815780635e9416fc146107be5780636d268267146107e75761037f565b80634549b039116102855780634549b039146106c55780634a74bb021461070257806350a64fcd1461072d5780635249a820146107585761037f565b806339509351146106345780633aaa36e6146106715780633bd5d1731461069c5761037f565b806318160ddd116103185780632d838119116102f25780632d83811914610578578063313ce567146105b55780633326d7f2146105e057806338d6f8471461060b5761037f565b806318160ddd146104e55780631884f1e61461051057806323b872dd1461053b5761037f565b80630758d924116103545780630758d92414610417578063095ea7b3146104425780630f3a325f1461047f578063172fdc23146104bc5761037f565b8062281dc1146103845780629cb0e9146103af57806306fdde03146103ec5761037f565b3661037f57005b600080fd5b34801561039057600080fd5b50610399610ddd565b6040516103a69190614a17565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190614a95565b610de3565b6040516103e39190614add565b60405180910390f35b3480156103f857600080fd5b50610401610e39565b60405161040e9190614b91565b60405180910390f35b34801561042357600080fd5b5061042c610ecb565b6040516104399190614c12565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190614c59565b610ef1565b6040516104769190614add565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190614a95565b610f0f565b6040516104b39190614add565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de9190614cc5565b610f2f565b005b3480156104f157600080fd5b506104fa610fff565b6040516105079190614a17565b60405180910390f35b34801561051c57600080fd5b50610525611009565b6040516105329190614a17565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190614cf2565b61100f565b60405161056f9190614add565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190614d45565b611252565b6040516105ac9190614a17565b60405180910390f35b3480156105c157600080fd5b506105ca6112c0565b6040516105d79190614d8e565b60405180910390f35b3480156105ec57600080fd5b506105f56112d7565b6040516106029190614a17565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190614a95565b6112dd565b005b34801561064057600080fd5b5061065b60048036038101906106569190614c59565b6114d2565b6040516106689190614add565b60405180910390f35b34801561067d57600080fd5b50610686611585565b6040516106939190614add565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190614d45565b611598565b005b3480156106d157600080fd5b506106ec60048036038101906106e79190614da9565b61171f565b6040516106f99190614a17565b60405180910390f35b34801561070e57600080fd5b506107176117f4565b6040516107249190614add565b60405180910390f35b34801561073957600080fd5b50610742611807565b60405161074f9190614a17565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614e27565b611811565b005b34801561078d57600080fd5b506107a860048036038101906107a39190614a95565b6118d1565b6040516107b59190614add565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190614e54565b611927565b005b3480156107f357600080fd5b506107fc6119fe565b6040516108099190614a17565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190614a95565b611a04565b6040516108469190614a17565b60405180910390f35b34801561085b57600080fd5b50610864611aef565b6040516108719190614ea3565b60405180910390f35b34801561088657600080fd5b5061088f611b15565b005b34801561089d57600080fd5b506108b860048036038101906108b39190614a95565b611b9d565b6040516108c59190614add565b60405180910390f35b3480156108da57600080fd5b506108e3611bf3565b6040516108f09190614a17565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b9190614a95565b611bf9565b60405161092d9190614add565b60405180910390f35b34801561094257600080fd5b5061095d60048036038101906109589190614e54565b611c4f565b005b34801561096b57600080fd5b50610974611d26565b6040516109819190614a17565b60405180910390f35b34801561099657600080fd5b5061099f611d2c565b6040516109ac9190614ea3565b60405180910390f35b3480156109c157600080fd5b506109ca611d55565b6040516109d79190614add565b60405180910390f35b3480156109ec57600080fd5b506109f5611d68565b604051610a029190614b91565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190614d45565b611dfa565b005b348015610a4057600080fd5b50610a49611e80565b604051610a569190614a17565b60405180910390f35b348015610a6b57600080fd5b50610a866004803603810190610a819190614ebe565b611e86565b005b348015610a9457600080fd5b50610aaf6004803603810190610aaa9190614c59565b611f24565b604051610abc9190614add565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae79190614c59565b611ff1565b604051610af99190614add565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190614ebe565b61200f565b005b348015610b3757600080fd5b50610b526004803603810190610b4d9190614cc5565b6120ad565b005b348015610b6057600080fd5b50610b69612146565b604051610b769190614a17565b60405180910390f35b348015610b8b57600080fd5b50610ba66004803603810190610ba19190614d45565b61214c565b005b348015610bb457600080fd5b50610bcf6004803603810190610bca9190614cc5565b6121d2565b005b348015610bdd57600080fd5b50610be66122a2565b604051610bf39190614a17565b60405180910390f35b348015610c0857600080fd5b50610c236004803603810190610c1e9190614c59565b6122a8565b005b348015610c3157600080fd5b50610c3a6123ae565b604051610c479190614a17565b60405180910390f35b348015610c5c57600080fd5b50610c776004803603810190610c729190614f25565b6123b4565b604051610c849190614a17565b60405180910390f35b348015610c9957600080fd5b50610cb46004803603810190610caf9190614a95565b61243b565b005b348015610cc257600080fd5b50610ccb61259e565b604051610cd89190614f74565b60405180910390f35b348015610ced57600080fd5b50610cf66125c4565b604051610d039190614a17565b60405180910390f35b348015610d1857600080fd5b50610d336004803603810190610d2e9190614e54565b6125ca565b005b348015610d4157600080fd5b50610d5c6004803603810190610d579190614d45565b6126a1565b005b348015610d6a57600080fd5b50610d73612727565b604051610d809190614ea3565b60405180910390f35b348015610d9557600080fd5b50610db06004803603810190610dab9190614a95565b61274d565b005b348015610dbe57600080fd5b50610dc7612845565b604051610dd49190614add565b60405180910390f35b601c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600c8054610e4890614fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7490614fbe565b8015610ec15780601f10610e9657610100808354040283529160200191610ec1565b820191906000526020600020905b815481529060010190602001808311610ea457829003601f168201915b5050505050905090565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f05610efe612858565b8484612860565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b610f37612858565b73ffffffffffffffffffffffffffffffffffffffff16610f55611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa29061503c565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051610ff49190614add565b60405180910390a150565b6000600954905090565b60125481565b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561109e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611095906150a8565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906150a8565b60405180910390fd5b601760029054906101000a900460ff161561117b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111729061513a565b60405180910390fd5b611186848484612a2b565b61124784611192612858565b61124285604051806060016040528060288152602001615ed960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111f8612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c339092919063ffffffff16565b612860565b600190509392505050565b6000600a54821115611299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611290906151cc565b60405180910390fd5b60006112a3612c97565b90506112b88184612cc290919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b60195481565b6112e5612858565b73ffffffffffffffffffffffffffffffffffffffff16611303611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113509061503c565b60405180910390fd5b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190615238565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906152a4565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061157b6114df612858565b8461157685600360006114f0612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b612860565b6001905092915050565b601760019054906101000a900460ff1681565b60006115a2612858565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890615336565b60405180910390fd5b600061164d61163e612c97565b84612d6a90919063ffffffff16565b90506116a181600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116f981600a54612de590919063ffffffff16565b600a8190555061171483600b54612d0c90919063ffffffff16565b600b81905550505050565b6000600954831115611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d906153c8565b60405180910390fd5b81611792576000611787611778612c97565b85612d6a90919063ffffffff16565b9050809150506117ee565b60006117ae61179f612c97565b85612d6a90919063ffffffff16565b905060006117e66117d76117c0612c97565b6117c988612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b905080925050505b92915050565b601760009054906101000a900460ff1681565b6000600b54905090565b611819612858565b73ffffffffffffffffffffffffffffffffffffffff16611837611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461188d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118849061503c565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61192f612858565b73ffffffffffffffffffffffffffffffffffffffff1661194d611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a9061503c565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a9f57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611aea565b611ae7600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611252565b90505b919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b1d612858565b73ffffffffffffffffffffffffffffffffffffffff16611b3b611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b889061503c565b60405180910390fd5b611b9b6000612ea2565b565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601e5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611c57612858565b73ffffffffffffffffffffffffffffffffffffffff16611c75611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061503c565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601760029054906101000a900460ff1681565b6060600d8054611d7790614fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611da390614fbe565b8015611df05780601f10611dc557610100808354040283529160200191611df0565b820191906000526020600020905b815481529060010190602001808311611dd357829003601f168201915b5050505050905090565b611e02612858565b73ffffffffffffffffffffffffffffffffffffffff16611e20611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d9061503c565b60405180910390fd5b8060148190555050565b601f5481565b611e8e612858565b73ffffffffffffffffffffffffffffffffffffffff16611eac611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef99061503c565b60405180910390fd5b83601c8190555082601d8190555081601e8190555080601f8190555050505050565b6000611fe7611f31612858565b84611fe285604051806060016040528060258152602001615eb46025913960036000611f5b612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c339092919063ffffffff16565b612860565b6001905092915050565b6000612005611ffe612858565b8484612a2b565b6001905092915050565b612017612858565b73ffffffffffffffffffffffffffffffffffffffff16612035611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461208b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120829061503c565b60405180910390fd5b836018819055508260198190555081601a8190555080601b8190555050505050565b6120b5612858565b73ffffffffffffffffffffffffffffffffffffffff166120d3611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061503c565b60405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b60145481565b612154612858565b73ffffffffffffffffffffffffffffffffffffffff16612172611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf9061503c565b60405180910390fd5b8060138190555050565b6121da612858565b73ffffffffffffffffffffffffffffffffffffffff166121f8611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461224e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122459061503c565b60405180910390fd5b80601760026101000a81548160ff0219169083151502179055507f4de571fd3e7dc38a16cdbb0d7ff4c4d80a6d06fbd12339f1fa56851761c46964816040516122979190614add565b60405180910390a150565b601a5481565b6122b0612858565b73ffffffffffffffffffffffffffffffffffffffff166122ce611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b9061503c565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612348611d2c565b836040518363ffffffff1660e01b81526004016123669291906153e8565b6020604051808303816000875af1158015612385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a99190615426565b505050565b60185481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612443612858565b73ffffffffffffffffffffffffffffffffffffffff16612461611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146124b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ae9061503c565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a9061549f565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6125d2612858565b73ffffffffffffffffffffffffffffffffffffffff166125f0611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d9061503c565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6126a9612858565b73ffffffffffffffffffffffffffffffffffffffff166126c7611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461271d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127149061503c565b60405180910390fd5b8060128190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612755612858565b73ffffffffffffffffffffffffffffffffffffffff16612773611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c09061503c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090615531565b60405180910390fd5b61284281612ea2565b50565b601760039054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c7906155c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293790615655565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a1e9190614a17565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a92906156e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290615779565b60405180910390fd5b60008111612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b459061580b565b60405180910390fd5b612b588383612f66565b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bff5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612c175750601760019054906101000a900460ff16155b15612c2157600090505b612c2d84848484613278565b50505050565b6000838311158290612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c729190614b91565b60405180910390fd5b5060008385612c8a919061585a565b9050809150509392505050565b6000806000612ca4613796565b91509150612cbb8183612cc290919063ffffffff16565b9250505090565b6000612d0483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613811565b905092915050565b6000808284612d1b919061588e565b905083811015612d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5790615930565b60405180910390fd5b8091505092915050565b600080831415612d7d5760009050612ddf565b60008284612d8b9190615950565b9050828482612d9a91906159d9565b14612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd190615a7c565b60405180910390fd5b809150505b92915050565b6000612e2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c33565b905092915050565b600080612e976103e8612e89612e7a612e55602354602254612d0c90919063ffffffff16565b612e6c602154602054612d0c90919063ffffffff16565b612d0c90919063ffffffff16565b86612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f7130611a04565b905060006012548210159050808015612fd85750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612ff05750601760009054906101000a900460ff165b801561308157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561307f5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b155b15613272576130b330600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612860565b60006130cb6002602454612cc290919063ffffffff16565b905060006130e482602454612de590919063ffffffff16565b905060006130fb8286612de590919063ffffffff16565b9050613129600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613874565b60004790506000613155836131478785612d6a90919063ffffffff16565b612cc290919063ffffffff16565b9050600061316c8284612de590919063ffffffff16565b905060008111156131e157601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156131df573d6000803e3d6000fd5b505b600082111561325b5761321f600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613218611d2c565b8785613a5a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186838760405161325293929190615a9c565b60405180910390a15b600060248190555060006025819055505050505050505b50505050565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fc906150a8565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613389906150a8565b60405180910390fd5b601760029054906101000a900460ff16156133e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d99061513a565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661347957601454821115613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f90615b45565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156134d35750805b156134e5576134e0613afe565b61355b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561353f5750805b156135515761354c613b24565b61355a565b613559613b4a565b5b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135fe5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136135761360e848484613b6c565b613790565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136b65750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136cb576136c6848484613dbb565b61378f565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561376d5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137825761377d848484613fd8565b61378e565b61378d8484846141f8565b5b5b5b50505050565b6000806000600a549050600060095490506137bc60165483612de590919063ffffffff16565b91506137d360155482612de590919063ffffffff16565b90506137ec600954600a54612cc290919063ffffffff16565b82101561380457600a5460095493509350505061380d565b81819350935050505b9091565b60008083118290613858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384f9190614b91565b60405180910390fd5b506000838561386791906159d9565b9050809150509392505050565b60008290506000600267ffffffffffffffff81111561389657613895615b65565b5b6040519080825280602002602001820160405280156138c45781602001602082028036833780820191505090505b50905030816000815181106138dc576138db615b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139859190615bd8565b8160018151811061399957613998615b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663791ac947846000843061012c42613a02919061588e565b6040518663ffffffff1660e01b8152600401613a22959493929190615cfe565b600060405180830381600087803b158015613a3c57600080fd5b505af1158015613a50573d6000803e3d6000fd5b5050505050505050565b60008490508073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330866000808a61012c42613a90919061588e565b6040518863ffffffff1660e01b8152600401613ab196959493929190615d58565b60606040518083038185885af1158015613acf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613af49190615dce565b5050505050505050565b601854602081905550601954602181905550601a54602281905550601b54602381905550565b601c54602081905550601d54602181905550601e54602281905550601f54602381905550565b6000602081905550600060218190555060006022819055506000602381905550565b6000613b76612c97565b90506000613b95613b8684612e2f565b84612de590919063ffffffff16565b90506000613bac8385612d6a90919063ffffffff16565b90506000613bdd613bce85613bc088612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b9050613be9868461442c565b613c3b85600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9385601554612de590919063ffffffff16565b601581905550613ceb81600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d398786866144f7565b613d448786866147cd565b613d4d85614978565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613daa9190614a17565b60405180910390a350505050505050565b6000613dc5612c97565b90506000613de4613dd584612e2f565b84612de590919063ffffffff16565b90506000613dfb8385612d6a90919063ffffffff16565b9050613e07858361442c565b613e5981600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eee82600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4684601554612d0c90919063ffffffff16565b601581905550613f578685856144f7565b613f628685856147cd565b613f6b84614978565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613fc89190614a17565b60405180910390a3505050505050565b6000613fe2612c97565b90506000614001613ff284612e2f565b84612de590919063ffffffff16565b905061400d848261442c565b61405f83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b783601554612de590919063ffffffff16565b60158190555061410f81600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416783601554612d0c90919063ffffffff16565b6015819055506141788584846144f7565b6141838584846147cd565b61418c83614978565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516141e99190614a17565b60405180910390a35050505050565b6000614202612c97565b9050600061422161421284612e2f565b84612de590919063ffffffff16565b905060006142388385612d6a90919063ffffffff16565b9050600061426961425a8561424c88612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b9050614275868461442c565b6142c782600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435c81600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143aa8786866144f7565b6143b58786866147cd565b6143be85614978565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161441b9190614a17565b60405180910390a350505050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166144f357601760039054906101000a900460ff16156144f2576013546144b0826144a285611a04565b612d0c90919063ffffffff16565b11156144f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144e890615e93565b60405180910390fd5b5b5b5050565b60006145366103e8614528614519602254602154612d0c90919063ffffffff16565b86612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905060008111156147c75761457e61456d6103e861455f60215487612d6a90919063ffffffff16565b612cc290919063ffffffff16565b602454612d0c90919063ffffffff16565b6024819055506145c16145b06103e86145a260225487612d6a90919063ffffffff16565b612cc290919063ffffffff16565b602554612d0c90919063ffffffff16565b60258190555060006145dc8383612d6a90919063ffffffff16565b9050600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146ca5761468282600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614760565b61471c81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516147bd9190614a17565b60405180910390a3505b50505050565b60006147f86103e86147ea60235486612d6a90919063ffffffff16565b612cc290919063ffffffff16565b9050600061480f8383612d6a90919063ffffffff16565b90506148858160016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b60016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516149699190614a17565b60405180910390a35050505050565b60006149a36103e861499560205485612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905060006149c16149b2612c97565b83612d6a90919063ffffffff16565b90506149d881600a54612de590919063ffffffff16565b600a819055506149f382600b54612d0c90919063ffffffff16565b600b81905550505050565b6000819050919050565b614a11816149fe565b82525050565b6000602082019050614a2c6000830184614a08565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a6282614a37565b9050919050565b614a7281614a57565b8114614a7d57600080fd5b50565b600081359050614a8f81614a69565b92915050565b600060208284031215614aab57614aaa614a32565b5b6000614ab984828501614a80565b91505092915050565b60008115159050919050565b614ad781614ac2565b82525050565b6000602082019050614af26000830184614ace565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614b32578082015181840152602081019050614b17565b83811115614b41576000848401525b50505050565b6000601f19601f8301169050919050565b6000614b6382614af8565b614b6d8185614b03565b9350614b7d818560208601614b14565b614b8681614b47565b840191505092915050565b60006020820190508181036000830152614bab8184614b58565b905092915050565b6000819050919050565b6000614bd8614bd3614bce84614a37565b614bb3565b614a37565b9050919050565b6000614bea82614bbd565b9050919050565b6000614bfc82614bdf565b9050919050565b614c0c81614bf1565b82525050565b6000602082019050614c276000830184614c03565b92915050565b614c36816149fe565b8114614c4157600080fd5b50565b600081359050614c5381614c2d565b92915050565b60008060408385031215614c7057614c6f614a32565b5b6000614c7e85828601614a80565b9250506020614c8f85828601614c44565b9150509250929050565b614ca281614ac2565b8114614cad57600080fd5b50565b600081359050614cbf81614c99565b92915050565b600060208284031215614cdb57614cda614a32565b5b6000614ce984828501614cb0565b91505092915050565b600080600060608486031215614d0b57614d0a614a32565b5b6000614d1986828701614a80565b9350506020614d2a86828701614a80565b9250506040614d3b86828701614c44565b9150509250925092565b600060208284031215614d5b57614d5a614a32565b5b6000614d6984828501614c44565b91505092915050565b600060ff82169050919050565b614d8881614d72565b82525050565b6000602082019050614da36000830184614d7f565b92915050565b60008060408385031215614dc057614dbf614a32565b5b6000614dce85828601614c44565b9250506020614ddf85828601614cb0565b9150509250929050565b6000614df482614a37565b9050919050565b614e0481614de9565b8114614e0f57600080fd5b50565b600081359050614e2181614dfb565b92915050565b600060208284031215614e3d57614e3c614a32565b5b6000614e4b84828501614e12565b91505092915050565b60008060408385031215614e6b57614e6a614a32565b5b6000614e7985828601614a80565b9250506020614e8a85828601614cb0565b9150509250929050565b614e9d81614a57565b82525050565b6000602082019050614eb86000830184614e94565b92915050565b60008060008060808587031215614ed857614ed7614a32565b5b6000614ee687828801614c44565b9450506020614ef787828801614c44565b9350506040614f0887828801614c44565b9250506060614f1987828801614c44565b91505092959194509250565b60008060408385031215614f3c57614f3b614a32565b5b6000614f4a85828601614a80565b9250506020614f5b85828601614a80565b9150509250929050565b614f6e81614de9565b82525050565b6000602082019050614f896000830184614f65565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614fd657607f821691505b60208210811415614fea57614fe9614f8f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615026602083614b03565b915061503182614ff0565b602082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000615092600f83614b03565b915061509d8261505c565b602082019050919050565b600060208201905081810360008301526150c181615085565b9050919050565b7f54726164696e67207368696674656420666f7220626f742064656c6574696f6e60008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000615124602183614b03565b915061512f826150c8565b604082019050919050565b6000602082019050818103600083015261515381615117565b9050919050565b7f546f6b656e3a20416d6f756e74206d757374206265206c657373207468616e2060008201527f746f74616c207265666c656374696f6e73000000000000000000000000000000602082015250565b60006151b6603183614b03565b91506151c18261515a565b604082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b7f57652063616e206e6f7420626c61636b6c69737420726f757465720000000000600082015250565b6000615222601b83614b03565b915061522d826151ec565b602082019050919050565b6000602082019050818103600083015261525181615215565b9050919050565b7f536e6970657220616c7265616479206578697374000000000000000000000000600082015250565b600061528e601483614b03565b915061529982615258565b602082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f546f6b656e3a204578636c75646564206164647265737365732063616e6e6f7460008201527f2063616c6c20746869732066756e6374696f6e00000000000000000000000000602082015250565b6000615320603383614b03565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b7f42455032303a20416d6f756e74206d757374206265206c657373207468616e2060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b60006153b2602683614b03565b91506153bd82615356565b604082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b60006040820190506153fd6000830185614e94565b61540a6020830184614a08565b9392505050565b60008151905061542081614c99565b92915050565b60006020828403121561543c5761543b614a32565b5b600061544a84828501615411565b91505092915050565b7f4e6f74206120736e697065720000000000000000000000000000000000000000600082015250565b6000615489600c83614b03565b915061549482615453565b602082019050919050565b600060208201905081810360008301526154b88161547c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061551b602683614b03565b9150615526826154bf565b604082019050919050565b6000602082019050818103600083015261554a8161550e565b9050919050565b7f546f6b656e3a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155ad602483614b03565b91506155b882615551565b604082019050919050565b600060208201905081810360008301526155dc816155a0565b9050919050565b7f546f6b656e3a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061563f602283614b03565b915061564a826155e3565b604082019050919050565b6000602082019050818103600083015261566e81615632565b9050919050565b7f546f6b656e3a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156d1602583614b03565b91506156dc82615675565b604082019050919050565b60006020820190508181036000830152615700816156c4565b9050919050565b7f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615763602383614b03565b915061576e82615707565b604082019050919050565b6000602082019050818103600083015261579281615756565b9050919050565b7f546f6b656e3a207472616e7366657220616d6f756e74206d757374206265206760008201527f726561746572207468616e207a65726f00000000000000000000000000000000602082015250565b60006157f5603083614b03565b915061580082615799565b604082019050919050565b60006020820190508181036000830152615824816157e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615865826149fe565b9150615870836149fe565b9250828210156158835761588261582b565b5b828203905092915050565b6000615899826149fe565b91506158a4836149fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156158d9576158d861582b565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061591a601b83614b03565b9150615925826158e4565b602082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b826149fe565b9150615966836149fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561599f5761599e61582b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159e4826149fe565b91506159ef836149fe565b9250826159ff576159fe6159aa565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a66602183614b03565b9150615a7182615a0a565b604082019050919050565b60006020820190508181036000830152615a9581615a59565b9050919050565b6000606082019050615ab16000830186614a08565b615abe6020830185614a08565b615acb6040830184614a08565b949350505050565b7f416d6f756e74206d7573742062652067726561746572207468616e206d696e6960008201527f6d756d20627579204c696d697400000000000000000000000000000000000000602082015250565b6000615b2f602d83614b03565b9150615b3a82615ad3565b604082019050919050565b60006020820190508181036000830152615b5e81615b22565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615bd281614a69565b92915050565b600060208284031215615bee57615bed614a32565b5b6000615bfc84828501615bc3565b91505092915050565b6000819050919050565b6000615c2a615c25615c2084615c05565b614bb3565b6149fe565b9050919050565b615c3a81615c0f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c7581614a57565b82525050565b6000615c878383615c6c565b60208301905092915050565b6000602082019050919050565b6000615cab82615c40565b615cb58185615c4b565b9350615cc083615c5c565b8060005b83811015615cf1578151615cd88882615c7b565b9750615ce383615c93565b925050600181019050615cc4565b5085935050505092915050565b600060a082019050615d136000830188614a08565b615d206020830187615c31565b8181036040830152615d328186615ca0565b9050615d416060830185614e94565b615d4e6080830184614a08565b9695505050505050565b600060c082019050615d6d6000830189614e94565b615d7a6020830188614a08565b615d876040830187615c31565b615d946060830186615c31565b615da16080830185614e94565b615dae60a0830184614a08565b979650505050505050565b600081519050615dc881614c2d565b92915050565b600080600060608486031215615de757615de6614a32565b5b6000615df586828701615db9565b9350506020615e0686828701615db9565b9250506040615e1786828701615db9565b9150509250925092565b7f42455032303a20616d6f756e7420657863656564206d617820686f6c64696e6760008201527f206c696d69740000000000000000000000000000000000000000000000000000602082015250565b6000615e7d602683614b03565b9150615e8882615e21565b604082019050919050565b60006020820190508181036000830152615eac81615e70565b905091905056fe546f6b656e3a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f546f6b656e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122017f40c165c8fc688a04fa84fc60de8ffe0636d28e67373a1c594c845509c37dd64736f6c634300080a00330000000000000000000000003cfd00e0a60722c8561cb8148e557adca7f37d28

Deployed Bytecode

0x6080604052600436106103785760003560e01c8063775a1f6c116101d1578063b81df74211610102578063dd7bd775116100a0578063f097ea1a1161006f578063f097ea1a14610d35578063f242ab4114610d5e578063f2fde38b14610d89578063fe1a711114610db25761037f565b8063dd7bd77514610c8d578063e4440a8614610cb6578063e6c84dc614610ce1578063ea5b9e8514610d0c5761037f565b8063cb5c474c116100dc578063cb5c474c14610bd1578063ce261d1014610bfc578063dd07382914610c25578063dd62ed3e14610c505761037f565b8063b81df74214610b54578063bded89fb14610b7f578063c624b42314610ba85761037f565b806399b770321161016f578063a457c2d711610149578063a457c2d714610a88578063a9059cbb14610ac5578063afee32a914610b02578063b0bc2a2d14610b2b5761037f565b806399b7703214610a0b5780639d3feb9a14610a345780639d854b6314610a5f5761037f565b806389f9a1d3116101ab57806389f9a1d31461095f5780638da5cb5b1461098a5780639285c1ca146109b557806395d89b41146109e05761037f565b8063775a1f6c146108ce57806388f82020146108f957806389f5649e146109365761037f565b806339509351116102ab5780635342acb41161024957806370a082311161022357806370a082311461081257806370d5ae051461084f578063715018a61461087a5780637584817c146108915761037f565b80635342acb4146107815780635e9416fc146107be5780636d268267146107e75761037f565b80634549b039116102855780634549b039146106c55780634a74bb021461070257806350a64fcd1461072d5780635249a820146107585761037f565b806339509351146106345780633aaa36e6146106715780633bd5d1731461069c5761037f565b806318160ddd116103185780632d838119116102f25780632d83811914610578578063313ce567146105b55780633326d7f2146105e057806338d6f8471461060b5761037f565b806318160ddd146104e55780631884f1e61461051057806323b872dd1461053b5761037f565b80630758d924116103545780630758d92414610417578063095ea7b3146104425780630f3a325f1461047f578063172fdc23146104bc5761037f565b8062281dc1146103845780629cb0e9146103af57806306fdde03146103ec5761037f565b3661037f57005b600080fd5b34801561039057600080fd5b50610399610ddd565b6040516103a69190614a17565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190614a95565b610de3565b6040516103e39190614add565b60405180910390f35b3480156103f857600080fd5b50610401610e39565b60405161040e9190614b91565b60405180910390f35b34801561042357600080fd5b5061042c610ecb565b6040516104399190614c12565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190614c59565b610ef1565b6040516104769190614add565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190614a95565b610f0f565b6040516104b39190614add565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de9190614cc5565b610f2f565b005b3480156104f157600080fd5b506104fa610fff565b6040516105079190614a17565b60405180910390f35b34801561051c57600080fd5b50610525611009565b6040516105329190614a17565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190614cf2565b61100f565b60405161056f9190614add565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190614d45565b611252565b6040516105ac9190614a17565b60405180910390f35b3480156105c157600080fd5b506105ca6112c0565b6040516105d79190614d8e565b60405180910390f35b3480156105ec57600080fd5b506105f56112d7565b6040516106029190614a17565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190614a95565b6112dd565b005b34801561064057600080fd5b5061065b60048036038101906106569190614c59565b6114d2565b6040516106689190614add565b60405180910390f35b34801561067d57600080fd5b50610686611585565b6040516106939190614add565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190614d45565b611598565b005b3480156106d157600080fd5b506106ec60048036038101906106e79190614da9565b61171f565b6040516106f99190614a17565b60405180910390f35b34801561070e57600080fd5b506107176117f4565b6040516107249190614add565b60405180910390f35b34801561073957600080fd5b50610742611807565b60405161074f9190614a17565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614e27565b611811565b005b34801561078d57600080fd5b506107a860048036038101906107a39190614a95565b6118d1565b6040516107b59190614add565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190614e54565b611927565b005b3480156107f357600080fd5b506107fc6119fe565b6040516108099190614a17565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190614a95565b611a04565b6040516108469190614a17565b60405180910390f35b34801561085b57600080fd5b50610864611aef565b6040516108719190614ea3565b60405180910390f35b34801561088657600080fd5b5061088f611b15565b005b34801561089d57600080fd5b506108b860048036038101906108b39190614a95565b611b9d565b6040516108c59190614add565b60405180910390f35b3480156108da57600080fd5b506108e3611bf3565b6040516108f09190614a17565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b9190614a95565b611bf9565b60405161092d9190614add565b60405180910390f35b34801561094257600080fd5b5061095d60048036038101906109589190614e54565b611c4f565b005b34801561096b57600080fd5b50610974611d26565b6040516109819190614a17565b60405180910390f35b34801561099657600080fd5b5061099f611d2c565b6040516109ac9190614ea3565b60405180910390f35b3480156109c157600080fd5b506109ca611d55565b6040516109d79190614add565b60405180910390f35b3480156109ec57600080fd5b506109f5611d68565b604051610a029190614b91565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190614d45565b611dfa565b005b348015610a4057600080fd5b50610a49611e80565b604051610a569190614a17565b60405180910390f35b348015610a6b57600080fd5b50610a866004803603810190610a819190614ebe565b611e86565b005b348015610a9457600080fd5b50610aaf6004803603810190610aaa9190614c59565b611f24565b604051610abc9190614add565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae79190614c59565b611ff1565b604051610af99190614add565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190614ebe565b61200f565b005b348015610b3757600080fd5b50610b526004803603810190610b4d9190614cc5565b6120ad565b005b348015610b6057600080fd5b50610b69612146565b604051610b769190614a17565b60405180910390f35b348015610b8b57600080fd5b50610ba66004803603810190610ba19190614d45565b61214c565b005b348015610bb457600080fd5b50610bcf6004803603810190610bca9190614cc5565b6121d2565b005b348015610bdd57600080fd5b50610be66122a2565b604051610bf39190614a17565b60405180910390f35b348015610c0857600080fd5b50610c236004803603810190610c1e9190614c59565b6122a8565b005b348015610c3157600080fd5b50610c3a6123ae565b604051610c479190614a17565b60405180910390f35b348015610c5c57600080fd5b50610c776004803603810190610c729190614f25565b6123b4565b604051610c849190614a17565b60405180910390f35b348015610c9957600080fd5b50610cb46004803603810190610caf9190614a95565b61243b565b005b348015610cc257600080fd5b50610ccb61259e565b604051610cd89190614f74565b60405180910390f35b348015610ced57600080fd5b50610cf66125c4565b604051610d039190614a17565b60405180910390f35b348015610d1857600080fd5b50610d336004803603810190610d2e9190614e54565b6125ca565b005b348015610d4157600080fd5b50610d5c6004803603810190610d579190614d45565b6126a1565b005b348015610d6a57600080fd5b50610d73612727565b604051610d809190614ea3565b60405180910390f35b348015610d9557600080fd5b50610db06004803603810190610dab9190614a95565b61274d565b005b348015610dbe57600080fd5b50610dc7612845565b604051610dd49190614add565b60405180910390f35b601c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600c8054610e4890614fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7490614fbe565b8015610ec15780601f10610e9657610100808354040283529160200191610ec1565b820191906000526020600020905b815481529060010190602001808311610ea457829003601f168201915b5050505050905090565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f05610efe612858565b8484612860565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b610f37612858565b73ffffffffffffffffffffffffffffffffffffffff16610f55611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa29061503c565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051610ff49190614add565b60405180910390a150565b6000600954905090565b60125481565b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561109e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611095906150a8565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906150a8565b60405180910390fd5b601760029054906101000a900460ff161561117b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111729061513a565b60405180910390fd5b611186848484612a2b565b61124784611192612858565b61124285604051806060016040528060288152602001615ed960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111f8612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c339092919063ffffffff16565b612860565b600190509392505050565b6000600a54821115611299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611290906151cc565b60405180910390fd5b60006112a3612c97565b90506112b88184612cc290919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b60195481565b6112e5612858565b73ffffffffffffffffffffffffffffffffffffffff16611303611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113509061503c565b60405180910390fd5b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190615238565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906152a4565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061157b6114df612858565b8461157685600360006114f0612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b612860565b6001905092915050565b601760019054906101000a900460ff1681565b60006115a2612858565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890615336565b60405180910390fd5b600061164d61163e612c97565b84612d6a90919063ffffffff16565b90506116a181600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116f981600a54612de590919063ffffffff16565b600a8190555061171483600b54612d0c90919063ffffffff16565b600b81905550505050565b6000600954831115611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d906153c8565b60405180910390fd5b81611792576000611787611778612c97565b85612d6a90919063ffffffff16565b9050809150506117ee565b60006117ae61179f612c97565b85612d6a90919063ffffffff16565b905060006117e66117d76117c0612c97565b6117c988612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b905080925050505b92915050565b601760009054906101000a900460ff1681565b6000600b54905090565b611819612858565b73ffffffffffffffffffffffffffffffffffffffff16611837611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461188d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118849061503c565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61192f612858565b73ffffffffffffffffffffffffffffffffffffffff1661194d611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a9061503c565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a9f57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611aea565b611ae7600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611252565b90505b919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b1d612858565b73ffffffffffffffffffffffffffffffffffffffff16611b3b611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b889061503c565b60405180910390fd5b611b9b6000612ea2565b565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601e5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611c57612858565b73ffffffffffffffffffffffffffffffffffffffff16611c75611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061503c565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601760029054906101000a900460ff1681565b6060600d8054611d7790614fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611da390614fbe565b8015611df05780601f10611dc557610100808354040283529160200191611df0565b820191906000526020600020905b815481529060010190602001808311611dd357829003601f168201915b5050505050905090565b611e02612858565b73ffffffffffffffffffffffffffffffffffffffff16611e20611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d9061503c565b60405180910390fd5b8060148190555050565b601f5481565b611e8e612858565b73ffffffffffffffffffffffffffffffffffffffff16611eac611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef99061503c565b60405180910390fd5b83601c8190555082601d8190555081601e8190555080601f8190555050505050565b6000611fe7611f31612858565b84611fe285604051806060016040528060258152602001615eb46025913960036000611f5b612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c339092919063ffffffff16565b612860565b6001905092915050565b6000612005611ffe612858565b8484612a2b565b6001905092915050565b612017612858565b73ffffffffffffffffffffffffffffffffffffffff16612035611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461208b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120829061503c565b60405180910390fd5b836018819055508260198190555081601a8190555080601b8190555050505050565b6120b5612858565b73ffffffffffffffffffffffffffffffffffffffff166120d3611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061503c565b60405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b60145481565b612154612858565b73ffffffffffffffffffffffffffffffffffffffff16612172611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf9061503c565b60405180910390fd5b8060138190555050565b6121da612858565b73ffffffffffffffffffffffffffffffffffffffff166121f8611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461224e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122459061503c565b60405180910390fd5b80601760026101000a81548160ff0219169083151502179055507f4de571fd3e7dc38a16cdbb0d7ff4c4d80a6d06fbd12339f1fa56851761c46964816040516122979190614add565b60405180910390a150565b601a5481565b6122b0612858565b73ffffffffffffffffffffffffffffffffffffffff166122ce611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b9061503c565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612348611d2c565b836040518363ffffffff1660e01b81526004016123669291906153e8565b6020604051808303816000875af1158015612385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a99190615426565b505050565b60185481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612443612858565b73ffffffffffffffffffffffffffffffffffffffff16612461611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146124b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ae9061503c565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a9061549f565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6125d2612858565b73ffffffffffffffffffffffffffffffffffffffff166125f0611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d9061503c565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6126a9612858565b73ffffffffffffffffffffffffffffffffffffffff166126c7611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461271d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127149061503c565b60405180910390fd5b8060128190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612755612858565b73ffffffffffffffffffffffffffffffffffffffff16612773611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c09061503c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090615531565b60405180910390fd5b61284281612ea2565b50565b601760039054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c7906155c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293790615655565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a1e9190614a17565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a92906156e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290615779565b60405180910390fd5b60008111612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b459061580b565b60405180910390fd5b612b588383612f66565b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bff5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612c175750601760019054906101000a900460ff16155b15612c2157600090505b612c2d84848484613278565b50505050565b6000838311158290612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c729190614b91565b60405180910390fd5b5060008385612c8a919061585a565b9050809150509392505050565b6000806000612ca4613796565b91509150612cbb8183612cc290919063ffffffff16565b9250505090565b6000612d0483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613811565b905092915050565b6000808284612d1b919061588e565b905083811015612d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5790615930565b60405180910390fd5b8091505092915050565b600080831415612d7d5760009050612ddf565b60008284612d8b9190615950565b9050828482612d9a91906159d9565b14612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd190615a7c565b60405180910390fd5b809150505b92915050565b6000612e2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c33565b905092915050565b600080612e976103e8612e89612e7a612e55602354602254612d0c90919063ffffffff16565b612e6c602154602054612d0c90919063ffffffff16565b612d0c90919063ffffffff16565b86612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f7130611a04565b905060006012548210159050808015612fd85750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612ff05750601760009054906101000a900460ff165b801561308157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561307f5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b155b15613272576130b330600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612860565b60006130cb6002602454612cc290919063ffffffff16565b905060006130e482602454612de590919063ffffffff16565b905060006130fb8286612de590919063ffffffff16565b9050613129600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613874565b60004790506000613155836131478785612d6a90919063ffffffff16565b612cc290919063ffffffff16565b9050600061316c8284612de590919063ffffffff16565b905060008111156131e157601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156131df573d6000803e3d6000fd5b505b600082111561325b5761321f600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613218611d2c565b8785613a5a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186838760405161325293929190615a9c565b60405180910390a15b600060248190555060006025819055505050505050505b50505050565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fc906150a8565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613389906150a8565b60405180910390fd5b601760029054906101000a900460ff16156133e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d99061513a565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661347957601454821115613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f90615b45565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156134d35750805b156134e5576134e0613afe565b61355b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561353f5750805b156135515761354c613b24565b61355a565b613559613b4a565b5b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135fe5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136135761360e848484613b6c565b613790565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136b65750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136cb576136c6848484613dbb565b61378f565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561376d5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137825761377d848484613fd8565b61378e565b61378d8484846141f8565b5b5b5b50505050565b6000806000600a549050600060095490506137bc60165483612de590919063ffffffff16565b91506137d360155482612de590919063ffffffff16565b90506137ec600954600a54612cc290919063ffffffff16565b82101561380457600a5460095493509350505061380d565b81819350935050505b9091565b60008083118290613858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384f9190614b91565b60405180910390fd5b506000838561386791906159d9565b9050809150509392505050565b60008290506000600267ffffffffffffffff81111561389657613895615b65565b5b6040519080825280602002602001820160405280156138c45781602001602082028036833780820191505090505b50905030816000815181106138dc576138db615b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139859190615bd8565b8160018151811061399957613998615b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663791ac947846000843061012c42613a02919061588e565b6040518663ffffffff1660e01b8152600401613a22959493929190615cfe565b600060405180830381600087803b158015613a3c57600080fd5b505af1158015613a50573d6000803e3d6000fd5b5050505050505050565b60008490508073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330866000808a61012c42613a90919061588e565b6040518863ffffffff1660e01b8152600401613ab196959493929190615d58565b60606040518083038185885af1158015613acf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613af49190615dce565b5050505050505050565b601854602081905550601954602181905550601a54602281905550601b54602381905550565b601c54602081905550601d54602181905550601e54602281905550601f54602381905550565b6000602081905550600060218190555060006022819055506000602381905550565b6000613b76612c97565b90506000613b95613b8684612e2f565b84612de590919063ffffffff16565b90506000613bac8385612d6a90919063ffffffff16565b90506000613bdd613bce85613bc088612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b9050613be9868461442c565b613c3b85600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9385601554612de590919063ffffffff16565b601581905550613ceb81600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d398786866144f7565b613d448786866147cd565b613d4d85614978565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613daa9190614a17565b60405180910390a350505050505050565b6000613dc5612c97565b90506000613de4613dd584612e2f565b84612de590919063ffffffff16565b90506000613dfb8385612d6a90919063ffffffff16565b9050613e07858361442c565b613e5981600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eee82600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4684601554612d0c90919063ffffffff16565b601581905550613f578685856144f7565b613f628685856147cd565b613f6b84614978565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613fc89190614a17565b60405180910390a3505050505050565b6000613fe2612c97565b90506000614001613ff284612e2f565b84612de590919063ffffffff16565b905061400d848261442c565b61405f83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b783601554612de590919063ffffffff16565b60158190555061410f81600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416783601554612d0c90919063ffffffff16565b6015819055506141788584846144f7565b6141838584846147cd565b61418c83614978565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516141e99190614a17565b60405180910390a35050505050565b6000614202612c97565b9050600061422161421284612e2f565b84612de590919063ffffffff16565b905060006142388385612d6a90919063ffffffff16565b9050600061426961425a8561424c88612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b9050614275868461442c565b6142c782600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435c81600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143aa8786866144f7565b6143b58786866147cd565b6143be85614978565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161441b9190614a17565b60405180910390a350505050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166144f357601760039054906101000a900460ff16156144f2576013546144b0826144a285611a04565b612d0c90919063ffffffff16565b11156144f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144e890615e93565b60405180910390fd5b5b5b5050565b60006145366103e8614528614519602254602154612d0c90919063ffffffff16565b86612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905060008111156147c75761457e61456d6103e861455f60215487612d6a90919063ffffffff16565b612cc290919063ffffffff16565b602454612d0c90919063ffffffff16565b6024819055506145c16145b06103e86145a260225487612d6a90919063ffffffff16565b612cc290919063ffffffff16565b602554612d0c90919063ffffffff16565b60258190555060006145dc8383612d6a90919063ffffffff16565b9050600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146ca5761468282600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614760565b61471c81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516147bd9190614a17565b60405180910390a3505b50505050565b60006147f86103e86147ea60235486612d6a90919063ffffffff16565b612cc290919063ffffffff16565b9050600061480f8383612d6a90919063ffffffff16565b90506148858160016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b60016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516149699190614a17565b60405180910390a35050505050565b60006149a36103e861499560205485612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905060006149c16149b2612c97565b83612d6a90919063ffffffff16565b90506149d881600a54612de590919063ffffffff16565b600a819055506149f382600b54612d0c90919063ffffffff16565b600b81905550505050565b6000819050919050565b614a11816149fe565b82525050565b6000602082019050614a2c6000830184614a08565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a6282614a37565b9050919050565b614a7281614a57565b8114614a7d57600080fd5b50565b600081359050614a8f81614a69565b92915050565b600060208284031215614aab57614aaa614a32565b5b6000614ab984828501614a80565b91505092915050565b60008115159050919050565b614ad781614ac2565b82525050565b6000602082019050614af26000830184614ace565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614b32578082015181840152602081019050614b17565b83811115614b41576000848401525b50505050565b6000601f19601f8301169050919050565b6000614b6382614af8565b614b6d8185614b03565b9350614b7d818560208601614b14565b614b8681614b47565b840191505092915050565b60006020820190508181036000830152614bab8184614b58565b905092915050565b6000819050919050565b6000614bd8614bd3614bce84614a37565b614bb3565b614a37565b9050919050565b6000614bea82614bbd565b9050919050565b6000614bfc82614bdf565b9050919050565b614c0c81614bf1565b82525050565b6000602082019050614c276000830184614c03565b92915050565b614c36816149fe565b8114614c4157600080fd5b50565b600081359050614c5381614c2d565b92915050565b60008060408385031215614c7057614c6f614a32565b5b6000614c7e85828601614a80565b9250506020614c8f85828601614c44565b9150509250929050565b614ca281614ac2565b8114614cad57600080fd5b50565b600081359050614cbf81614c99565b92915050565b600060208284031215614cdb57614cda614a32565b5b6000614ce984828501614cb0565b91505092915050565b600080600060608486031215614d0b57614d0a614a32565b5b6000614d1986828701614a80565b9350506020614d2a86828701614a80565b9250506040614d3b86828701614c44565b9150509250925092565b600060208284031215614d5b57614d5a614a32565b5b6000614d6984828501614c44565b91505092915050565b600060ff82169050919050565b614d8881614d72565b82525050565b6000602082019050614da36000830184614d7f565b92915050565b60008060408385031215614dc057614dbf614a32565b5b6000614dce85828601614c44565b9250506020614ddf85828601614cb0565b9150509250929050565b6000614df482614a37565b9050919050565b614e0481614de9565b8114614e0f57600080fd5b50565b600081359050614e2181614dfb565b92915050565b600060208284031215614e3d57614e3c614a32565b5b6000614e4b84828501614e12565b91505092915050565b60008060408385031215614e6b57614e6a614a32565b5b6000614e7985828601614a80565b9250506020614e8a85828601614cb0565b9150509250929050565b614e9d81614a57565b82525050565b6000602082019050614eb86000830184614e94565b92915050565b60008060008060808587031215614ed857614ed7614a32565b5b6000614ee687828801614c44565b9450506020614ef787828801614c44565b9350506040614f0887828801614c44565b9250506060614f1987828801614c44565b91505092959194509250565b60008060408385031215614f3c57614f3b614a32565b5b6000614f4a85828601614a80565b9250506020614f5b85828601614a80565b9150509250929050565b614f6e81614de9565b82525050565b6000602082019050614f896000830184614f65565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614fd657607f821691505b60208210811415614fea57614fe9614f8f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615026602083614b03565b915061503182614ff0565b602082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000615092600f83614b03565b915061509d8261505c565b602082019050919050565b600060208201905081810360008301526150c181615085565b9050919050565b7f54726164696e67207368696674656420666f7220626f742064656c6574696f6e60008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000615124602183614b03565b915061512f826150c8565b604082019050919050565b6000602082019050818103600083015261515381615117565b9050919050565b7f546f6b656e3a20416d6f756e74206d757374206265206c657373207468616e2060008201527f746f74616c207265666c656374696f6e73000000000000000000000000000000602082015250565b60006151b6603183614b03565b91506151c18261515a565b604082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b7f57652063616e206e6f7420626c61636b6c69737420726f757465720000000000600082015250565b6000615222601b83614b03565b915061522d826151ec565b602082019050919050565b6000602082019050818103600083015261525181615215565b9050919050565b7f536e6970657220616c7265616479206578697374000000000000000000000000600082015250565b600061528e601483614b03565b915061529982615258565b602082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f546f6b656e3a204578636c75646564206164647265737365732063616e6e6f7460008201527f2063616c6c20746869732066756e6374696f6e00000000000000000000000000602082015250565b6000615320603383614b03565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b7f42455032303a20416d6f756e74206d757374206265206c657373207468616e2060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b60006153b2602683614b03565b91506153bd82615356565b604082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b60006040820190506153fd6000830185614e94565b61540a6020830184614a08565b9392505050565b60008151905061542081614c99565b92915050565b60006020828403121561543c5761543b614a32565b5b600061544a84828501615411565b91505092915050565b7f4e6f74206120736e697065720000000000000000000000000000000000000000600082015250565b6000615489600c83614b03565b915061549482615453565b602082019050919050565b600060208201905081810360008301526154b88161547c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061551b602683614b03565b9150615526826154bf565b604082019050919050565b6000602082019050818103600083015261554a8161550e565b9050919050565b7f546f6b656e3a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155ad602483614b03565b91506155b882615551565b604082019050919050565b600060208201905081810360008301526155dc816155a0565b9050919050565b7f546f6b656e3a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061563f602283614b03565b915061564a826155e3565b604082019050919050565b6000602082019050818103600083015261566e81615632565b9050919050565b7f546f6b656e3a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156d1602583614b03565b91506156dc82615675565b604082019050919050565b60006020820190508181036000830152615700816156c4565b9050919050565b7f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615763602383614b03565b915061576e82615707565b604082019050919050565b6000602082019050818103600083015261579281615756565b9050919050565b7f546f6b656e3a207472616e7366657220616d6f756e74206d757374206265206760008201527f726561746572207468616e207a65726f00000000000000000000000000000000602082015250565b60006157f5603083614b03565b915061580082615799565b604082019050919050565b60006020820190508181036000830152615824816157e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615865826149fe565b9150615870836149fe565b9250828210156158835761588261582b565b5b828203905092915050565b6000615899826149fe565b91506158a4836149fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156158d9576158d861582b565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061591a601b83614b03565b9150615925826158e4565b602082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b826149fe565b9150615966836149fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561599f5761599e61582b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159e4826149fe565b91506159ef836149fe565b9250826159ff576159fe6159aa565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a66602183614b03565b9150615a7182615a0a565b604082019050919050565b60006020820190508181036000830152615a9581615a59565b9050919050565b6000606082019050615ab16000830186614a08565b615abe6020830185614a08565b615acb6040830184614a08565b949350505050565b7f416d6f756e74206d7573742062652067726561746572207468616e206d696e6960008201527f6d756d20627579204c696d697400000000000000000000000000000000000000602082015250565b6000615b2f602d83614b03565b9150615b3a82615ad3565b604082019050919050565b60006020820190508181036000830152615b5e81615b22565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615bd281614a69565b92915050565b600060208284031215615bee57615bed614a32565b5b6000615bfc84828501615bc3565b91505092915050565b6000819050919050565b6000615c2a615c25615c2084615c05565b614bb3565b6149fe565b9050919050565b615c3a81615c0f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c7581614a57565b82525050565b6000615c878383615c6c565b60208301905092915050565b6000602082019050919050565b6000615cab82615c40565b615cb58185615c4b565b9350615cc083615c5c565b8060005b83811015615cf1578151615cd88882615c7b565b9750615ce383615c93565b925050600181019050615cc4565b5085935050505092915050565b600060a082019050615d136000830188614a08565b615d206020830187615c31565b8181036040830152615d328186615ca0565b9050615d416060830185614e94565b615d4e6080830184614a08565b9695505050505050565b600060c082019050615d6d6000830189614e94565b615d7a6020830188614a08565b615d876040830187615c31565b615d946060830186615c31565b615da16080830185614e94565b615dae60a0830184614a08565b979650505050505050565b600081519050615dc881614c2d565b92915050565b600080600060608486031215615de757615de6614a32565b5b6000615df586828701615db9565b9350506020615e0686828701615db9565b9250506040615e1786828701615db9565b9150509250925092565b7f42455032303a20616d6f756e7420657863656564206d617820686f6c64696e6760008201527f206c696d69740000000000000000000000000000000000000000000000000000602082015250565b6000615e7d602683614b03565b9150615e8882615e21565b604082019050919050565b60006020820190508181036000830152615eac81615e70565b905091905056fe546f6b656e3a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f546f6b656e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122017f40c165c8fc688a04fa84fc60de8ffe0636d28e67373a1c594c845509c37dd64736f6c634300080a0033

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

0000000000000000000000003cfd00e0a60722c8561cb8148e557adca7f37d28

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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003cfd00e0a60722c8561cb8148e557adca7f37d28


Deployed Bytecode Sourcemap

5916:25132:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7971:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13308:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10007:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6892:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11049:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6496:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17817:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10284:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7146:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11250:639;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14819:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10193:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7809:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20543:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11897:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7576:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13789:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14225:586;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7478:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12931:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18215:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13104:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15218:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7906:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10387:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7064:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3251:94;;;;;;;;;;;;;:::i;:::-;;13560:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8068:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12717:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15464:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7253:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2942:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7606:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10098:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16059:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8119:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16471:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12205:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10840:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17313:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18074:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7308:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15897:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15688:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7856:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16224:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7761:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10648:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20801:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6997:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8020:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16916:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17128:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6948:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3501:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7651:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7971:42;;;;:::o;13308:176::-;13410:4;13439:27;:37;13467:8;13439:37;;;;;;;;;;;;;;;;;;;;;;;;;13432:44;;13308:176;;;:::o;10007:83::-;10044:13;10077:5;10070:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10007:83;:::o;6892:27::-;;;;;;;;;;;;;:::o;11049:193::-;11151:4;11173:39;11182:12;:10;:12::i;:::-;11196:7;11205:6;11173:8;:39::i;:::-;11230:4;11223:11;;11049:193;;;;:::o;6496:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;17817:170::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17921:6:::1;17897:21;;:30;;;;;;;;;;;;;;;;;;17943:36;17972:6;17943:36;;;;;;:::i;:::-;;;;;;;;17817:170:::0;:::o;10284:95::-;10337:7;10364;;10357:14;;10284:95;:::o;7146:45::-;;;;:::o;11250:639::-;11382:4;11408:8;:16;11417:6;11408:16;;;;;;;;;;;;;;;;;;;;;;;;;11407:17;11399:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;11464:8;:19;11473:9;11464:19;;;;;;;;;;;;;;;;;;;;;;;;;11463:20;11455:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;11523:18;;;;;;;;;;;11522:19;11514:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11592:36;11602:6;11610:9;11621:6;11592:9;:36::i;:::-;11639:220;11662:6;11683:12;:10;:12::i;:::-;11710:138;11766:6;11710:138;;;;;;;;;;;;;;;;;:11;:19;11722:6;11710:19;;;;;;;;;;;;;;;:33;11730:12;:10;:12::i;:::-;11710:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;11639:8;:220::i;:::-;11877:4;11870:11;;11250:639;;;;;:::o;14819:329::-;14913:7;14971;;14960;:18;;14938:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;15066:19;15088:10;:8;:10::i;:::-;15066:32;;15116:24;15128:11;15116:7;:11;;:24;;;;:::i;:::-;15109:31;;;14819:329;;;:::o;10193:83::-;10234:5;10259:9;;;;;;;;;;;10252:16;;10193:83;:::o;7809:40::-;;;;:::o;20543:250::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20644:9:::1;;;;;;;;;;;20624:30;;:8;:30;;;;20616:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20706:8;:18;20715:8;20706:18;;;;;;;;;;;;;;;;;;;;;;;;;20705:19;20697:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;20781:4;20760:8;:18;20769:8;20760:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;20543:250:::0;:::o;11897:300::-;12012:4;12034:133;12057:12;:10;:12::i;:::-;12084:7;12106:50;12145:10;12106:11;:25;12118:12;:10;:12::i;:::-;12106:25;;;;;;;;;;;;;;;:34;12132:7;12106:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12034:8;:133::i;:::-;12185:4;12178:11;;11897:300;;;;:::o;7576:23::-;;;;;;;;;;;;;:::o;13789:428::-;13841:14;13858:12;:10;:12::i;:::-;13841:29;;13904:21;:29;13926:6;13904:29;;;;;;;;;;;;;;;;;;;;;;;;;13903:30;13881:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;14023:15;14041:23;14053:10;:8;:10::i;:::-;14041:7;:11;;:23;;;;:::i;:::-;14023:41;;14093:28;14113:7;14093;:15;14101:6;14093:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;14075:7;:15;14083:6;14075:15;;;;;;;;;;;;;;;:46;;;;14142:20;14154:7;14142;;:11;;:20;;;;:::i;:::-;14132:7;:30;;;;14186:23;14201:7;14186:10;;:14;;:23;;;;:::i;:::-;14173:10;:36;;;;13830:387;;13789:428;:::o;14225:586::-;14343:7;14387;;14376;:18;;14368:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14453:17;14448:356;;14487:15;14505:23;14517:10;:8;:10::i;:::-;14505:7;:11;;:23;;;;:::i;:::-;14487:41;;14550:7;14543:14;;;;;14448:356;14590:15;14608:23;14620:10;:8;:10::i;:::-;14608:7;:11;;:23;;;;:::i;:::-;14590:41;;14646:23;14672:83;14702:38;14729:10;:8;:10::i;:::-;14702:22;14716:7;14702:13;:22::i;:::-;:26;;:38;;;;:::i;:::-;14672:7;:11;;:83;;;;:::i;:::-;14646:109;;14777:15;14770:22;;;;14225:586;;;;;:::o;7478:40::-;;;;;;;;;;;;;:::o;12931:101::-;12987:7;13014:10;;13007:17;;12931:101;:::o;18215:148::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18344:11:::1;18329:12;;:26;;;;;;;;;;;;;;;;;;18215:148:::0;:::o;13104:126::-;13170:4;13194:18;:28;13213:8;13194:28;;;;;;;;;;;;;;;;;;;;;;;;;13187:35;;13104:126;;;:::o;15218:176::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15381:5:::1;15341:27;:37;15369:8;15341:37;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;15218:176:::0;;:::o;7906:35::-;;;;:::o;10387:253::-;10490:7;10519:21;:31;10541:8;10519:31;;;;;;;;;;;;;;;;;;;;;;;;;10515:61;;;10559:7;:17;10567:8;10559:17;;;;;;;;;;;;;;;;10552:24;;;;10515:61;10594:38;10614:7;:17;10622:8;10614:17;;;;;;;;;;;;;;;;10594:19;:38::i;:::-;10587:45;;10387:253;;;;:::o;7064:73::-;;;;;;;;;;;;;:::o;3251:94::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3316:21:::1;3334:1;3316:9;:21::i;:::-;3251:94::o:0;13560:174::-;13661:4;13690:26;:36;13717:8;13690:36;;;;;;;;;;;;;;;;;;;;;;;;;13683:43;;13560:174;;;:::o;8068:44::-;;;;:::o;12717:132::-;12786:4;12810:21;:31;12832:8;12810:31;;;;;;;;;;;;;;;;;;;;;;;;;12803:38;;12717:132;;;:::o;15464:174::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15625:5:::1;15586:26;:36;15613:8;15586:36;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;15464:174:::0;;:::o;7253:48::-;;;;:::o;2942:87::-;2988:7;3015:6;;;;;;;;;;;3008:13;;2942:87;:::o;7606:38::-;;;;;;;;;;;;;:::o;10098:87::-;10137:13;10170:7;10163:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10098:87;:::o;16059:98::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16142:7:::1;16128:11;:21;;;;16059:98:::0;:::o;8119:36::-;;;;:::o;16471:386::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16691:18:::1;16666:22;:43;;;;16744:13;16720:21;:37;;;;16795:16;16768:24;:43;;;;16841:8;16822:16;:27;;;;16471:386:::0;;;;:::o;12205:400::-;12325:4;12347:228;12370:12;:10;:12::i;:::-;12397:7;12419:145;12476:15;12419:145;;;;;;;;;;;;;;;;;:11;:25;12431:12;:10;:12::i;:::-;12419:25;;;;;;;;;;;;;;;:34;12445:7;12419:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;12347:8;:228::i;:::-;12593:4;12586:11;;12205:400;;;;:::o;10840:199::-;10945:4;10967:42;10977:12;:10;:12::i;:::-;10991:9;11002:6;10967:9;:42::i;:::-;11027:4;11020:11;;10840:199;;;;:::o;17313:381::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17531:18:::1;17507:21;:42;;;;17583:13;17560:20;:36;;;;17633:16;17607:23;:42;;;;17678:8;17660:15;:26;;;;17313:381:::0;;;;:::o;18074:93::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18153:6:::1;18146:4;;:13;;;;;;;;;;;;;;;;;;18074:93:::0;:::o;7308:43::-;;;;:::o;15897:108::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15990:7:::1;15971:16;:26;;;;15897:108:::0;:::o;15688:155::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15781:6:::1;15760:18;;:27;;;;;;;;;;;;;;;;;;15803:32;15828:6;15803:32;;;;;;:::i;:::-;;;;;;;;15688:155:::0;:::o;7856:43::-;;;;:::o;16224:161::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16343:6:::1;16336:23;;;16360:7;:5;:7::i;:::-;16369;16336:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16224:161:::0;;:::o;7761:41::-;;;;:::o;10648:184::-;10765:7;10797:11;:18;10809:5;10797:18;;;;;;;;;;;;;;;:27;10816:7;10797:27;;;;;;;;;;;;;;;;10790:34;;10648:184;;;;:::o;20801:166::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20887:8:::1;:18;20896:8;20887:18;;;;;;;;;;;;;;;;;;;;;;;;;20879:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20954:5;20933:8;:18;20942:8;20933:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;20801:166:::0;:::o;6997:35::-;;;;;;;;;;;;;:::o;8020:41::-;;;;:::o;16916:160::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17062:6:::1;17031:18;:28;17050:8;17031:28;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;16916:160:::0;;:::o;17128:104::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17217:7:::1;17200:14;:24;;;;17128:104:::0;:::o;6948:22::-;;;;;;;;;;;;;:::o;3501:229::-;3174:12;:10;:12::i;:::-;3163:23;;:7;:5;:7::i;:::-;:23;;;3155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3624:1:::1;3604:22;;:8;:22;;;;3582:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3703:19;3713:8;3703:9;:19::i;:::-;3501:229:::0;:::o;7651:38::-;;;;;;;;;;;;;:::o;2300:98::-;2353:7;2380:10;2373:17;;2300:98;:::o;20975:371::-;21119:1;21102:19;;:5;:19;;;;21094:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21200:1;21181:21;;:7;:21;;;;21173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21284:6;21254:11;:18;21266:5;21254:18;;;;;;;;;;;;;;;:27;21273:7;21254:27;;;;;;;;;;;;;;;:36;;;;21322:7;21306:32;;21315:5;21306:32;;;21331:6;21306:32;;;;;;:::i;:::-;;;;;;;;20975:371;;;:::o;21395:839::-;21533:1;21517:18;;:4;:18;;;;21509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21610:1;21596:16;;:2;:16;;;;21588:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21680:1;21671:6;:10;21663:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21784:24;21799:4;21805:2;21784:14;:24::i;:::-;21882:12;21897:4;21882:19;;22004:18;:24;22023:4;22004:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;22032:18;:22;22051:2;22032:22;;;;;;;;;;;;;;;;;;;;;;;;;22004:50;:59;;;;22059:4;;;;;;;;;;;22058:5;22004:59;22000:107;;;22090:5;22080:15;;22000:107;22185:41;22200:4;22206:2;22210:6;22218:7;22185:14;:41::i;:::-;21498:736;21395:839;;;:::o;4398:226::-;4518:7;4551:1;4546;:6;;4554:12;4538:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4578:9;4594:1;4590;:5;;;;:::i;:::-;4578:17;;4615:1;4608:8;;;4398:226;;;;;:::o;19296:164::-;19338:7;19359:15;19376;19395:19;:17;:19::i;:::-;19358:56;;;;19432:20;19444:7;19432;:11;;:20;;;;:::i;:::-;19425:27;;;;19296:164;:::o;5111:132::-;5169:7;5196:39;5200:1;5203;5196:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5189:46;;5111:132;;;;:::o;4065:181::-;4123:7;4143:9;4159:1;4155;:5;;;;:::i;:::-;4143:17;;4184:1;4179;:6;;4171:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4237:1;4230:8;;;4065:181;;;;:::o;4632:471::-;4690:7;4940:1;4935;:6;4931:47;;;4965:1;4958:8;;;;4931:47;4990:9;5006:1;5002;:5;;;;:::i;:::-;4990:17;;5035:1;5030;5026;:5;;;;:::i;:::-;:10;5018:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5094:1;5087:8;;;4632:471;;;;;:::o;4254:136::-;4312:7;4339:43;4343:1;4346;4339:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4332:50;;4254:136;;;;:::o;18505:359::-;18568:7;18588:18;18609:219;18824:3;18609:196;18653:137;18727:44;18755:15;;18727:23;;:27;;:44;;;;:::i;:::-;18653:47;18679:20;;18653:21;;:25;;:47;;;;:::i;:::-;:51;;:137;;;;:::i;:::-;18609:7;:25;;:196;;;;:::i;:::-;:214;;:219;;;;:::i;:::-;18588:240;;18846:10;18839:17;;;18505:359;;;:::o;3859:173::-;3915:16;3934:6;;;;;;;;;;;3915:25;;3960:8;3951:6;;:17;;;;;;;;;;;;;;;;;;4015:8;3984:40;;4005:8;3984:40;;;;;;;;;;;;3904:128;3859:173;:::o;28810:2235::-;29157:28;29188:24;29206:4;29188:9;:24::i;:::-;29157:55;;29225:15;29267:14;;29243:20;:38;;29225:56;;29312:10;:42;;;;;29347:7;;;;;;;;;;;29339:15;;:4;:15;;;;29312:42;:80;;;;;29371:21;;;;;;;;;;;29312:80;:147;;;;;29427:4;29411:21;;:4;:21;;;:47;;;;;29450:7;;;;;;;;;;;29436:22;;:2;:22;;;29411:47;29409:50;29312:147;29294:1744;;;29534:65;29551:4;29566:9;;;;;;;;;;;29578:20;29534:8;:65::i;:::-;29616:18;29637:28;29663:1;29637:21;;:25;;:28;;;;:::i;:::-;29616:49;;29680:23;29706:37;29732:10;29706:21;;:25;;:37;;;;:::i;:::-;29680:63;;29760:30;29793:73;29836:15;29793:20;:24;;:73;;;;:::i;:::-;29760:106;;29933:66;29964:9;;;;;;;;;;;29976:22;29933;:66::i;:::-;30016:20;30039:21;30016:44;;30075:31;30109:56;30142:22;30109:28;30126:10;30109:12;:16;;:28;;;;:::i;:::-;:32;;:56;;;;:::i;:::-;30075:90;;30180:26;30209:41;30226:23;30209:12;:16;;:41;;;;:::i;:::-;30180:70;;30342:1;30321:18;:22;30318:85;;;30362:12;;;;;;;;;;;:21;;:41;30384:18;30362:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30318:85;30487:1;30461:23;:27;30458:434;;;30508:192;30557:9;;;;;;;;;;;30590:7;:5;:7::i;:::-;30620:15;30658:23;30508:18;:192::i;:::-;30726:150;30763:10;30796:23;30842:15;30726:150;;;;;;;;:::i;:::-;;;;;;;;30458:434;30981:1;30957:21;:25;;;;31025:1;30998:24;:28;;;;29486:1552;;;;;;29294:1744;28868:2177;;28810:2235;;:::o;22315:1522::-;22502:8;:16;22511:6;22502:16;;;;;;;;;;;;;;;;;;;;;;;;;22501:17;22493:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;22558:8;:19;22567:9;22558:19;;;;;;;;;;;;;;;;;;;;;;;;;22557:20;22549:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22617:18;;;;;;;;;;;22616:19;22608:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22690:26;:37;22717:9;22690:37;;;;;;;;;;;;;;;;;;;;;;;;;22686:148;;22761:11;;22751:6;:21;;22743:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22686:148;22858:7;;;;;;;;;;;22848:17;;:6;:17;;;:28;;;;;22869:7;22848:28;22844:286;;;22893:11;:9;:11::i;:::-;22844:286;;;22976:7;;;;;;;;;;;22963:20;;:9;:20;;;:31;;;;;22987:7;22963:31;22959:171;;;23011:12;:10;:12::i;:::-;22959:171;;;23104:14;:12;:14::i;:::-;22959:171;22844:286;23249:21;:29;23271:6;23249:29;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;23283:21;:32;23305:9;23283:32;;;;;;;;;;;;;;;;;;;;;;;;;23282:33;23249:66;23231:599;;;23342:48;23364:6;23372:9;23383:6;23342:21;:48::i;:::-;23231:599;;;23427:21;:29;23449:6;23427:29;;;;;;;;;;;;;;;;;;;;;;;;;23426:30;:66;;;;;23460:21;:32;23482:9;23460:32;;;;;;;;;;;;;;;;;;;;;;;;;23426:66;23408:422;;;23519:46;23539:6;23547:9;23558:6;23519:19;:46::i;:::-;23408:422;;;23601:21;:29;23623:6;23601:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;23634:21;:32;23656:9;23634:32;;;;;;;;;;;;;;;;;;;;;;;;;23601:65;23583:247;;;23693:48;23715:6;23723:9;23734:6;23693:21;:48::i;:::-;23583:247;;;23774:44;23792:6;23800:9;23811:6;23774:17;:44::i;:::-;23583:247;23408:422;23231:599;22315:1522;;;;:::o;19728:355::-;19779:7;19788;19808:15;19826:7;;19808:25;;19844:15;19862:7;;19844:25;;19890:28;19902:15;;19890:7;:11;;:28;;;;:::i;:::-;19880:38;;19939:28;19951:15;;19939:7;:11;;:28;;;;:::i;:::-;19929:38;;19992:20;20004:7;;19992;;:11;;:20;;;;:::i;:::-;19982:7;:30;19978:61;;;20022:7;;20031;;20014:25;;;;;;;;19978:61;20058:7;20067;20050:25;;;;;;19728:355;;;:::o;5251:312::-;5371:7;5403:1;5399;:5;5406:12;5391:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5430:9;5446:1;5442;:5;;;;:::i;:::-;5430:17;;5554:1;5547:8;;;5251:312;;;;;:::o;31144:603::-;31248:20;31282:13;31248:48;;31365:21;31403:1;31389:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31365:40;;31434:4;31416;31421:1;31416:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31460:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31450:4;31455:1;31450:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;31515:9;:60;;;31590:11;31616:1;31660:4;31687;31725:3;31707:15;:21;;;;:::i;:::-;31515:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31237:510;;31144:603;;:::o;31755:512::-;31918:20;31952:13;31918:48;;32009:9;:25;;;32042:9;32075:4;32095:11;32121:1;32164;32207:5;32245:3;32227:15;:21;;;;:::i;:::-;32009:250;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31907:360;31755:512;;;;:::o;19468:252::-;19532:21;;19508;:45;;;;19587:20;;19564;:43;;;;19644:23;;19618;:49;;;;19696:15;;19678;:33;;;;19468:252::o;20278:256::-;20343:22;;20319:21;:46;;;;20399:21;;20376:20;:44;;;;20457:24;;20431:23;:50;;;;20510:16;;20492:15;:34;;;;20278:256::o;20091:179::-;20158:1;20134:21;:25;;;;20193:1;20170:20;:24;;;;20231:1;20205:23;:27;;;;20261:1;20243:15;:19;;;;20091:179::o;24752:855::-;24888:19;24910:10;:8;:10::i;:::-;24888:32;;24931:23;24957:35;24969:22;24983:7;24969:13;:22::i;:::-;24957:7;:11;;:35;;;;:::i;:::-;24931:61;;25003:15;25021:24;25033:11;25021:7;:11;;:24;;;;:::i;:::-;25003:42;;25056:23;25082:76;25108:39;25135:11;25108:22;25122:7;25108:13;:22::i;:::-;:26;;:39;;;;:::i;:::-;25082:7;:11;;:76;;;;:::i;:::-;25056:102;;25169:49;25191:9;25202:15;25169:21;:49::i;:::-;25247:28;25267:7;25247;:15;25255:6;25247:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25229:7;:15;25237:6;25229:15;;;;;;;;;;;;;;;:46;;;;25304:28;25324:7;25304:15;;:19;;:28;;;;:::i;:::-;25286:15;:46;;;;25364:39;25387:15;25364:7;:18;25372:9;25364:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25343:7;:18;25351:9;25343:18;;;;;;;;;;;;;;;:60;;;;25414:40;25426:6;25433:7;25442:11;25414;:40::i;:::-;25465:41;25478:6;25485:7;25494:11;25465:12;:41::i;:::-;25517:20;25529:7;25517:11;:20::i;:::-;25572:9;25555:44;;25564:6;25555:44;;;25583:15;25555:44;;;;;;:::i;:::-;;;;;;;;24877:730;;;;24752:855;;;:::o;26474:740::-;26608:19;26630:10;:8;:10::i;:::-;26608:32;;26651:23;26677:35;26689:22;26703:7;26689:13;:22::i;:::-;26677:7;:11;;:35;;;;:::i;:::-;26651:61;;26723:15;26741:24;26753:11;26741:7;:11;;:24;;;;:::i;:::-;26723:42;;26776:49;26798:9;26809:15;26776:21;:49::i;:::-;26854:28;26874:7;26854;:15;26862:6;26854:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26836:7;:15;26844:6;26836:15;;;;;;;;;;;;;;;:46;;;;26914:39;26937:15;26914:7;:18;26922:9;26914:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26893:7;:18;26901:9;26893:18;;;;;;;;;;;;;;;:60;;;;26982:28;27002:7;26982:15;;:19;;:28;;;;:::i;:::-;26964:15;:46;;;;27021:40;27033:6;27040:7;27049:11;27021;:40::i;:::-;27072:41;27085:6;27092:7;27101:11;27072:12;:41::i;:::-;27124:20;27136:7;27124:11;:20::i;:::-;27179:9;27162:44;;27171:6;27162:44;;;27190:15;27162:44;;;;;;:::i;:::-;;;;;;;;26597:617;;;26474:740;;;:::o;25676:746::-;25812:19;25834:10;:8;:10::i;:::-;25812:32;;25855:23;25881:35;25893:22;25907:7;25893:13;:22::i;:::-;25881:7;:11;;:35;;;;:::i;:::-;25855:61;;25927:49;25949:9;25960:15;25927:21;:49::i;:::-;26005:28;26025:7;26005;:15;26013:6;26005:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25987:7;:15;25995:6;25987:15;;;;;;;;;;;;;;;:46;;;;26062:28;26082:7;26062:15;;:19;;:28;;;;:::i;:::-;26044:15;:46;;;;26122:39;26145:15;26122:7;:18;26130:9;26122:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26101:7;:18;26109:9;26101:18;;;;;;;;;;;;;;;:60;;;;26190:28;26210:7;26190:15;;:19;;:28;;;;:::i;:::-;26172:15;:46;;;;26229:40;26241:6;26248:7;26257:11;26229;:40::i;:::-;26280:41;26293:6;26300:7;26309:11;26280:12;:41::i;:::-;26332:20;26344:7;26332:11;:20::i;:::-;26387:9;26370:44;;26379:6;26370:44;;;26398:15;26370:44;;;;;;:::i;:::-;;;;;;;;25801:621;;25676:746;;;:::o;23910:792::-;24042:19;24064:10;:8;:10::i;:::-;24042:32;;24085:23;24111:35;24123:22;24137:7;24123:13;:22::i;:::-;24111:7;:11;;:35;;;;:::i;:::-;24085:61;;24157:15;24175:24;24187:11;24175:7;:11;;:24;;;;:::i;:::-;24157:42;;24210:23;24236:76;24262:39;24289:11;24262:22;24276:7;24262:13;:22::i;:::-;:26;;:39;;;;:::i;:::-;24236:7;:11;;:76;;;;:::i;:::-;24210:102;;24323:49;24345:9;24356:15;24323:21;:49::i;:::-;24401:28;24421:7;24401;:15;24409:6;24401:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24383:7;:15;24391:6;24383:15;;;;;;;;;;;;;;;:46;;;;24461:39;24484:15;24461:7;:18;24469:9;24461:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24440:7;:18;24448:9;24440:18;;;;;;;;;;;;;;;:60;;;;24511:40;24523:6;24530:7;24539:11;24511;:40::i;:::-;24562:41;24575:6;24582:7;24591:11;24562:12;:41::i;:::-;24614:20;24626:7;24614:11;:20::i;:::-;24667:9;24650:44;;24659:6;24650:44;;;24678:15;24650:44;;;;;;:::i;:::-;;;;;;;;24031:671;;;;23910:792;;;:::o;18872:414::-;18973:27;:31;19001:2;18973:31;;;;;;;;;;;;;;;;;;;;;;;;;18954:325;;19055:19;;;;;;;;;;;19051:217;;;19154:16;;19125:25;19143:6;19125:13;19135:2;19125:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:45;;19095:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;19051:217;18954:325;18872:414;;:::o;27592:863::-;27686:12;27701:99;27796:3;27701:76;27727:49;27752:23;;27727:20;;:24;;:49;;;;:::i;:::-;27701:7;:25;;:76;;;;:::i;:::-;:94;;:99;;;;:::i;:::-;27686:114;;27824:1;27817:4;:8;27813:635;;;27866:101;27910:42;27948:3;27910:33;27922:20;;27910:7;:11;;:33;;;;:::i;:::-;:37;;:42;;;;:::i;:::-;27866:21;;:25;;:101;;;;:::i;:::-;27842:21;:125;;;;28009:107;28056:45;28097:3;28056:36;28068:23;;28056:7;:11;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;28009:24;;:28;;:107;;;;:::i;:::-;27982:24;:134;;;;28133:12;28148:21;28157:11;28148:4;:8;;:21;;;;:::i;:::-;28133:36;;28188:21;:36;28218:4;28188:36;;;;;;;;;;;;;;;;;;;;;;;;;28184:193;;;28268:32;28295:4;28268:7;:22;28284:4;28268:22;;;;;;;;;;;;;;;;:26;;:32;;;;:::i;:::-;28243:7;:22;28259:4;28243:22;;;;;;;;;;;;;;;:57;;;;28184:193;;;28345:32;28372:4;28345:7;:22;28361:4;28345:22;;;;;;;;;;;;;;;;:26;;:32;;;;:::i;:::-;28320:7;:22;28336:4;28320:22;;;;;;;;;;;;;;;:57;;;;28184:193;28424:4;28399:37;;28408:6;28399:37;;;28431:4;28399:37;;;;;;:::i;:::-;;;;;;;;27827:621;27813:635;27675:780;27592:863;;;:::o;28460:336::-;28555:15;28573:37;28606:3;28573:28;28585:15;;28573:7;:11;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;28555:55;;28621:16;28640:24;28652:11;28640:7;:11;;:24;;;;:::i;:::-;28621:43;;28698:34;28723:8;28698:7;:20;28706:11;;;;;;;;;;;28698:20;;;;;;;;;;;;;;;;:24;;:34;;;;:::i;:::-;28675:7;:20;28683:11;;;;;;;;;;;28675:20;;;;;;;;;;;;;;;:57;;;;28767:11;;;;;;;;;;;28750:38;;28759:6;28750:38;;;28780:7;28750:38;;;;;;:::i;:::-;;;;;;;;28544:252;;28460:336;;;:::o;27288:251::-;27345:12;27360:43;27399:3;27360:34;27372:21;;27360:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;27345:58;;27414:12;27429:20;27438:10;:8;:10::i;:::-;27429:4;:8;;:20;;;;:::i;:::-;27414:35;;27470:17;27482:4;27470:7;;:11;;:17;;;;:::i;:::-;27460:7;:27;;;;27511:20;27526:4;27511:10;;:14;;:20;;;;:::i;:::-;27498:10;:33;;;;27334:205;;27288:251;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:90::-;1645:7;1688:5;1681:13;1674:21;1663:32;;1611:90;;;:::o;1707:109::-;1788:21;1803:5;1788:21;:::i;:::-;1783:3;1776:34;1707:109;;:::o;1822:210::-;1909:4;1947:2;1936:9;1932:18;1924:26;;1960:65;2022:1;2011:9;2007:17;1998:6;1960:65;:::i;:::-;1822:210;;;;:::o;2038:99::-;2090:6;2124:5;2118:12;2108:22;;2038:99;;;:::o;2143:169::-;2227:11;2261:6;2256:3;2249:19;2301:4;2296:3;2292:14;2277:29;;2143:169;;;;:::o;2318:307::-;2386:1;2396:113;2410:6;2407:1;2404:13;2396:113;;;2495:1;2490:3;2486:11;2480:18;2476:1;2471:3;2467:11;2460:39;2432:2;2429:1;2425:10;2420:15;;2396:113;;;2527:6;2524:1;2521:13;2518:101;;;2607:1;2598:6;2593:3;2589:16;2582:27;2518:101;2367:258;2318:307;;;:::o;2631:102::-;2672:6;2723:2;2719:7;2714:2;2707:5;2703:14;2699:28;2689:38;;2631:102;;;:::o;2739:364::-;2827:3;2855:39;2888:5;2855:39;:::i;:::-;2910:71;2974:6;2969:3;2910:71;:::i;:::-;2903:78;;2990:52;3035:6;3030:3;3023:4;3016:5;3012:16;2990:52;:::i;:::-;3067:29;3089:6;3067:29;:::i;:::-;3062:3;3058:39;3051:46;;2831:272;2739:364;;;;:::o;3109:313::-;3222:4;3260:2;3249:9;3245:18;3237:26;;3309:9;3303:4;3299:20;3295:1;3284:9;3280:17;3273:47;3337:78;3410:4;3401:6;3337:78;:::i;:::-;3329:86;;3109:313;;;;:::o;3428:60::-;3456:3;3477:5;3470:12;;3428:60;;;:::o;3494:142::-;3544:9;3577:53;3595:34;3604:24;3622:5;3604:24;:::i;:::-;3595:34;:::i;:::-;3577:53;:::i;:::-;3564:66;;3494:142;;;:::o;3642:126::-;3692:9;3725:37;3756:5;3725:37;:::i;:::-;3712:50;;3642:126;;;:::o;3774:144::-;3842:9;3875:37;3906:5;3875:37;:::i;:::-;3862:50;;3774:144;;;:::o;3924:167::-;4029:55;4078:5;4029:55;:::i;:::-;4024:3;4017:68;3924:167;;:::o;4097:258::-;4208:4;4246:2;4235:9;4231:18;4223:26;;4259:89;4345:1;4334:9;4330:17;4321:6;4259:89;:::i;:::-;4097:258;;;;:::o;4361:122::-;4434:24;4452:5;4434:24;:::i;:::-;4427:5;4424:35;4414:63;;4473:1;4470;4463:12;4414:63;4361:122;:::o;4489:139::-;4535:5;4573:6;4560:20;4551:29;;4589:33;4616:5;4589:33;:::i;:::-;4489:139;;;;:::o;4634:474::-;4702:6;4710;4759:2;4747:9;4738:7;4734:23;4730:32;4727:119;;;4765:79;;:::i;:::-;4727:119;4885:1;4910:53;4955:7;4946:6;4935:9;4931:22;4910:53;:::i;:::-;4900:63;;4856:117;5012:2;5038:53;5083:7;5074:6;5063:9;5059:22;5038:53;:::i;:::-;5028:63;;4983:118;4634:474;;;;;:::o;5114:116::-;5184:21;5199:5;5184:21;:::i;:::-;5177:5;5174:32;5164:60;;5220:1;5217;5210:12;5164:60;5114:116;:::o;5236:133::-;5279:5;5317:6;5304:20;5295:29;;5333:30;5357:5;5333:30;:::i;:::-;5236:133;;;;:::o;5375:323::-;5431:6;5480:2;5468:9;5459:7;5455:23;5451:32;5448:119;;;5486:79;;:::i;:::-;5448:119;5606:1;5631:50;5673:7;5664:6;5653:9;5649:22;5631:50;:::i;:::-;5621:60;;5577:114;5375:323;;;;:::o;5704:619::-;5781:6;5789;5797;5846:2;5834:9;5825:7;5821:23;5817:32;5814:119;;;5852:79;;:::i;:::-;5814:119;5972:1;5997:53;6042:7;6033:6;6022:9;6018:22;5997:53;:::i;:::-;5987:63;;5943:117;6099:2;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6070:118;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;5704:619;;;;;:::o;6329:329::-;6388:6;6437:2;6425:9;6416:7;6412:23;6408:32;6405:119;;;6443:79;;:::i;:::-;6405:119;6563:1;6588:53;6633:7;6624:6;6613:9;6609:22;6588:53;:::i;:::-;6578:63;;6534:117;6329:329;;;;:::o;6664:86::-;6699:7;6739:4;6732:5;6728:16;6717:27;;6664:86;;;:::o;6756:112::-;6839:22;6855:5;6839:22;:::i;:::-;6834:3;6827:35;6756:112;;:::o;6874:214::-;6963:4;7001:2;6990:9;6986:18;6978:26;;7014:67;7078:1;7067:9;7063:17;7054:6;7014:67;:::i;:::-;6874:214;;;;:::o;7094:468::-;7159:6;7167;7216:2;7204:9;7195:7;7191:23;7187:32;7184:119;;;7222:79;;:::i;:::-;7184:119;7342:1;7367:53;7412:7;7403:6;7392:9;7388:22;7367:53;:::i;:::-;7357:63;;7313:117;7469:2;7495:50;7537:7;7528:6;7517:9;7513:22;7495:50;:::i;:::-;7485:60;;7440:115;7094:468;;;;;:::o;7568:104::-;7613:7;7642:24;7660:5;7642:24;:::i;:::-;7631:35;;7568:104;;;:::o;7678:138::-;7759:32;7785:5;7759:32;:::i;:::-;7752:5;7749:43;7739:71;;7806:1;7803;7796:12;7739:71;7678:138;:::o;7822:155::-;7876:5;7914:6;7901:20;7892:29;;7930:41;7965:5;7930:41;:::i;:::-;7822:155;;;;:::o;7983:345::-;8050:6;8099:2;8087:9;8078:7;8074:23;8070:32;8067:119;;;8105:79;;:::i;:::-;8067:119;8225:1;8250:61;8303:7;8294:6;8283:9;8279:22;8250:61;:::i;:::-;8240:71;;8196:125;7983:345;;;;:::o;8334:468::-;8399:6;8407;8456:2;8444:9;8435:7;8431:23;8427:32;8424:119;;;8462:79;;:::i;:::-;8424:119;8582:1;8607:53;8652:7;8643:6;8632:9;8628:22;8607:53;:::i;:::-;8597:63;;8553:117;8709:2;8735:50;8777:7;8768:6;8757:9;8753:22;8735:50;:::i;:::-;8725:60;;8680:115;8334:468;;;;;:::o;8808:118::-;8895:24;8913:5;8895:24;:::i;:::-;8890:3;8883:37;8808:118;;:::o;8932:222::-;9025:4;9063:2;9052:9;9048:18;9040:26;;9076:71;9144:1;9133:9;9129:17;9120:6;9076:71;:::i;:::-;8932:222;;;;:::o;9160:765::-;9246:6;9254;9262;9270;9319:3;9307:9;9298:7;9294:23;9290:33;9287:120;;;9326:79;;:::i;:::-;9287:120;9446:1;9471:53;9516:7;9507:6;9496:9;9492:22;9471:53;:::i;:::-;9461:63;;9417:117;9573:2;9599:53;9644:7;9635:6;9624:9;9620:22;9599:53;:::i;:::-;9589:63;;9544:118;9701:2;9727:53;9772:7;9763:6;9752:9;9748:22;9727:53;:::i;:::-;9717:63;;9672:118;9829:2;9855:53;9900:7;9891:6;9880:9;9876:22;9855:53;:::i;:::-;9845:63;;9800:118;9160:765;;;;;;;:::o;9931:474::-;9999:6;10007;10056:2;10044:9;10035:7;10031:23;10027:32;10024:119;;;10062:79;;:::i;:::-;10024:119;10182:1;10207:53;10252:7;10243:6;10232:9;10228:22;10207:53;:::i;:::-;10197:63;;10153:117;10309:2;10335:53;10380:7;10371:6;10360:9;10356:22;10335:53;:::i;:::-;10325:63;;10280:118;9931:474;;;;;:::o;10411:142::-;10514:32;10540:5;10514:32;:::i;:::-;10509:3;10502:45;10411:142;;:::o;10559:254::-;10668:4;10706:2;10695:9;10691:18;10683:26;;10719:87;10803:1;10792:9;10788:17;10779:6;10719:87;:::i;:::-;10559:254;;;;:::o;10819:180::-;10867:77;10864:1;10857:88;10964:4;10961:1;10954:15;10988:4;10985:1;10978:15;11005:320;11049:6;11086:1;11080:4;11076:12;11066:22;;11133:1;11127:4;11123:12;11154:18;11144:81;;11210:4;11202:6;11198:17;11188:27;;11144:81;11272:2;11264:6;11261:14;11241:18;11238:38;11235:84;;;11291:18;;:::i;:::-;11235:84;11056:269;11005:320;;;:::o;11331:182::-;11471:34;11467:1;11459:6;11455:14;11448:58;11331:182;:::o;11519:366::-;11661:3;11682:67;11746:2;11741:3;11682:67;:::i;:::-;11675:74;;11758:93;11847:3;11758:93;:::i;:::-;11876:2;11871:3;11867:12;11860:19;;11519:366;;;:::o;11891:419::-;12057:4;12095:2;12084:9;12080:18;12072:26;;12144:9;12138:4;12134:20;12130:1;12119:9;12115:17;12108:47;12172:131;12298:4;12172:131;:::i;:::-;12164:139;;11891:419;;;:::o;12316:165::-;12456:17;12452:1;12444:6;12440:14;12433:41;12316:165;:::o;12487:366::-;12629:3;12650:67;12714:2;12709:3;12650:67;:::i;:::-;12643:74;;12726:93;12815:3;12726:93;:::i;:::-;12844:2;12839:3;12835:12;12828:19;;12487:366;;;:::o;12859:419::-;13025:4;13063:2;13052:9;13048:18;13040:26;;13112:9;13106:4;13102:20;13098:1;13087:9;13083:17;13076:47;13140:131;13266:4;13140:131;:::i;:::-;13132:139;;12859:419;;;:::o;13284:220::-;13424:34;13420:1;13412:6;13408:14;13401:58;13493:3;13488:2;13480:6;13476:15;13469:28;13284:220;:::o;13510:366::-;13652:3;13673:67;13737:2;13732:3;13673:67;:::i;:::-;13666:74;;13749:93;13838:3;13749:93;:::i;:::-;13867:2;13862:3;13858:12;13851:19;;13510:366;;;:::o;13882:419::-;14048:4;14086:2;14075:9;14071:18;14063:26;;14135:9;14129:4;14125:20;14121:1;14110:9;14106:17;14099:47;14163:131;14289:4;14163:131;:::i;:::-;14155:139;;13882:419;;;:::o;14307:236::-;14447:34;14443:1;14435:6;14431:14;14424:58;14516:19;14511:2;14503:6;14499:15;14492:44;14307:236;:::o;14549:366::-;14691:3;14712:67;14776:2;14771:3;14712:67;:::i;:::-;14705:74;;14788:93;14877:3;14788:93;:::i;:::-;14906:2;14901:3;14897:12;14890:19;;14549:366;;;:::o;14921:419::-;15087:4;15125:2;15114:9;15110:18;15102:26;;15174:9;15168:4;15164:20;15160:1;15149:9;15145:17;15138:47;15202:131;15328:4;15202:131;:::i;:::-;15194:139;;14921:419;;;:::o;15346:177::-;15486:29;15482:1;15474:6;15470:14;15463:53;15346:177;:::o;15529:366::-;15671:3;15692:67;15756:2;15751:3;15692:67;:::i;:::-;15685:74;;15768:93;15857:3;15768:93;:::i;:::-;15886:2;15881:3;15877:12;15870:19;;15529:366;;;:::o;15901:419::-;16067:4;16105:2;16094:9;16090:18;16082:26;;16154:9;16148:4;16144:20;16140:1;16129:9;16125:17;16118:47;16182:131;16308:4;16182:131;:::i;:::-;16174:139;;15901:419;;;:::o;16326:170::-;16466:22;16462:1;16454:6;16450:14;16443:46;16326:170;:::o;16502:366::-;16644:3;16665:67;16729:2;16724:3;16665:67;:::i;:::-;16658:74;;16741:93;16830:3;16741:93;:::i;:::-;16859:2;16854:3;16850:12;16843:19;;16502:366;;;:::o;16874:419::-;17040:4;17078:2;17067:9;17063:18;17055:26;;17127:9;17121:4;17117:20;17113:1;17102:9;17098:17;17091:47;17155:131;17281:4;17155:131;:::i;:::-;17147:139;;16874:419;;;:::o;17299:238::-;17439:34;17435:1;17427:6;17423:14;17416:58;17508:21;17503:2;17495:6;17491:15;17484:46;17299:238;:::o;17543:366::-;17685:3;17706:67;17770:2;17765:3;17706:67;:::i;:::-;17699:74;;17782:93;17871:3;17782:93;:::i;:::-;17900:2;17895:3;17891:12;17884:19;;17543:366;;;:::o;17915:419::-;18081:4;18119:2;18108:9;18104:18;18096:26;;18168:9;18162:4;18158:20;18154:1;18143:9;18139:17;18132:47;18196:131;18322:4;18196:131;:::i;:::-;18188:139;;17915:419;;;:::o;18340:225::-;18480:34;18476:1;18468:6;18464:14;18457:58;18549:8;18544:2;18536:6;18532:15;18525:33;18340:225;:::o;18571:366::-;18713:3;18734:67;18798:2;18793:3;18734:67;:::i;:::-;18727:74;;18810:93;18899:3;18810:93;:::i;:::-;18928:2;18923:3;18919:12;18912:19;;18571:366;;;:::o;18943:419::-;19109:4;19147:2;19136:9;19132:18;19124:26;;19196:9;19190:4;19186:20;19182:1;19171:9;19167:17;19160:47;19224:131;19350:4;19224:131;:::i;:::-;19216:139;;18943:419;;;:::o;19368:332::-;19489:4;19527:2;19516:9;19512:18;19504:26;;19540:71;19608:1;19597:9;19593:17;19584:6;19540:71;:::i;:::-;19621:72;19689:2;19678:9;19674:18;19665:6;19621:72;:::i;:::-;19368:332;;;;;:::o;19706:137::-;19760:5;19791:6;19785:13;19776:22;;19807:30;19831:5;19807:30;:::i;:::-;19706:137;;;;:::o;19849:345::-;19916:6;19965:2;19953:9;19944:7;19940:23;19936:32;19933:119;;;19971:79;;:::i;:::-;19933:119;20091:1;20116:61;20169:7;20160:6;20149:9;20145:22;20116:61;:::i;:::-;20106:71;;20062:125;19849:345;;;;:::o;20200:162::-;20340:14;20336:1;20328:6;20324:14;20317:38;20200:162;:::o;20368:366::-;20510:3;20531:67;20595:2;20590:3;20531:67;:::i;:::-;20524:74;;20607:93;20696:3;20607:93;:::i;:::-;20725:2;20720:3;20716:12;20709:19;;20368:366;;;:::o;20740:419::-;20906:4;20944:2;20933:9;20929:18;20921:26;;20993:9;20987:4;20983:20;20979:1;20968:9;20964:17;20957:47;21021:131;21147:4;21021:131;:::i;:::-;21013:139;;20740:419;;;:::o;21165:225::-;21305:34;21301:1;21293:6;21289:14;21282:58;21374:8;21369:2;21361:6;21357:15;21350:33;21165:225;:::o;21396:366::-;21538:3;21559:67;21623:2;21618:3;21559:67;:::i;:::-;21552:74;;21635:93;21724:3;21635:93;:::i;:::-;21753:2;21748:3;21744:12;21737:19;;21396:366;;;:::o;21768:419::-;21934:4;21972:2;21961:9;21957:18;21949:26;;22021:9;22015:4;22011:20;22007:1;21996:9;21992:17;21985:47;22049:131;22175:4;22049:131;:::i;:::-;22041:139;;21768:419;;;:::o;22193:223::-;22333:34;22329:1;22321:6;22317:14;22310:58;22402:6;22397:2;22389:6;22385:15;22378:31;22193:223;:::o;22422:366::-;22564:3;22585:67;22649:2;22644:3;22585:67;:::i;:::-;22578:74;;22661:93;22750:3;22661:93;:::i;:::-;22779:2;22774:3;22770:12;22763:19;;22422:366;;;:::o;22794:419::-;22960:4;22998:2;22987:9;22983:18;22975:26;;23047:9;23041:4;23037:20;23033:1;23022:9;23018:17;23011:47;23075:131;23201:4;23075:131;:::i;:::-;23067:139;;22794:419;;;:::o;23219:221::-;23359:34;23355:1;23347:6;23343:14;23336:58;23428:4;23423:2;23415:6;23411:15;23404:29;23219:221;:::o;23446:366::-;23588:3;23609:67;23673:2;23668:3;23609:67;:::i;:::-;23602:74;;23685:93;23774:3;23685:93;:::i;:::-;23803:2;23798:3;23794:12;23787:19;;23446:366;;;:::o;23818:419::-;23984:4;24022:2;24011:9;24007:18;23999:26;;24071:9;24065:4;24061:20;24057:1;24046:9;24042:17;24035:47;24099:131;24225:4;24099:131;:::i;:::-;24091:139;;23818:419;;;:::o;24243:224::-;24383:34;24379:1;24371:6;24367:14;24360:58;24452:7;24447:2;24439:6;24435:15;24428:32;24243:224;:::o;24473:366::-;24615:3;24636:67;24700:2;24695:3;24636:67;:::i;:::-;24629:74;;24712:93;24801:3;24712:93;:::i;:::-;24830:2;24825:3;24821:12;24814:19;;24473:366;;;:::o;24845:419::-;25011:4;25049:2;25038:9;25034:18;25026:26;;25098:9;25092:4;25088:20;25084:1;25073:9;25069:17;25062:47;25126:131;25252:4;25126:131;:::i;:::-;25118:139;;24845:419;;;:::o;25270:222::-;25410:34;25406:1;25398:6;25394:14;25387:58;25479:5;25474:2;25466:6;25462:15;25455:30;25270:222;:::o;25498:366::-;25640:3;25661:67;25725:2;25720:3;25661:67;:::i;:::-;25654:74;;25737:93;25826:3;25737:93;:::i;:::-;25855:2;25850:3;25846:12;25839:19;;25498:366;;;:::o;25870:419::-;26036:4;26074:2;26063:9;26059:18;26051:26;;26123:9;26117:4;26113:20;26109:1;26098:9;26094:17;26087:47;26151:131;26277:4;26151:131;:::i;:::-;26143:139;;25870:419;;;:::o;26295:235::-;26435:34;26431:1;26423:6;26419:14;26412:58;26504:18;26499:2;26491:6;26487:15;26480:43;26295:235;:::o;26536:366::-;26678:3;26699:67;26763:2;26758:3;26699:67;:::i;:::-;26692:74;;26775:93;26864:3;26775:93;:::i;:::-;26893:2;26888:3;26884:12;26877:19;;26536:366;;;:::o;26908:419::-;27074:4;27112:2;27101:9;27097:18;27089:26;;27161:9;27155:4;27151:20;27147:1;27136:9;27132:17;27125:47;27189:131;27315:4;27189:131;:::i;:::-;27181:139;;26908:419;;;:::o;27333:180::-;27381:77;27378:1;27371:88;27478:4;27475:1;27468:15;27502:4;27499:1;27492:15;27519:191;27559:4;27579:20;27597:1;27579:20;:::i;:::-;27574:25;;27613:20;27631:1;27613:20;:::i;:::-;27608:25;;27652:1;27649;27646:8;27643:34;;;27657:18;;:::i;:::-;27643:34;27702:1;27699;27695:9;27687:17;;27519:191;;;;:::o;27716:305::-;27756:3;27775:20;27793:1;27775:20;:::i;:::-;27770:25;;27809:20;27827:1;27809:20;:::i;:::-;27804:25;;27963:1;27895:66;27891:74;27888:1;27885:81;27882:107;;;27969:18;;:::i;:::-;27882:107;28013:1;28010;28006:9;27999:16;;27716:305;;;;:::o;28027:177::-;28167:29;28163:1;28155:6;28151:14;28144:53;28027:177;:::o;28210:366::-;28352:3;28373:67;28437:2;28432:3;28373:67;:::i;:::-;28366:74;;28449:93;28538:3;28449:93;:::i;:::-;28567:2;28562:3;28558:12;28551:19;;28210:366;;;:::o;28582:419::-;28748:4;28786:2;28775:9;28771:18;28763:26;;28835:9;28829:4;28825:20;28821:1;28810:9;28806:17;28799:47;28863:131;28989:4;28863:131;:::i;:::-;28855:139;;28582:419;;;:::o;29007:348::-;29047:7;29070:20;29088:1;29070:20;:::i;:::-;29065:25;;29104:20;29122:1;29104:20;:::i;:::-;29099:25;;29292:1;29224:66;29220:74;29217:1;29214:81;29209:1;29202:9;29195:17;29191:105;29188:131;;;29299:18;;:::i;:::-;29188:131;29347:1;29344;29340:9;29329:20;;29007:348;;;;:::o;29361:180::-;29409:77;29406:1;29399:88;29506:4;29503:1;29496:15;29530:4;29527:1;29520:15;29547:185;29587:1;29604:20;29622:1;29604:20;:::i;:::-;29599:25;;29638:20;29656:1;29638:20;:::i;:::-;29633:25;;29677:1;29667:35;;29682:18;;:::i;:::-;29667:35;29724:1;29721;29717:9;29712:14;;29547:185;;;;:::o;29738:220::-;29878:34;29874:1;29866:6;29862:14;29855:58;29947:3;29942:2;29934:6;29930:15;29923:28;29738:220;:::o;29964:366::-;30106:3;30127:67;30191:2;30186:3;30127:67;:::i;:::-;30120:74;;30203:93;30292:3;30203:93;:::i;:::-;30321:2;30316:3;30312:12;30305:19;;29964:366;;;:::o;30336:419::-;30502:4;30540:2;30529:9;30525:18;30517:26;;30589:9;30583:4;30579:20;30575:1;30564:9;30560:17;30553:47;30617:131;30743:4;30617:131;:::i;:::-;30609:139;;30336:419;;;:::o;30761:442::-;30910:4;30948:2;30937:9;30933:18;30925:26;;30961:71;31029:1;31018:9;31014:17;31005:6;30961:71;:::i;:::-;31042:72;31110:2;31099:9;31095:18;31086:6;31042:72;:::i;:::-;31124;31192:2;31181:9;31177:18;31168:6;31124:72;:::i;:::-;30761:442;;;;;;:::o;31209:232::-;31349:34;31345:1;31337:6;31333:14;31326:58;31418:15;31413:2;31405:6;31401:15;31394:40;31209:232;:::o;31447:366::-;31589:3;31610:67;31674:2;31669:3;31610:67;:::i;:::-;31603:74;;31686:93;31775:3;31686:93;:::i;:::-;31804:2;31799:3;31795:12;31788:19;;31447:366;;;:::o;31819:419::-;31985:4;32023:2;32012:9;32008:18;32000:26;;32072:9;32066:4;32062:20;32058:1;32047:9;32043:17;32036:47;32100:131;32226:4;32100:131;:::i;:::-;32092:139;;31819:419;;;:::o;32244:180::-;32292:77;32289:1;32282:88;32389:4;32386:1;32379:15;32413:4;32410:1;32403:15;32430:180;32478:77;32475:1;32468:88;32575:4;32572:1;32565:15;32599:4;32596:1;32589:15;32616:143;32673:5;32704:6;32698:13;32689:22;;32720:33;32747:5;32720:33;:::i;:::-;32616:143;;;;:::o;32765:351::-;32835:6;32884:2;32872:9;32863:7;32859:23;32855:32;32852:119;;;32890:79;;:::i;:::-;32852:119;33010:1;33035:64;33091:7;33082:6;33071:9;33067:22;33035:64;:::i;:::-;33025:74;;32981:128;32765:351;;;;:::o;33122:85::-;33167:7;33196:5;33185:16;;33122:85;;;:::o;33213:158::-;33271:9;33304:61;33322:42;33331:32;33357:5;33331:32;:::i;:::-;33322:42;:::i;:::-;33304:61;:::i;:::-;33291:74;;33213:158;;;:::o;33377:147::-;33472:45;33511:5;33472:45;:::i;:::-;33467:3;33460:58;33377:147;;:::o;33530:114::-;33597:6;33631:5;33625:12;33615:22;;33530:114;;;:::o;33650:184::-;33749:11;33783:6;33778:3;33771:19;33823:4;33818:3;33814:14;33799:29;;33650:184;;;;:::o;33840:132::-;33907:4;33930:3;33922:11;;33960:4;33955:3;33951:14;33943:22;;33840:132;;;:::o;33978:108::-;34055:24;34073:5;34055:24;:::i;:::-;34050:3;34043:37;33978:108;;:::o;34092:179::-;34161:10;34182:46;34224:3;34216:6;34182:46;:::i;:::-;34260:4;34255:3;34251:14;34237:28;;34092:179;;;;:::o;34277:113::-;34347:4;34379;34374:3;34370:14;34362:22;;34277:113;;;:::o;34426:732::-;34545:3;34574:54;34622:5;34574:54;:::i;:::-;34644:86;34723:6;34718:3;34644:86;:::i;:::-;34637:93;;34754:56;34804:5;34754:56;:::i;:::-;34833:7;34864:1;34849:284;34874:6;34871:1;34868:13;34849:284;;;34950:6;34944:13;34977:63;35036:3;35021:13;34977:63;:::i;:::-;34970:70;;35063:60;35116:6;35063:60;:::i;:::-;35053:70;;34909:224;34896:1;34893;34889:9;34884:14;;34849:284;;;34853:14;35149:3;35142:10;;34550:608;;;34426:732;;;;:::o;35164:831::-;35427:4;35465:3;35454:9;35450:19;35442:27;;35479:71;35547:1;35536:9;35532:17;35523:6;35479:71;:::i;:::-;35560:80;35636:2;35625:9;35621:18;35612:6;35560:80;:::i;:::-;35687:9;35681:4;35677:20;35672:2;35661:9;35657:18;35650:48;35715:108;35818:4;35809:6;35715:108;:::i;:::-;35707:116;;35833:72;35901:2;35890:9;35886:18;35877:6;35833:72;:::i;:::-;35915:73;35983:3;35972:9;35968:19;35959:6;35915:73;:::i;:::-;35164:831;;;;;;;;:::o;36001:807::-;36250:4;36288:3;36277:9;36273:19;36265:27;;36302:71;36370:1;36359:9;36355:17;36346:6;36302:71;:::i;:::-;36383:72;36451:2;36440:9;36436:18;36427:6;36383:72;:::i;:::-;36465:80;36541:2;36530:9;36526:18;36517:6;36465:80;:::i;:::-;36555;36631:2;36620:9;36616:18;36607:6;36555:80;:::i;:::-;36645:73;36713:3;36702:9;36698:19;36689:6;36645:73;:::i;:::-;36728;36796:3;36785:9;36781:19;36772:6;36728:73;:::i;:::-;36001:807;;;;;;;;;:::o;36814:143::-;36871:5;36902:6;36896:13;36887:22;;36918:33;36945:5;36918:33;:::i;:::-;36814:143;;;;:::o;36963:663::-;37051:6;37059;37067;37116:2;37104:9;37095:7;37091:23;37087:32;37084:119;;;37122:79;;:::i;:::-;37084:119;37242:1;37267:64;37323:7;37314:6;37303:9;37299:22;37267:64;:::i;:::-;37257:74;;37213:128;37380:2;37406:64;37462:7;37453:6;37442:9;37438:22;37406:64;:::i;:::-;37396:74;;37351:129;37519:2;37545:64;37601:7;37592:6;37581:9;37577:22;37545:64;:::i;:::-;37535:74;;37490:129;36963:663;;;;;:::o;37632:225::-;37772:34;37768:1;37760:6;37756:14;37749:58;37841:8;37836:2;37828:6;37824:15;37817:33;37632:225;:::o;37863:366::-;38005:3;38026:67;38090:2;38085:3;38026:67;:::i;:::-;38019:74;;38102:93;38191:3;38102:93;:::i;:::-;38220:2;38215:3;38211:12;38204:19;;37863:366;;;:::o;38235:419::-;38401:4;38439:2;38428:9;38424:18;38416:26;;38488:9;38482:4;38478:20;38474:1;38463:9;38459:17;38452:47;38516:131;38642:4;38516:131;:::i;:::-;38508:139;;38235:419;;;:::o

Swarm Source

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