ETH Price: $3,410.44 (-1.00%)
Gas: 2 Gwei

Token

The Phoenix (PHOENIX)
 

Overview

Max Total Supply

1,000,000,000 PHOENIX

Holders

102

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
atomiz.eth
Balance
0 PHOENIX

Value
$0.00
0xa51652bd74c6e32bfcf48a20dbc4188ebb2f3a35
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PHOENIX

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-13
*/

pragma solidity 0.8.10;
pragma experimental ABIEncoderV2;

// SPDX-License-Identifier: MIT
// ORIGINAL PHOENIX CODE
// VISIT US http://thephoenix.vip/
// TELEGRAM https://t.me/ThePhoenixERC

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 PHOENIX 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 = "The Phoenix"; // token name
    string private _symbol = "PHOENIX"; // 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 = 0;
    uint256 public liquidityFeeOnBuying = 10;
    uint256 public marketWalletFeeOnBuying = 130;
    uint256 public burnFeeOnBuying = 10;

    // sell tax fee
    uint256 public reflectionFeeOnSelling = 0;
    uint256 public liquidityFeeOnSelling = 10;
    uint256 public marketWalletFeeOnSelling = 150;
    uint256 public burnFeeOnSelling = 20;

    // 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"}]

6080604052670de0b6b3a764000060095560095460001962000022919062000a7e565b60001962000031919062000ae5565b600a556040518060400160405280600b81526020017f5468652050686f656e6978000000000000000000000000000000000000000000815250600c90805190602001906200008192919062000995565b506040518060400160405280600781526020017f50484f454e495800000000000000000000000000000000000000000000000000815250600d9080519060200190620000cf92919062000995565b506009600e60006101000a81548160ff021916908360ff16021790555061dead601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066038d7ea4c6800060125566470de4df82000060135566470de4df8200006014556001601760006101000a81548160ff0219169083151502179055506001601760016101000a81548160ff0219169083151502179055506000601760026101000a81548160ff0219169083151502179055506001601760036101000a81548160ff0219169083151502179055506000601855600a6019556082601a55600a601b556000601c55600a601d556096601e556014601f55348015620001f157600080fd5b5060405162006c4a38038062006c4a833981810160405281019062000217919062000b8a565b620002376200022b620008a060201b60201c565b620008a860201b60201c565b600a54600160006200024e6200096c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000358919062000c01565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e6919062000c01565b6040518363ffffffff1660e01b81526004016200040592919062000c44565b6020604051808303816000875af115801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000c01565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620004e26200096c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620005a16200096c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620007546200096c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200082f6200096c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60095460405162000890919062000c82565b60405180910390a3505062000d04565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620009a39062000cce565b90600052602060002090601f016020900481019282620009c7576000855562000a13565b82601f10620009e257805160ff191683800117855562000a13565b8280016001018555821562000a13579182015b8281111562000a12578251825591602001919060010190620009f5565b5b50905062000a22919062000a26565b5090565b5b8082111562000a4157600081600090555060010162000a27565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a8b8262000a45565b915062000a988362000a45565b92508262000aab5762000aaa62000a4f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000af28262000a45565b915062000aff8362000a45565b92508282101562000b155762000b1462000ab6565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b528262000b25565b9050919050565b62000b648162000b45565b811462000b7057600080fd5b50565b60008151905062000b848162000b59565b92915050565b60006020828403121562000ba35762000ba262000b20565b5b600062000bb38482850162000b73565b91505092915050565b600062000bc98262000b25565b9050919050565b62000bdb8162000bbc565b811462000be757600080fd5b50565b60008151905062000bfb8162000bd0565b92915050565b60006020828403121562000c1a5762000c1962000b20565b5b600062000c2a8482850162000bea565b91505092915050565b62000c3e8162000bbc565b82525050565b600060408201905062000c5b600083018562000c33565b62000c6a602083018462000c33565b9392505050565b62000c7c8162000a45565b82525050565b600060208201905062000c99600083018462000c71565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ce757607f821691505b6020821081141562000cfe5762000cfd62000c9f565b5b50919050565b615f368062000d146000396000f3fe6080604052600436106103785760003560e01c8063775a1f6c116101d1578063b81df74211610102578063dd7bd775116100a0578063f097ea1a1161006f578063f097ea1a14610d35578063f242ab4114610d5e578063f2fde38b14610d89578063fe1a711114610db25761037f565b8063dd7bd77514610c8d578063e4440a8614610cb6578063e6c84dc614610ce1578063ea5b9e8514610d0c5761037f565b8063cb5c474c116100dc578063cb5c474c14610bd1578063ce261d1014610bfc578063dd07382914610c25578063dd62ed3e14610c505761037f565b8063b81df74214610b54578063bded89fb14610b7f578063c624b42314610ba85761037f565b806399b770321161016f578063a457c2d711610149578063a457c2d714610a88578063a9059cbb14610ac5578063afee32a914610b02578063b0bc2a2d14610b2b5761037f565b806399b7703214610a0b5780639d3feb9a14610a345780639d854b6314610a5f5761037f565b806389f9a1d3116101ab57806389f9a1d31461095f5780638da5cb5b1461098a5780639285c1ca146109b557806395d89b41146109e05761037f565b8063775a1f6c146108ce57806388f82020146108f957806389f5649e146109365761037f565b806339509351116102ab5780635342acb41161024957806370a082311161022357806370a082311461081257806370d5ae051461084f578063715018a61461087a5780637584817c146108915761037f565b80635342acb4146107815780635e9416fc146107be5780636d268267146107e75761037f565b80634549b039116102855780634549b039146106c55780634a74bb021461070257806350a64fcd1461072d5780635249a820146107585761037f565b806339509351146106345780633aaa36e6146106715780633bd5d1731461069c5761037f565b806318160ddd116103185780632d838119116102f25780632d83811914610578578063313ce567146105b55780633326d7f2146105e057806338d6f8471461060b5761037f565b806318160ddd146104e55780631884f1e61461051057806323b872dd1461053b5761037f565b80630758d924116103545780630758d92414610417578063095ea7b3146104425780630f3a325f1461047f578063172fdc23146104bc5761037f565b8062281dc1146103845780629cb0e9146103af57806306fdde03146103ec5761037f565b3661037f57005b600080fd5b34801561039057600080fd5b50610399610ddd565b6040516103a69190614a17565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190614a95565b610de3565b6040516103e39190614add565b60405180910390f35b3480156103f857600080fd5b50610401610e39565b60405161040e9190614b91565b60405180910390f35b34801561042357600080fd5b5061042c610ecb565b6040516104399190614c12565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190614c59565b610ef1565b6040516104769190614add565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190614a95565b610f0f565b6040516104b39190614add565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de9190614cc5565b610f2f565b005b3480156104f157600080fd5b506104fa610fff565b6040516105079190614a17565b60405180910390f35b34801561051c57600080fd5b50610525611009565b6040516105329190614a17565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190614cf2565b61100f565b60405161056f9190614add565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190614d45565b611252565b6040516105ac9190614a17565b60405180910390f35b3480156105c157600080fd5b506105ca6112c0565b6040516105d79190614d8e565b60405180910390f35b3480156105ec57600080fd5b506105f56112d7565b6040516106029190614a17565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190614a95565b6112dd565b005b34801561064057600080fd5b5061065b60048036038101906106569190614c59565b6114d2565b6040516106689190614add565b60405180910390f35b34801561067d57600080fd5b50610686611585565b6040516106939190614add565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190614d45565b611598565b005b3480156106d157600080fd5b506106ec60048036038101906106e79190614da9565b61171f565b6040516106f99190614a17565b60405180910390f35b34801561070e57600080fd5b506107176117f4565b6040516107249190614add565b60405180910390f35b34801561073957600080fd5b50610742611807565b60405161074f9190614a17565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614e27565b611811565b005b34801561078d57600080fd5b506107a860048036038101906107a39190614a95565b6118d1565b6040516107b59190614add565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190614e54565b611927565b005b3480156107f357600080fd5b506107fc6119fe565b6040516108099190614a17565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190614a95565b611a04565b6040516108469190614a17565b60405180910390f35b34801561085b57600080fd5b50610864611aef565b6040516108719190614ea3565b60405180910390f35b34801561088657600080fd5b5061088f611b15565b005b34801561089d57600080fd5b506108b860048036038101906108b39190614a95565b611b9d565b6040516108c59190614add565b60405180910390f35b3480156108da57600080fd5b506108e3611bf3565b6040516108f09190614a17565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b9190614a95565b611bf9565b60405161092d9190614add565b60405180910390f35b34801561094257600080fd5b5061095d60048036038101906109589190614e54565b611c4f565b005b34801561096b57600080fd5b50610974611d26565b6040516109819190614a17565b60405180910390f35b34801561099657600080fd5b5061099f611d2c565b6040516109ac9190614ea3565b60405180910390f35b3480156109c157600080fd5b506109ca611d55565b6040516109d79190614add565b60405180910390f35b3480156109ec57600080fd5b506109f5611d68565b604051610a029190614b91565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190614d45565b611dfa565b005b348015610a4057600080fd5b50610a49611e80565b604051610a569190614a17565b60405180910390f35b348015610a6b57600080fd5b50610a866004803603810190610a819190614ebe565b611e86565b005b348015610a9457600080fd5b50610aaf6004803603810190610aaa9190614c59565b611f24565b604051610abc9190614add565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae79190614c59565b611ff1565b604051610af99190614add565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190614ebe565b61200f565b005b348015610b3757600080fd5b50610b526004803603810190610b4d9190614cc5565b6120ad565b005b348015610b6057600080fd5b50610b69612146565b604051610b769190614a17565b60405180910390f35b348015610b8b57600080fd5b50610ba66004803603810190610ba19190614d45565b61214c565b005b348015610bb457600080fd5b50610bcf6004803603810190610bca9190614cc5565b6121d2565b005b348015610bdd57600080fd5b50610be66122a2565b604051610bf39190614a17565b60405180910390f35b348015610c0857600080fd5b50610c236004803603810190610c1e9190614c59565b6122a8565b005b348015610c3157600080fd5b50610c3a6123ae565b604051610c479190614a17565b60405180910390f35b348015610c5c57600080fd5b50610c776004803603810190610c729190614f25565b6123b4565b604051610c849190614a17565b60405180910390f35b348015610c9957600080fd5b50610cb46004803603810190610caf9190614a95565b61243b565b005b348015610cc257600080fd5b50610ccb61259e565b604051610cd89190614f74565b60405180910390f35b348015610ced57600080fd5b50610cf66125c4565b604051610d039190614a17565b60405180910390f35b348015610d1857600080fd5b50610d336004803603810190610d2e9190614e54565b6125ca565b005b348015610d4157600080fd5b50610d5c6004803603810190610d579190614d45565b6126a1565b005b348015610d6a57600080fd5b50610d73612727565b604051610d809190614ea3565b60405180910390f35b348015610d9557600080fd5b50610db06004803603810190610dab9190614a95565b61274d565b005b348015610dbe57600080fd5b50610dc7612845565b604051610dd49190614add565b60405180910390f35b601c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600c8054610e4890614fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7490614fbe565b8015610ec15780601f10610e9657610100808354040283529160200191610ec1565b820191906000526020600020905b815481529060010190602001808311610ea457829003601f168201915b5050505050905090565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f05610efe612858565b8484612860565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b610f37612858565b73ffffffffffffffffffffffffffffffffffffffff16610f55611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa29061503c565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051610ff49190614add565b60405180910390a150565b6000600954905090565b60125481565b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561109e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611095906150a8565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906150a8565b60405180910390fd5b601760029054906101000a900460ff161561117b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111729061513a565b60405180910390fd5b611186848484612a2b565b61124784611192612858565b61124285604051806060016040528060288152602001615ed960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111f8612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c339092919063ffffffff16565b612860565b600190509392505050565b6000600a54821115611299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611290906151cc565b60405180910390fd5b60006112a3612c97565b90506112b88184612cc290919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b60195481565b6112e5612858565b73ffffffffffffffffffffffffffffffffffffffff16611303611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113509061503c565b60405180910390fd5b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190615238565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906152a4565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061157b6114df612858565b8461157685600360006114f0612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b612860565b6001905092915050565b601760019054906101000a900460ff1681565b60006115a2612858565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890615336565b60405180910390fd5b600061164d61163e612c97565b84612d6a90919063ffffffff16565b90506116a181600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116f981600a54612de590919063ffffffff16565b600a8190555061171483600b54612d0c90919063ffffffff16565b600b81905550505050565b6000600954831115611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d906153c8565b60405180910390fd5b81611792576000611787611778612c97565b85612d6a90919063ffffffff16565b9050809150506117ee565b60006117ae61179f612c97565b85612d6a90919063ffffffff16565b905060006117e66117d76117c0612c97565b6117c988612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b905080925050505b92915050565b601760009054906101000a900460ff1681565b6000600b54905090565b611819612858565b73ffffffffffffffffffffffffffffffffffffffff16611837611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461188d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118849061503c565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61192f612858565b73ffffffffffffffffffffffffffffffffffffffff1661194d611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a9061503c565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a9f57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611aea565b611ae7600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611252565b90505b919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b1d612858565b73ffffffffffffffffffffffffffffffffffffffff16611b3b611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b889061503c565b60405180910390fd5b611b9b6000612ea2565b565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601e5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611c57612858565b73ffffffffffffffffffffffffffffffffffffffff16611c75611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061503c565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601760029054906101000a900460ff1681565b6060600d8054611d7790614fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611da390614fbe565b8015611df05780601f10611dc557610100808354040283529160200191611df0565b820191906000526020600020905b815481529060010190602001808311611dd357829003601f168201915b5050505050905090565b611e02612858565b73ffffffffffffffffffffffffffffffffffffffff16611e20611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d9061503c565b60405180910390fd5b8060148190555050565b601f5481565b611e8e612858565b73ffffffffffffffffffffffffffffffffffffffff16611eac611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef99061503c565b60405180910390fd5b83601c8190555082601d8190555081601e8190555080601f8190555050505050565b6000611fe7611f31612858565b84611fe285604051806060016040528060258152602001615eb46025913960036000611f5b612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c339092919063ffffffff16565b612860565b6001905092915050565b6000612005611ffe612858565b8484612a2b565b6001905092915050565b612017612858565b73ffffffffffffffffffffffffffffffffffffffff16612035611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461208b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120829061503c565b60405180910390fd5b836018819055508260198190555081601a8190555080601b8190555050505050565b6120b5612858565b73ffffffffffffffffffffffffffffffffffffffff166120d3611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061503c565b60405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b60145481565b612154612858565b73ffffffffffffffffffffffffffffffffffffffff16612172611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf9061503c565b60405180910390fd5b8060138190555050565b6121da612858565b73ffffffffffffffffffffffffffffffffffffffff166121f8611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461224e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122459061503c565b60405180910390fd5b80601760026101000a81548160ff0219169083151502179055507f4de571fd3e7dc38a16cdbb0d7ff4c4d80a6d06fbd12339f1fa56851761c46964816040516122979190614add565b60405180910390a150565b601a5481565b6122b0612858565b73ffffffffffffffffffffffffffffffffffffffff166122ce611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b9061503c565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612348611d2c565b836040518363ffffffff1660e01b81526004016123669291906153e8565b6020604051808303816000875af1158015612385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a99190615426565b505050565b60185481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612443612858565b73ffffffffffffffffffffffffffffffffffffffff16612461611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146124b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ae9061503c565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a9061549f565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6125d2612858565b73ffffffffffffffffffffffffffffffffffffffff166125f0611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d9061503c565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6126a9612858565b73ffffffffffffffffffffffffffffffffffffffff166126c7611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461271d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127149061503c565b60405180910390fd5b8060128190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612755612858565b73ffffffffffffffffffffffffffffffffffffffff16612773611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c09061503c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090615531565b60405180910390fd5b61284281612ea2565b50565b601760039054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c7906155c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293790615655565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a1e9190614a17565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a92906156e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290615779565b60405180910390fd5b60008111612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b459061580b565b60405180910390fd5b612b588383612f66565b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bff5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612c175750601760019054906101000a900460ff16155b15612c2157600090505b612c2d84848484613278565b50505050565b6000838311158290612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c729190614b91565b60405180910390fd5b5060008385612c8a919061585a565b9050809150509392505050565b6000806000612ca4613796565b91509150612cbb8183612cc290919063ffffffff16565b9250505090565b6000612d0483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613811565b905092915050565b6000808284612d1b919061588e565b905083811015612d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5790615930565b60405180910390fd5b8091505092915050565b600080831415612d7d5760009050612ddf565b60008284612d8b9190615950565b9050828482612d9a91906159d9565b14612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd190615a7c565b60405180910390fd5b809150505b92915050565b6000612e2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c33565b905092915050565b600080612e976103e8612e89612e7a612e55602354602254612d0c90919063ffffffff16565b612e6c602154602054612d0c90919063ffffffff16565b612d0c90919063ffffffff16565b86612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f7130611a04565b905060006012548210159050808015612fd85750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612ff05750601760009054906101000a900460ff165b801561308157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561307f5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b155b15613272576130b330600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612860565b60006130cb6002602454612cc290919063ffffffff16565b905060006130e482602454612de590919063ffffffff16565b905060006130fb8286612de590919063ffffffff16565b9050613129600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613874565b60004790506000613155836131478785612d6a90919063ffffffff16565b612cc290919063ffffffff16565b9050600061316c8284612de590919063ffffffff16565b905060008111156131e157601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156131df573d6000803e3d6000fd5b505b600082111561325b5761321f600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613218611d2c565b8785613a5a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186838760405161325293929190615a9c565b60405180910390a15b600060248190555060006025819055505050505050505b50505050565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fc906150a8565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613389906150a8565b60405180910390fd5b601760029054906101000a900460ff16156133e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d99061513a565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661347957601454821115613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f90615b45565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156134d35750805b156134e5576134e0613afe565b61355b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561353f5750805b156135515761354c613b24565b61355a565b613559613b4a565b5b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135fe5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136135761360e848484613b6c565b613790565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136b65750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136cb576136c6848484613dbb565b61378f565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561376d5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137825761377d848484613fd8565b61378e565b61378d8484846141f8565b5b5b5b50505050565b6000806000600a549050600060095490506137bc60165483612de590919063ffffffff16565b91506137d360155482612de590919063ffffffff16565b90506137ec600954600a54612cc290919063ffffffff16565b82101561380457600a5460095493509350505061380d565b81819350935050505b9091565b60008083118290613858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384f9190614b91565b60405180910390fd5b506000838561386791906159d9565b9050809150509392505050565b60008290506000600267ffffffffffffffff81111561389657613895615b65565b5b6040519080825280602002602001820160405280156138c45781602001602082028036833780820191505090505b50905030816000815181106138dc576138db615b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139859190615bd8565b8160018151811061399957613998615b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663791ac947846000843061012c42613a02919061588e565b6040518663ffffffff1660e01b8152600401613a22959493929190615cfe565b600060405180830381600087803b158015613a3c57600080fd5b505af1158015613a50573d6000803e3d6000fd5b5050505050505050565b60008490508073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330866000808a61012c42613a90919061588e565b6040518863ffffffff1660e01b8152600401613ab196959493929190615d58565b60606040518083038185885af1158015613acf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613af49190615dce565b5050505050505050565b601854602081905550601954602181905550601a54602281905550601b54602381905550565b601c54602081905550601d54602181905550601e54602281905550601f54602381905550565b6000602081905550600060218190555060006022819055506000602381905550565b6000613b76612c97565b90506000613b95613b8684612e2f565b84612de590919063ffffffff16565b90506000613bac8385612d6a90919063ffffffff16565b90506000613bdd613bce85613bc088612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b9050613be9868461442c565b613c3b85600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9385601554612de590919063ffffffff16565b601581905550613ceb81600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d398786866144f7565b613d448786866147cd565b613d4d85614978565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613daa9190614a17565b60405180910390a350505050505050565b6000613dc5612c97565b90506000613de4613dd584612e2f565b84612de590919063ffffffff16565b90506000613dfb8385612d6a90919063ffffffff16565b9050613e07858361442c565b613e5981600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eee82600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4684601554612d0c90919063ffffffff16565b601581905550613f578685856144f7565b613f628685856147cd565b613f6b84614978565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613fc89190614a17565b60405180910390a3505050505050565b6000613fe2612c97565b90506000614001613ff284612e2f565b84612de590919063ffffffff16565b905061400d848261442c565b61405f83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b783601554612de590919063ffffffff16565b60158190555061410f81600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416783601554612d0c90919063ffffffff16565b6015819055506141788584846144f7565b6141838584846147cd565b61418c83614978565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516141e99190614a17565b60405180910390a35050505050565b6000614202612c97565b9050600061422161421284612e2f565b84612de590919063ffffffff16565b905060006142388385612d6a90919063ffffffff16565b9050600061426961425a8561424c88612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b9050614275868461442c565b6142c782600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435c81600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143aa8786866144f7565b6143b58786866147cd565b6143be85614978565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161441b9190614a17565b60405180910390a350505050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166144f357601760039054906101000a900460ff16156144f2576013546144b0826144a285611a04565b612d0c90919063ffffffff16565b11156144f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144e890615e93565b60405180910390fd5b5b5b5050565b60006145366103e8614528614519602254602154612d0c90919063ffffffff16565b86612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905060008111156147c75761457e61456d6103e861455f60215487612d6a90919063ffffffff16565b612cc290919063ffffffff16565b602454612d0c90919063ffffffff16565b6024819055506145c16145b06103e86145a260225487612d6a90919063ffffffff16565b612cc290919063ffffffff16565b602554612d0c90919063ffffffff16565b60258190555060006145dc8383612d6a90919063ffffffff16565b9050600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146ca5761468282600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614760565b61471c81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516147bd9190614a17565b60405180910390a3505b50505050565b60006147f86103e86147ea60235486612d6a90919063ffffffff16565b612cc290919063ffffffff16565b9050600061480f8383612d6a90919063ffffffff16565b90506148858160016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b60016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516149699190614a17565b60405180910390a35050505050565b60006149a36103e861499560205485612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905060006149c16149b2612c97565b83612d6a90919063ffffffff16565b90506149d881600a54612de590919063ffffffff16565b600a819055506149f382600b54612d0c90919063ffffffff16565b600b81905550505050565b6000819050919050565b614a11816149fe565b82525050565b6000602082019050614a2c6000830184614a08565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a6282614a37565b9050919050565b614a7281614a57565b8114614a7d57600080fd5b50565b600081359050614a8f81614a69565b92915050565b600060208284031215614aab57614aaa614a32565b5b6000614ab984828501614a80565b91505092915050565b60008115159050919050565b614ad781614ac2565b82525050565b6000602082019050614af26000830184614ace565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614b32578082015181840152602081019050614b17565b83811115614b41576000848401525b50505050565b6000601f19601f8301169050919050565b6000614b6382614af8565b614b6d8185614b03565b9350614b7d818560208601614b14565b614b8681614b47565b840191505092915050565b60006020820190508181036000830152614bab8184614b58565b905092915050565b6000819050919050565b6000614bd8614bd3614bce84614a37565b614bb3565b614a37565b9050919050565b6000614bea82614bbd565b9050919050565b6000614bfc82614bdf565b9050919050565b614c0c81614bf1565b82525050565b6000602082019050614c276000830184614c03565b92915050565b614c36816149fe565b8114614c4157600080fd5b50565b600081359050614c5381614c2d565b92915050565b60008060408385031215614c7057614c6f614a32565b5b6000614c7e85828601614a80565b9250506020614c8f85828601614c44565b9150509250929050565b614ca281614ac2565b8114614cad57600080fd5b50565b600081359050614cbf81614c99565b92915050565b600060208284031215614cdb57614cda614a32565b5b6000614ce984828501614cb0565b91505092915050565b600080600060608486031215614d0b57614d0a614a32565b5b6000614d1986828701614a80565b9350506020614d2a86828701614a80565b9250506040614d3b86828701614c44565b9150509250925092565b600060208284031215614d5b57614d5a614a32565b5b6000614d6984828501614c44565b91505092915050565b600060ff82169050919050565b614d8881614d72565b82525050565b6000602082019050614da36000830184614d7f565b92915050565b60008060408385031215614dc057614dbf614a32565b5b6000614dce85828601614c44565b9250506020614ddf85828601614cb0565b9150509250929050565b6000614df482614a37565b9050919050565b614e0481614de9565b8114614e0f57600080fd5b50565b600081359050614e2181614dfb565b92915050565b600060208284031215614e3d57614e3c614a32565b5b6000614e4b84828501614e12565b91505092915050565b60008060408385031215614e6b57614e6a614a32565b5b6000614e7985828601614a80565b9250506020614e8a85828601614cb0565b9150509250929050565b614e9d81614a57565b82525050565b6000602082019050614eb86000830184614e94565b92915050565b60008060008060808587031215614ed857614ed7614a32565b5b6000614ee687828801614c44565b9450506020614ef787828801614c44565b9350506040614f0887828801614c44565b9250506060614f1987828801614c44565b91505092959194509250565b60008060408385031215614f3c57614f3b614a32565b5b6000614f4a85828601614a80565b9250506020614f5b85828601614a80565b9150509250929050565b614f6e81614de9565b82525050565b6000602082019050614f896000830184614f65565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614fd657607f821691505b60208210811415614fea57614fe9614f8f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615026602083614b03565b915061503182614ff0565b602082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000615092600f83614b03565b915061509d8261505c565b602082019050919050565b600060208201905081810360008301526150c181615085565b9050919050565b7f54726164696e67207368696674656420666f7220626f742064656c6574696f6e60008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000615124602183614b03565b915061512f826150c8565b604082019050919050565b6000602082019050818103600083015261515381615117565b9050919050565b7f546f6b656e3a20416d6f756e74206d757374206265206c657373207468616e2060008201527f746f74616c207265666c656374696f6e73000000000000000000000000000000602082015250565b60006151b6603183614b03565b91506151c18261515a565b604082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b7f57652063616e206e6f7420626c61636b6c69737420726f757465720000000000600082015250565b6000615222601b83614b03565b915061522d826151ec565b602082019050919050565b6000602082019050818103600083015261525181615215565b9050919050565b7f536e6970657220616c7265616479206578697374000000000000000000000000600082015250565b600061528e601483614b03565b915061529982615258565b602082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f546f6b656e3a204578636c75646564206164647265737365732063616e6e6f7460008201527f2063616c6c20746869732066756e6374696f6e00000000000000000000000000602082015250565b6000615320603383614b03565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b7f42455032303a20416d6f756e74206d757374206265206c657373207468616e2060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b60006153b2602683614b03565b91506153bd82615356565b604082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b60006040820190506153fd6000830185614e94565b61540a6020830184614a08565b9392505050565b60008151905061542081614c99565b92915050565b60006020828403121561543c5761543b614a32565b5b600061544a84828501615411565b91505092915050565b7f4e6f74206120736e697065720000000000000000000000000000000000000000600082015250565b6000615489600c83614b03565b915061549482615453565b602082019050919050565b600060208201905081810360008301526154b88161547c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061551b602683614b03565b9150615526826154bf565b604082019050919050565b6000602082019050818103600083015261554a8161550e565b9050919050565b7f546f6b656e3a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155ad602483614b03565b91506155b882615551565b604082019050919050565b600060208201905081810360008301526155dc816155a0565b9050919050565b7f546f6b656e3a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061563f602283614b03565b915061564a826155e3565b604082019050919050565b6000602082019050818103600083015261566e81615632565b9050919050565b7f546f6b656e3a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156d1602583614b03565b91506156dc82615675565b604082019050919050565b60006020820190508181036000830152615700816156c4565b9050919050565b7f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615763602383614b03565b915061576e82615707565b604082019050919050565b6000602082019050818103600083015261579281615756565b9050919050565b7f546f6b656e3a207472616e7366657220616d6f756e74206d757374206265206760008201527f726561746572207468616e207a65726f00000000000000000000000000000000602082015250565b60006157f5603083614b03565b915061580082615799565b604082019050919050565b60006020820190508181036000830152615824816157e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615865826149fe565b9150615870836149fe565b9250828210156158835761588261582b565b5b828203905092915050565b6000615899826149fe565b91506158a4836149fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156158d9576158d861582b565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061591a601b83614b03565b9150615925826158e4565b602082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b826149fe565b9150615966836149fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561599f5761599e61582b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159e4826149fe565b91506159ef836149fe565b9250826159ff576159fe6159aa565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a66602183614b03565b9150615a7182615a0a565b604082019050919050565b60006020820190508181036000830152615a9581615a59565b9050919050565b6000606082019050615ab16000830186614a08565b615abe6020830185614a08565b615acb6040830184614a08565b949350505050565b7f416d6f756e74206d7573742062652067726561746572207468616e206d696e6960008201527f6d756d20627579204c696d697400000000000000000000000000000000000000602082015250565b6000615b2f602d83614b03565b9150615b3a82615ad3565b604082019050919050565b60006020820190508181036000830152615b5e81615b22565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615bd281614a69565b92915050565b600060208284031215615bee57615bed614a32565b5b6000615bfc84828501615bc3565b91505092915050565b6000819050919050565b6000615c2a615c25615c2084615c05565b614bb3565b6149fe565b9050919050565b615c3a81615c0f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c7581614a57565b82525050565b6000615c878383615c6c565b60208301905092915050565b6000602082019050919050565b6000615cab82615c40565b615cb58185615c4b565b9350615cc083615c5c565b8060005b83811015615cf1578151615cd88882615c7b565b9750615ce383615c93565b925050600181019050615cc4565b5085935050505092915050565b600060a082019050615d136000830188614a08565b615d206020830187615c31565b8181036040830152615d328186615ca0565b9050615d416060830185614e94565b615d4e6080830184614a08565b9695505050505050565b600060c082019050615d6d6000830189614e94565b615d7a6020830188614a08565b615d876040830187615c31565b615d946060830186615c31565b615da16080830185614e94565b615dae60a0830184614a08565b979650505050505050565b600081519050615dc881614c2d565b92915050565b600080600060608486031215615de757615de6614a32565b5b6000615df586828701615db9565b9350506020615e0686828701615db9565b9250506040615e1786828701615db9565b9150509250925092565b7f42455032303a20616d6f756e7420657863656564206d617820686f6c64696e6760008201527f206c696d69740000000000000000000000000000000000000000000000000000602082015250565b6000615e7d602683614b03565b9150615e8882615e21565b604082019050919050565b60006020820190508181036000830152615eac81615e70565b905091905056fe546f6b656e3a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f546f6b656e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122030b50f52c86078844c211f7b267fcd4298023fb3ece3dfe41dd9451c909d7e5c64736f6c634300080a0033000000000000000000000000f151a32648e6248a9669e414242b5d66d8e4b709

Deployed Bytecode

0x6080604052600436106103785760003560e01c8063775a1f6c116101d1578063b81df74211610102578063dd7bd775116100a0578063f097ea1a1161006f578063f097ea1a14610d35578063f242ab4114610d5e578063f2fde38b14610d89578063fe1a711114610db25761037f565b8063dd7bd77514610c8d578063e4440a8614610cb6578063e6c84dc614610ce1578063ea5b9e8514610d0c5761037f565b8063cb5c474c116100dc578063cb5c474c14610bd1578063ce261d1014610bfc578063dd07382914610c25578063dd62ed3e14610c505761037f565b8063b81df74214610b54578063bded89fb14610b7f578063c624b42314610ba85761037f565b806399b770321161016f578063a457c2d711610149578063a457c2d714610a88578063a9059cbb14610ac5578063afee32a914610b02578063b0bc2a2d14610b2b5761037f565b806399b7703214610a0b5780639d3feb9a14610a345780639d854b6314610a5f5761037f565b806389f9a1d3116101ab57806389f9a1d31461095f5780638da5cb5b1461098a5780639285c1ca146109b557806395d89b41146109e05761037f565b8063775a1f6c146108ce57806388f82020146108f957806389f5649e146109365761037f565b806339509351116102ab5780635342acb41161024957806370a082311161022357806370a082311461081257806370d5ae051461084f578063715018a61461087a5780637584817c146108915761037f565b80635342acb4146107815780635e9416fc146107be5780636d268267146107e75761037f565b80634549b039116102855780634549b039146106c55780634a74bb021461070257806350a64fcd1461072d5780635249a820146107585761037f565b806339509351146106345780633aaa36e6146106715780633bd5d1731461069c5761037f565b806318160ddd116103185780632d838119116102f25780632d83811914610578578063313ce567146105b55780633326d7f2146105e057806338d6f8471461060b5761037f565b806318160ddd146104e55780631884f1e61461051057806323b872dd1461053b5761037f565b80630758d924116103545780630758d92414610417578063095ea7b3146104425780630f3a325f1461047f578063172fdc23146104bc5761037f565b8062281dc1146103845780629cb0e9146103af57806306fdde03146103ec5761037f565b3661037f57005b600080fd5b34801561039057600080fd5b50610399610ddd565b6040516103a69190614a17565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190614a95565b610de3565b6040516103e39190614add565b60405180910390f35b3480156103f857600080fd5b50610401610e39565b60405161040e9190614b91565b60405180910390f35b34801561042357600080fd5b5061042c610ecb565b6040516104399190614c12565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190614c59565b610ef1565b6040516104769190614add565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190614a95565b610f0f565b6040516104b39190614add565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de9190614cc5565b610f2f565b005b3480156104f157600080fd5b506104fa610fff565b6040516105079190614a17565b60405180910390f35b34801561051c57600080fd5b50610525611009565b6040516105329190614a17565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190614cf2565b61100f565b60405161056f9190614add565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190614d45565b611252565b6040516105ac9190614a17565b60405180910390f35b3480156105c157600080fd5b506105ca6112c0565b6040516105d79190614d8e565b60405180910390f35b3480156105ec57600080fd5b506105f56112d7565b6040516106029190614a17565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190614a95565b6112dd565b005b34801561064057600080fd5b5061065b60048036038101906106569190614c59565b6114d2565b6040516106689190614add565b60405180910390f35b34801561067d57600080fd5b50610686611585565b6040516106939190614add565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190614d45565b611598565b005b3480156106d157600080fd5b506106ec60048036038101906106e79190614da9565b61171f565b6040516106f99190614a17565b60405180910390f35b34801561070e57600080fd5b506107176117f4565b6040516107249190614add565b60405180910390f35b34801561073957600080fd5b50610742611807565b60405161074f9190614a17565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614e27565b611811565b005b34801561078d57600080fd5b506107a860048036038101906107a39190614a95565b6118d1565b6040516107b59190614add565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190614e54565b611927565b005b3480156107f357600080fd5b506107fc6119fe565b6040516108099190614a17565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190614a95565b611a04565b6040516108469190614a17565b60405180910390f35b34801561085b57600080fd5b50610864611aef565b6040516108719190614ea3565b60405180910390f35b34801561088657600080fd5b5061088f611b15565b005b34801561089d57600080fd5b506108b860048036038101906108b39190614a95565b611b9d565b6040516108c59190614add565b60405180910390f35b3480156108da57600080fd5b506108e3611bf3565b6040516108f09190614a17565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b9190614a95565b611bf9565b60405161092d9190614add565b60405180910390f35b34801561094257600080fd5b5061095d60048036038101906109589190614e54565b611c4f565b005b34801561096b57600080fd5b50610974611d26565b6040516109819190614a17565b60405180910390f35b34801561099657600080fd5b5061099f611d2c565b6040516109ac9190614ea3565b60405180910390f35b3480156109c157600080fd5b506109ca611d55565b6040516109d79190614add565b60405180910390f35b3480156109ec57600080fd5b506109f5611d68565b604051610a029190614b91565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190614d45565b611dfa565b005b348015610a4057600080fd5b50610a49611e80565b604051610a569190614a17565b60405180910390f35b348015610a6b57600080fd5b50610a866004803603810190610a819190614ebe565b611e86565b005b348015610a9457600080fd5b50610aaf6004803603810190610aaa9190614c59565b611f24565b604051610abc9190614add565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae79190614c59565b611ff1565b604051610af99190614add565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190614ebe565b61200f565b005b348015610b3757600080fd5b50610b526004803603810190610b4d9190614cc5565b6120ad565b005b348015610b6057600080fd5b50610b69612146565b604051610b769190614a17565b60405180910390f35b348015610b8b57600080fd5b50610ba66004803603810190610ba19190614d45565b61214c565b005b348015610bb457600080fd5b50610bcf6004803603810190610bca9190614cc5565b6121d2565b005b348015610bdd57600080fd5b50610be66122a2565b604051610bf39190614a17565b60405180910390f35b348015610c0857600080fd5b50610c236004803603810190610c1e9190614c59565b6122a8565b005b348015610c3157600080fd5b50610c3a6123ae565b604051610c479190614a17565b60405180910390f35b348015610c5c57600080fd5b50610c776004803603810190610c729190614f25565b6123b4565b604051610c849190614a17565b60405180910390f35b348015610c9957600080fd5b50610cb46004803603810190610caf9190614a95565b61243b565b005b348015610cc257600080fd5b50610ccb61259e565b604051610cd89190614f74565b60405180910390f35b348015610ced57600080fd5b50610cf66125c4565b604051610d039190614a17565b60405180910390f35b348015610d1857600080fd5b50610d336004803603810190610d2e9190614e54565b6125ca565b005b348015610d4157600080fd5b50610d5c6004803603810190610d579190614d45565b6126a1565b005b348015610d6a57600080fd5b50610d73612727565b604051610d809190614ea3565b60405180910390f35b348015610d9557600080fd5b50610db06004803603810190610dab9190614a95565b61274d565b005b348015610dbe57600080fd5b50610dc7612845565b604051610dd49190614add565b60405180910390f35b601c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600c8054610e4890614fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7490614fbe565b8015610ec15780601f10610e9657610100808354040283529160200191610ec1565b820191906000526020600020905b815481529060010190602001808311610ea457829003601f168201915b5050505050905090565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f05610efe612858565b8484612860565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b610f37612858565b73ffffffffffffffffffffffffffffffffffffffff16610f55611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa29061503c565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051610ff49190614add565b60405180910390a150565b6000600954905090565b60125481565b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561109e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611095906150a8565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906150a8565b60405180910390fd5b601760029054906101000a900460ff161561117b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111729061513a565b60405180910390fd5b611186848484612a2b565b61124784611192612858565b61124285604051806060016040528060288152602001615ed960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111f8612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c339092919063ffffffff16565b612860565b600190509392505050565b6000600a54821115611299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611290906151cc565b60405180910390fd5b60006112a3612c97565b90506112b88184612cc290919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b60195481565b6112e5612858565b73ffffffffffffffffffffffffffffffffffffffff16611303611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113509061503c565b60405180910390fd5b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190615238565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906152a4565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061157b6114df612858565b8461157685600360006114f0612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b612860565b6001905092915050565b601760019054906101000a900460ff1681565b60006115a2612858565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890615336565b60405180910390fd5b600061164d61163e612c97565b84612d6a90919063ffffffff16565b90506116a181600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116f981600a54612de590919063ffffffff16565b600a8190555061171483600b54612d0c90919063ffffffff16565b600b81905550505050565b6000600954831115611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d906153c8565b60405180910390fd5b81611792576000611787611778612c97565b85612d6a90919063ffffffff16565b9050809150506117ee565b60006117ae61179f612c97565b85612d6a90919063ffffffff16565b905060006117e66117d76117c0612c97565b6117c988612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b905080925050505b92915050565b601760009054906101000a900460ff1681565b6000600b54905090565b611819612858565b73ffffffffffffffffffffffffffffffffffffffff16611837611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461188d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118849061503c565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61192f612858565b73ffffffffffffffffffffffffffffffffffffffff1661194d611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a9061503c565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a9f57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611aea565b611ae7600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611252565b90505b919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b1d612858565b73ffffffffffffffffffffffffffffffffffffffff16611b3b611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b889061503c565b60405180910390fd5b611b9b6000612ea2565b565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601e5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611c57612858565b73ffffffffffffffffffffffffffffffffffffffff16611c75611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061503c565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601760029054906101000a900460ff1681565b6060600d8054611d7790614fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611da390614fbe565b8015611df05780601f10611dc557610100808354040283529160200191611df0565b820191906000526020600020905b815481529060010190602001808311611dd357829003601f168201915b5050505050905090565b611e02612858565b73ffffffffffffffffffffffffffffffffffffffff16611e20611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d9061503c565b60405180910390fd5b8060148190555050565b601f5481565b611e8e612858565b73ffffffffffffffffffffffffffffffffffffffff16611eac611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef99061503c565b60405180910390fd5b83601c8190555082601d8190555081601e8190555080601f8190555050505050565b6000611fe7611f31612858565b84611fe285604051806060016040528060258152602001615eb46025913960036000611f5b612858565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c339092919063ffffffff16565b612860565b6001905092915050565b6000612005611ffe612858565b8484612a2b565b6001905092915050565b612017612858565b73ffffffffffffffffffffffffffffffffffffffff16612035611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461208b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120829061503c565b60405180910390fd5b836018819055508260198190555081601a8190555080601b8190555050505050565b6120b5612858565b73ffffffffffffffffffffffffffffffffffffffff166120d3611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061503c565b60405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b60145481565b612154612858565b73ffffffffffffffffffffffffffffffffffffffff16612172611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf9061503c565b60405180910390fd5b8060138190555050565b6121da612858565b73ffffffffffffffffffffffffffffffffffffffff166121f8611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461224e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122459061503c565b60405180910390fd5b80601760026101000a81548160ff0219169083151502179055507f4de571fd3e7dc38a16cdbb0d7ff4c4d80a6d06fbd12339f1fa56851761c46964816040516122979190614add565b60405180910390a150565b601a5481565b6122b0612858565b73ffffffffffffffffffffffffffffffffffffffff166122ce611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b9061503c565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612348611d2c565b836040518363ffffffff1660e01b81526004016123669291906153e8565b6020604051808303816000875af1158015612385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a99190615426565b505050565b60185481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612443612858565b73ffffffffffffffffffffffffffffffffffffffff16612461611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146124b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ae9061503c565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253a9061549f565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6125d2612858565b73ffffffffffffffffffffffffffffffffffffffff166125f0611d2c565b73ffffffffffffffffffffffffffffffffffffffff1614612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d9061503c565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6126a9612858565b73ffffffffffffffffffffffffffffffffffffffff166126c7611d2c565b73ffffffffffffffffffffffffffffffffffffffff161461271d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127149061503c565b60405180910390fd5b8060128190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612755612858565b73ffffffffffffffffffffffffffffffffffffffff16612773611d2c565b73ffffffffffffffffffffffffffffffffffffffff16146127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c09061503c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090615531565b60405180910390fd5b61284281612ea2565b50565b601760039054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c7906155c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293790615655565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a1e9190614a17565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a92906156e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290615779565b60405180910390fd5b60008111612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b459061580b565b60405180910390fd5b612b588383612f66565b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bff5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612c175750601760019054906101000a900460ff16155b15612c2157600090505b612c2d84848484613278565b50505050565b6000838311158290612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c729190614b91565b60405180910390fd5b5060008385612c8a919061585a565b9050809150509392505050565b6000806000612ca4613796565b91509150612cbb8183612cc290919063ffffffff16565b9250505090565b6000612d0483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613811565b905092915050565b6000808284612d1b919061588e565b905083811015612d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5790615930565b60405180910390fd5b8091505092915050565b600080831415612d7d5760009050612ddf565b60008284612d8b9190615950565b9050828482612d9a91906159d9565b14612dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd190615a7c565b60405180910390fd5b809150505b92915050565b6000612e2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c33565b905092915050565b600080612e976103e8612e89612e7a612e55602354602254612d0c90919063ffffffff16565b612e6c602154602054612d0c90919063ffffffff16565b612d0c90919063ffffffff16565b86612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f7130611a04565b905060006012548210159050808015612fd85750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612ff05750601760009054906101000a900460ff165b801561308157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561307f5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b155b15613272576130b330600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612860565b60006130cb6002602454612cc290919063ffffffff16565b905060006130e482602454612de590919063ffffffff16565b905060006130fb8286612de590919063ffffffff16565b9050613129600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613874565b60004790506000613155836131478785612d6a90919063ffffffff16565b612cc290919063ffffffff16565b9050600061316c8284612de590919063ffffffff16565b905060008111156131e157601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156131df573d6000803e3d6000fd5b505b600082111561325b5761321f600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613218611d2c565b8785613a5a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186838760405161325293929190615a9c565b60405180910390a15b600060248190555060006025819055505050505050505b50505050565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fc906150a8565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613389906150a8565b60405180910390fd5b601760029054906101000a900460ff16156133e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d99061513a565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661347957601454821115613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f90615b45565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156134d35750805b156134e5576134e0613afe565b61355b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561353f5750805b156135515761354c613b24565b61355a565b613559613b4a565b5b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135fe5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136135761360e848484613b6c565b613790565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136b65750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136cb576136c6848484613dbb565b61378f565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561376d5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137825761377d848484613fd8565b61378e565b61378d8484846141f8565b5b5b5b50505050565b6000806000600a549050600060095490506137bc60165483612de590919063ffffffff16565b91506137d360155482612de590919063ffffffff16565b90506137ec600954600a54612cc290919063ffffffff16565b82101561380457600a5460095493509350505061380d565b81819350935050505b9091565b60008083118290613858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384f9190614b91565b60405180910390fd5b506000838561386791906159d9565b9050809150509392505050565b60008290506000600267ffffffffffffffff81111561389657613895615b65565b5b6040519080825280602002602001820160405280156138c45781602001602082028036833780820191505090505b50905030816000815181106138dc576138db615b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139859190615bd8565b8160018151811061399957613998615b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663791ac947846000843061012c42613a02919061588e565b6040518663ffffffff1660e01b8152600401613a22959493929190615cfe565b600060405180830381600087803b158015613a3c57600080fd5b505af1158015613a50573d6000803e3d6000fd5b5050505050505050565b60008490508073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330866000808a61012c42613a90919061588e565b6040518863ffffffff1660e01b8152600401613ab196959493929190615d58565b60606040518083038185885af1158015613acf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613af49190615dce565b5050505050505050565b601854602081905550601954602181905550601a54602281905550601b54602381905550565b601c54602081905550601d54602181905550601e54602281905550601f54602381905550565b6000602081905550600060218190555060006022819055506000602381905550565b6000613b76612c97565b90506000613b95613b8684612e2f565b84612de590919063ffffffff16565b90506000613bac8385612d6a90919063ffffffff16565b90506000613bdd613bce85613bc088612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b9050613be9868461442c565b613c3b85600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9385601554612de590919063ffffffff16565b601581905550613ceb81600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d398786866144f7565b613d448786866147cd565b613d4d85614978565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613daa9190614a17565b60405180910390a350505050505050565b6000613dc5612c97565b90506000613de4613dd584612e2f565b84612de590919063ffffffff16565b90506000613dfb8385612d6a90919063ffffffff16565b9050613e07858361442c565b613e5981600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eee82600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4684601554612d0c90919063ffffffff16565b601581905550613f578685856144f7565b613f628685856147cd565b613f6b84614978565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613fc89190614a17565b60405180910390a3505050505050565b6000613fe2612c97565b90506000614001613ff284612e2f565b84612de590919063ffffffff16565b905061400d848261442c565b61405f83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b783601554612de590919063ffffffff16565b60158190555061410f81600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416783601554612d0c90919063ffffffff16565b6015819055506141788584846144f7565b6141838584846147cd565b61418c83614978565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516141e99190614a17565b60405180910390a35050505050565b6000614202612c97565b9050600061422161421284612e2f565b84612de590919063ffffffff16565b905060006142388385612d6a90919063ffffffff16565b9050600061426961425a8561424c88612e2f565b612d6a90919063ffffffff16565b83612de590919063ffffffff16565b9050614275868461442c565b6142c782600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435c81600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143aa8786866144f7565b6143b58786866147cd565b6143be85614978565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161441b9190614a17565b60405180910390a350505050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166144f357601760039054906101000a900460ff16156144f2576013546144b0826144a285611a04565b612d0c90919063ffffffff16565b11156144f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144e890615e93565b60405180910390fd5b5b5b5050565b60006145366103e8614528614519602254602154612d0c90919063ffffffff16565b86612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905060008111156147c75761457e61456d6103e861455f60215487612d6a90919063ffffffff16565b612cc290919063ffffffff16565b602454612d0c90919063ffffffff16565b6024819055506145c16145b06103e86145a260225487612d6a90919063ffffffff16565b612cc290919063ffffffff16565b602554612d0c90919063ffffffff16565b60258190555060006145dc8383612d6a90919063ffffffff16565b9050600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146ca5761468282600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614760565b61471c81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516147bd9190614a17565b60405180910390a3505b50505050565b60006147f86103e86147ea60235486612d6a90919063ffffffff16565b612cc290919063ffffffff16565b9050600061480f8383612d6a90919063ffffffff16565b90506148858160016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0c90919063ffffffff16565b60016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516149699190614a17565b60405180910390a35050505050565b60006149a36103e861499560205485612d6a90919063ffffffff16565b612cc290919063ffffffff16565b905060006149c16149b2612c97565b83612d6a90919063ffffffff16565b90506149d881600a54612de590919063ffffffff16565b600a819055506149f382600b54612d0c90919063ffffffff16565b600b81905550505050565b6000819050919050565b614a11816149fe565b82525050565b6000602082019050614a2c6000830184614a08565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a6282614a37565b9050919050565b614a7281614a57565b8114614a7d57600080fd5b50565b600081359050614a8f81614a69565b92915050565b600060208284031215614aab57614aaa614a32565b5b6000614ab984828501614a80565b91505092915050565b60008115159050919050565b614ad781614ac2565b82525050565b6000602082019050614af26000830184614ace565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614b32578082015181840152602081019050614b17565b83811115614b41576000848401525b50505050565b6000601f19601f8301169050919050565b6000614b6382614af8565b614b6d8185614b03565b9350614b7d818560208601614b14565b614b8681614b47565b840191505092915050565b60006020820190508181036000830152614bab8184614b58565b905092915050565b6000819050919050565b6000614bd8614bd3614bce84614a37565b614bb3565b614a37565b9050919050565b6000614bea82614bbd565b9050919050565b6000614bfc82614bdf565b9050919050565b614c0c81614bf1565b82525050565b6000602082019050614c276000830184614c03565b92915050565b614c36816149fe565b8114614c4157600080fd5b50565b600081359050614c5381614c2d565b92915050565b60008060408385031215614c7057614c6f614a32565b5b6000614c7e85828601614a80565b9250506020614c8f85828601614c44565b9150509250929050565b614ca281614ac2565b8114614cad57600080fd5b50565b600081359050614cbf81614c99565b92915050565b600060208284031215614cdb57614cda614a32565b5b6000614ce984828501614cb0565b91505092915050565b600080600060608486031215614d0b57614d0a614a32565b5b6000614d1986828701614a80565b9350506020614d2a86828701614a80565b9250506040614d3b86828701614c44565b9150509250925092565b600060208284031215614d5b57614d5a614a32565b5b6000614d6984828501614c44565b91505092915050565b600060ff82169050919050565b614d8881614d72565b82525050565b6000602082019050614da36000830184614d7f565b92915050565b60008060408385031215614dc057614dbf614a32565b5b6000614dce85828601614c44565b9250506020614ddf85828601614cb0565b9150509250929050565b6000614df482614a37565b9050919050565b614e0481614de9565b8114614e0f57600080fd5b50565b600081359050614e2181614dfb565b92915050565b600060208284031215614e3d57614e3c614a32565b5b6000614e4b84828501614e12565b91505092915050565b60008060408385031215614e6b57614e6a614a32565b5b6000614e7985828601614a80565b9250506020614e8a85828601614cb0565b9150509250929050565b614e9d81614a57565b82525050565b6000602082019050614eb86000830184614e94565b92915050565b60008060008060808587031215614ed857614ed7614a32565b5b6000614ee687828801614c44565b9450506020614ef787828801614c44565b9350506040614f0887828801614c44565b9250506060614f1987828801614c44565b91505092959194509250565b60008060408385031215614f3c57614f3b614a32565b5b6000614f4a85828601614a80565b9250506020614f5b85828601614a80565b9150509250929050565b614f6e81614de9565b82525050565b6000602082019050614f896000830184614f65565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614fd657607f821691505b60208210811415614fea57614fe9614f8f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615026602083614b03565b915061503182614ff0565b602082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000615092600f83614b03565b915061509d8261505c565b602082019050919050565b600060208201905081810360008301526150c181615085565b9050919050565b7f54726164696e67207368696674656420666f7220626f742064656c6574696f6e60008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000615124602183614b03565b915061512f826150c8565b604082019050919050565b6000602082019050818103600083015261515381615117565b9050919050565b7f546f6b656e3a20416d6f756e74206d757374206265206c657373207468616e2060008201527f746f74616c207265666c656374696f6e73000000000000000000000000000000602082015250565b60006151b6603183614b03565b91506151c18261515a565b604082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b7f57652063616e206e6f7420626c61636b6c69737420726f757465720000000000600082015250565b6000615222601b83614b03565b915061522d826151ec565b602082019050919050565b6000602082019050818103600083015261525181615215565b9050919050565b7f536e6970657220616c7265616479206578697374000000000000000000000000600082015250565b600061528e601483614b03565b915061529982615258565b602082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f546f6b656e3a204578636c75646564206164647265737365732063616e6e6f7460008201527f2063616c6c20746869732066756e6374696f6e00000000000000000000000000602082015250565b6000615320603383614b03565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b7f42455032303a20416d6f756e74206d757374206265206c657373207468616e2060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b60006153b2602683614b03565b91506153bd82615356565b604082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b60006040820190506153fd6000830185614e94565b61540a6020830184614a08565b9392505050565b60008151905061542081614c99565b92915050565b60006020828403121561543c5761543b614a32565b5b600061544a84828501615411565b91505092915050565b7f4e6f74206120736e697065720000000000000000000000000000000000000000600082015250565b6000615489600c83614b03565b915061549482615453565b602082019050919050565b600060208201905081810360008301526154b88161547c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061551b602683614b03565b9150615526826154bf565b604082019050919050565b6000602082019050818103600083015261554a8161550e565b9050919050565b7f546f6b656e3a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155ad602483614b03565b91506155b882615551565b604082019050919050565b600060208201905081810360008301526155dc816155a0565b9050919050565b7f546f6b656e3a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061563f602283614b03565b915061564a826155e3565b604082019050919050565b6000602082019050818103600083015261566e81615632565b9050919050565b7f546f6b656e3a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156d1602583614b03565b91506156dc82615675565b604082019050919050565b60006020820190508181036000830152615700816156c4565b9050919050565b7f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615763602383614b03565b915061576e82615707565b604082019050919050565b6000602082019050818103600083015261579281615756565b9050919050565b7f546f6b656e3a207472616e7366657220616d6f756e74206d757374206265206760008201527f726561746572207468616e207a65726f00000000000000000000000000000000602082015250565b60006157f5603083614b03565b915061580082615799565b604082019050919050565b60006020820190508181036000830152615824816157e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615865826149fe565b9150615870836149fe565b9250828210156158835761588261582b565b5b828203905092915050565b6000615899826149fe565b91506158a4836149fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156158d9576158d861582b565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061591a601b83614b03565b9150615925826158e4565b602082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b826149fe565b9150615966836149fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561599f5761599e61582b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159e4826149fe565b91506159ef836149fe565b9250826159ff576159fe6159aa565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a66602183614b03565b9150615a7182615a0a565b604082019050919050565b60006020820190508181036000830152615a9581615a59565b9050919050565b6000606082019050615ab16000830186614a08565b615abe6020830185614a08565b615acb6040830184614a08565b949350505050565b7f416d6f756e74206d7573742062652067726561746572207468616e206d696e6960008201527f6d756d20627579204c696d697400000000000000000000000000000000000000602082015250565b6000615b2f602d83614b03565b9150615b3a82615ad3565b604082019050919050565b60006020820190508181036000830152615b5e81615b22565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615bd281614a69565b92915050565b600060208284031215615bee57615bed614a32565b5b6000615bfc84828501615bc3565b91505092915050565b6000819050919050565b6000615c2a615c25615c2084615c05565b614bb3565b6149fe565b9050919050565b615c3a81615c0f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c7581614a57565b82525050565b6000615c878383615c6c565b60208301905092915050565b6000602082019050919050565b6000615cab82615c40565b615cb58185615c4b565b9350615cc083615c5c565b8060005b83811015615cf1578151615cd88882615c7b565b9750615ce383615c93565b925050600181019050615cc4565b5085935050505092915050565b600060a082019050615d136000830188614a08565b615d206020830187615c31565b8181036040830152615d328186615ca0565b9050615d416060830185614e94565b615d4e6080830184614a08565b9695505050505050565b600060c082019050615d6d6000830189614e94565b615d7a6020830188614a08565b615d876040830187615c31565b615d946060830186615c31565b615da16080830185614e94565b615dae60a0830184614a08565b979650505050505050565b600081519050615dc881614c2d565b92915050565b600080600060608486031215615de757615de6614a32565b5b6000615df586828701615db9565b9350506020615e0686828701615db9565b9250506040615e1786828701615db9565b9150509250925092565b7f42455032303a20616d6f756e7420657863656564206d617820686f6c64696e6760008201527f206c696d69740000000000000000000000000000000000000000000000000000602082015250565b6000615e7d602683614b03565b9150615e8882615e21565b604082019050919050565b60006020820190508181036000830152615eac81615e70565b905091905056fe546f6b656e3a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f546f6b656e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122030b50f52c86078844c211f7b267fcd4298023fb3ece3dfe41dd9451c909d7e5c64736f6c634300080a0033

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

000000000000000000000000f151a32648e6248a9669e414242b5d66d8e4b709

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

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


Deployed Bytecode Sourcemap

5930:25145:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7998:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13335:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10034:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6919:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11076:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6513:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17844:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10311:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7173:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11277:639;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14846:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10220:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7835:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20570:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11924:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7603:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13816:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14252:586;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7505:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12958:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18242:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13131:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15245:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7933:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10414:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7091:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3265:94;;;;;;;;;;;;;:::i;:::-;;13587:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8094:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12744:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15491:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7280:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2956:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7633:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10125:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16086:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8146:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16498:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12232:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10867:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17340:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18101:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7335:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15924:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15715:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7882:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16251:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7788:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10675:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20828:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7024:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8046:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16943:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17155:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6975:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3515:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7678:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7998:41;;;;:::o;13335:176::-;13437:4;13466:27;:37;13494:8;13466:37;;;;;;;;;;;;;;;;;;;;;;;;;13459:44;;13335:176;;;:::o;10034:83::-;10071:13;10104:5;10097:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10034:83;:::o;6919:27::-;;;;;;;;;;;;;:::o;11076:193::-;11178:4;11200:39;11209:12;:10;:12::i;:::-;11223:7;11232:6;11200:8;:39::i;:::-;11257:4;11250:11;;11076:193;;;;:::o;6513:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;17844:170::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17948:6:::1;17924:21;;:30;;;;;;;;;;;;;;;;;;17970:36;17999:6;17970:36;;;;;;:::i;:::-;;;;;;;;17844:170:::0;:::o;10311:95::-;10364:7;10391;;10384:14;;10311:95;:::o;7173:45::-;;;;:::o;11277:639::-;11409:4;11435:8;:16;11444:6;11435:16;;;;;;;;;;;;;;;;;;;;;;;;;11434:17;11426:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;11491:8;:19;11500:9;11491:19;;;;;;;;;;;;;;;;;;;;;;;;;11490:20;11482:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;11550:18;;;;;;;;;;;11549:19;11541:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11619:36;11629:6;11637:9;11648:6;11619:9;:36::i;:::-;11666:220;11689:6;11710:12;:10;:12::i;:::-;11737:138;11793:6;11737:138;;;;;;;;;;;;;;;;;:11;:19;11749:6;11737:19;;;;;;;;;;;;;;;:33;11757:12;:10;:12::i;:::-;11737:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;11666:8;:220::i;:::-;11904:4;11897:11;;11277:639;;;;;:::o;14846:329::-;14940:7;14998;;14987;:18;;14965:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;15093:19;15115:10;:8;:10::i;:::-;15093:32;;15143:24;15155:11;15143:7;:11;;:24;;;;:::i;:::-;15136:31;;;14846:329;;;:::o;10220:83::-;10261:5;10286:9;;;;;;;;;;;10279:16;;10220:83;:::o;7835:40::-;;;;:::o;20570:250::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20671:9:::1;;;;;;;;;;;20651:30;;:8;:30;;;;20643:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20733:8;:18;20742:8;20733:18;;;;;;;;;;;;;;;;;;;;;;;;;20732:19;20724:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;20808:4;20787:8;:18;20796:8;20787:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;20570:250:::0;:::o;11924:300::-;12039:4;12061:133;12084:12;:10;:12::i;:::-;12111:7;12133:50;12172:10;12133:11;:25;12145:12;:10;:12::i;:::-;12133:25;;;;;;;;;;;;;;;:34;12159:7;12133:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12061:8;:133::i;:::-;12212:4;12205:11;;11924:300;;;;:::o;7603:23::-;;;;;;;;;;;;;:::o;13816:428::-;13868:14;13885:12;:10;:12::i;:::-;13868:29;;13931:21;:29;13953:6;13931:29;;;;;;;;;;;;;;;;;;;;;;;;;13930:30;13908:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;14050:15;14068:23;14080:10;:8;:10::i;:::-;14068:7;:11;;:23;;;;:::i;:::-;14050:41;;14120:28;14140:7;14120;:15;14128:6;14120:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;14102:7;:15;14110:6;14102:15;;;;;;;;;;;;;;;:46;;;;14169:20;14181:7;14169;;:11;;:20;;;;:::i;:::-;14159:7;:30;;;;14213:23;14228:7;14213:10;;:14;;:23;;;;:::i;:::-;14200:10;:36;;;;13857:387;;13816:428;:::o;14252:586::-;14370:7;14414;;14403;:18;;14395:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14480:17;14475:356;;14514:15;14532:23;14544:10;:8;:10::i;:::-;14532:7;:11;;:23;;;;:::i;:::-;14514:41;;14577:7;14570:14;;;;;14475:356;14617:15;14635:23;14647:10;:8;:10::i;:::-;14635:7;:11;;:23;;;;:::i;:::-;14617:41;;14673:23;14699:83;14729:38;14756:10;:8;:10::i;:::-;14729:22;14743:7;14729:13;:22::i;:::-;:26;;:38;;;;:::i;:::-;14699:7;:11;;:83;;;;:::i;:::-;14673:109;;14804:15;14797:22;;;;14252:586;;;;;:::o;7505:40::-;;;;;;;;;;;;;:::o;12958:101::-;13014:7;13041:10;;13034:17;;12958:101;:::o;18242:148::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18371:11:::1;18356:12;;:26;;;;;;;;;;;;;;;;;;18242:148:::0;:::o;13131:126::-;13197:4;13221:18;:28;13240:8;13221:28;;;;;;;;;;;;;;;;;;;;;;;;;13214:35;;13131:126;;;:::o;15245:176::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15408:5:::1;15368:27;:37;15396:8;15368:37;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;15245:176:::0;;:::o;7933:35::-;;;;:::o;10414:253::-;10517:7;10546:21;:31;10568:8;10546:31;;;;;;;;;;;;;;;;;;;;;;;;;10542:61;;;10586:7;:17;10594:8;10586:17;;;;;;;;;;;;;;;;10579:24;;;;10542:61;10621:38;10641:7;:17;10649:8;10641:17;;;;;;;;;;;;;;;;10621:19;:38::i;:::-;10614:45;;10414:253;;;;:::o;7091:73::-;;;;;;;;;;;;;:::o;3265:94::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3330:21:::1;3348:1;3330:9;:21::i;:::-;3265:94::o:0;13587:174::-;13688:4;13717:26;:36;13744:8;13717:36;;;;;;;;;;;;;;;;;;;;;;;;;13710:43;;13587:174;;;:::o;8094:45::-;;;;:::o;12744:132::-;12813:4;12837:21;:31;12859:8;12837:31;;;;;;;;;;;;;;;;;;;;;;;;;12830:38;;12744:132;;;:::o;15491:174::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15652:5:::1;15613:26;:36;15640:8;15613:36;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;15491:174:::0;;:::o;7280:48::-;;;;:::o;2956:87::-;3002:7;3029:6;;;;;;;;;;;3022:13;;2956:87;:::o;7633:38::-;;;;;;;;;;;;;:::o;10125:87::-;10164:13;10197:7;10190:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10125:87;:::o;16086:98::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16169:7:::1;16155:11;:21;;;;16086:98:::0;:::o;8146:36::-;;;;:::o;16498:386::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16718:18:::1;16693:22;:43;;;;16771:13;16747:21;:37;;;;16822:16;16795:24;:43;;;;16868:8;16849:16;:27;;;;16498:386:::0;;;;:::o;12232:400::-;12352:4;12374:228;12397:12;:10;:12::i;:::-;12424:7;12446:145;12503:15;12446:145;;;;;;;;;;;;;;;;;:11;:25;12458:12;:10;:12::i;:::-;12446:25;;;;;;;;;;;;;;;:34;12472:7;12446:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;12374:8;:228::i;:::-;12620:4;12613:11;;12232:400;;;;:::o;10867:199::-;10972:4;10994:42;11004:12;:10;:12::i;:::-;11018:9;11029:6;10994:9;:42::i;:::-;11054:4;11047:11;;10867:199;;;;:::o;17340:381::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17558:18:::1;17534:21;:42;;;;17610:13;17587:20;:36;;;;17660:16;17634:23;:42;;;;17705:8;17687:15;:26;;;;17340:381:::0;;;;:::o;18101:93::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18180:6:::1;18173:4;;:13;;;;;;;;;;;;;;;;;;18101:93:::0;:::o;7335:43::-;;;;:::o;15924:108::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16017:7:::1;15998:16;:26;;;;15924:108:::0;:::o;15715:155::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15808:6:::1;15787:18;;:27;;;;;;;;;;;;;;;;;;15830:32;15855:6;15830:32;;;;;;:::i;:::-;;;;;;;;15715:155:::0;:::o;7882:44::-;;;;:::o;16251:161::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16370:6:::1;16363:23;;;16387:7;:5;:7::i;:::-;16396;16363:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16251:161:::0;;:::o;7788:40::-;;;;:::o;10675:184::-;10792:7;10824:11;:18;10836:5;10824:18;;;;;;;;;;;;;;;:27;10843:7;10824:27;;;;;;;;;;;;;;;;10817:34;;10675:184;;;;:::o;20828:166::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20914:8:::1;:18;20923:8;20914:18;;;;;;;;;;;;;;;;;;;;;;;;;20906:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20981:5;20960:8;:18;20969:8;20960:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;20828:166:::0;:::o;7024:35::-;;;;;;;;;;;;;:::o;8046:41::-;;;;:::o;16943:160::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17089:6:::1;17058:18;:28;17077:8;17058:28;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;16943:160:::0;;:::o;17155:104::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17244:7:::1;17227:14;:24;;;;17155:104:::0;:::o;6975:22::-;;;;;;;;;;;;;:::o;3515:229::-;3188:12;:10;:12::i;:::-;3177:23;;:7;:5;:7::i;:::-;:23;;;3169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3638:1:::1;3618:22;;:8;:22;;;;3596:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3717:19;3727:8;3717:9;:19::i;:::-;3515:229:::0;:::o;7678:38::-;;;;;;;;;;;;;:::o;2314:98::-;2367:7;2394:10;2387:17;;2314:98;:::o;21002:371::-;21146:1;21129:19;;:5;:19;;;;21121:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21227:1;21208:21;;:7;:21;;;;21200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21311:6;21281:11;:18;21293:5;21281:18;;;;;;;;;;;;;;;:27;21300:7;21281:27;;;;;;;;;;;;;;;:36;;;;21349:7;21333:32;;21342:5;21333:32;;;21358:6;21333:32;;;;;;:::i;:::-;;;;;;;;21002:371;;;:::o;21422:839::-;21560:1;21544:18;;:4;:18;;;;21536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21637:1;21623:16;;:2;:16;;;;21615:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21707:1;21698:6;:10;21690:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21811:24;21826:4;21832:2;21811:14;:24::i;:::-;21909:12;21924:4;21909:19;;22031:18;:24;22050:4;22031:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;22059:18;:22;22078:2;22059:22;;;;;;;;;;;;;;;;;;;;;;;;;22031:50;:59;;;;22086:4;;;;;;;;;;;22085:5;22031:59;22027:107;;;22117:5;22107:15;;22027:107;22212:41;22227:4;22233:2;22237:6;22245:7;22212:14;:41::i;:::-;21525:736;21422:839;;;:::o;4412:226::-;4532:7;4565:1;4560;:6;;4568:12;4552:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4592:9;4608:1;4604;:5;;;;:::i;:::-;4592:17;;4629:1;4622:8;;;4412:226;;;;;:::o;19323:164::-;19365:7;19386:15;19403;19422:19;:17;:19::i;:::-;19385:56;;;;19459:20;19471:7;19459;:11;;:20;;;;:::i;:::-;19452:27;;;;19323:164;:::o;5125:132::-;5183:7;5210:39;5214:1;5217;5210:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5203:46;;5125:132;;;;:::o;4079:181::-;4137:7;4157:9;4173:1;4169;:5;;;;:::i;:::-;4157:17;;4198:1;4193;:6;;4185:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4251:1;4244:8;;;4079:181;;;;:::o;4646:471::-;4704:7;4954:1;4949;:6;4945:47;;;4979:1;4972:8;;;;4945:47;5004:9;5020:1;5016;:5;;;;:::i;:::-;5004:17;;5049:1;5044;5040;:5;;;;:::i;:::-;:10;5032:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5108:1;5101:8;;;4646:471;;;;;:::o;4268:136::-;4326:7;4353:43;4357:1;4360;4353:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4346:50;;4268:136;;;;:::o;18532:359::-;18595:7;18615:18;18636:219;18851:3;18636:196;18680:137;18754:44;18782:15;;18754:23;;:27;;:44;;;;:::i;:::-;18680:47;18706:20;;18680:21;;:25;;:47;;;;:::i;:::-;:51;;:137;;;;:::i;:::-;18636:7;:25;;:196;;;;:::i;:::-;:214;;:219;;;;:::i;:::-;18615:240;;18873:10;18866:17;;;18532:359;;;:::o;3873:173::-;3929:16;3948:6;;;;;;;;;;;3929:25;;3974:8;3965:6;;:17;;;;;;;;;;;;;;;;;;4029:8;3998:40;;4019:8;3998:40;;;;;;;;;;;;3918:128;3873:173;:::o;28837:2235::-;29184:28;29215:24;29233:4;29215:9;:24::i;:::-;29184:55;;29252:15;29294:14;;29270:20;:38;;29252:56;;29339:10;:42;;;;;29374:7;;;;;;;;;;;29366:15;;:4;:15;;;;29339:42;:80;;;;;29398:21;;;;;;;;;;;29339:80;:147;;;;;29454:4;29438:21;;:4;:21;;;:47;;;;;29477:7;;;;;;;;;;;29463:22;;:2;:22;;;29438:47;29436:50;29339:147;29321:1744;;;29561:65;29578:4;29593:9;;;;;;;;;;;29605:20;29561:8;:65::i;:::-;29643:18;29664:28;29690:1;29664:21;;:25;;:28;;;;:::i;:::-;29643:49;;29707:23;29733:37;29759:10;29733:21;;:25;;:37;;;;:::i;:::-;29707:63;;29787:30;29820:73;29863:15;29820:20;:24;;:73;;;;:::i;:::-;29787:106;;29960:66;29991:9;;;;;;;;;;;30003:22;29960;:66::i;:::-;30043:20;30066:21;30043:44;;30102:31;30136:56;30169:22;30136:28;30153:10;30136:12;:16;;:28;;;;:::i;:::-;:32;;:56;;;;:::i;:::-;30102:90;;30207:26;30236:41;30253:23;30236:12;:16;;:41;;;;:::i;:::-;30207:70;;30369:1;30348:18;:22;30345:85;;;30389:12;;;;;;;;;;;:21;;:41;30411:18;30389:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30345:85;30514:1;30488:23;:27;30485:434;;;30535:192;30584:9;;;;;;;;;;;30617:7;:5;:7::i;:::-;30647:15;30685:23;30535:18;:192::i;:::-;30753:150;30790:10;30823:23;30869:15;30753:150;;;;;;;;:::i;:::-;;;;;;;;30485:434;31008:1;30984:21;:25;;;;31052:1;31025:24;:28;;;;29513:1552;;;;;;29321:1744;28895:2177;;28837:2235;;:::o;22342:1522::-;22529:8;:16;22538:6;22529:16;;;;;;;;;;;;;;;;;;;;;;;;;22528:17;22520:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;22585:8;:19;22594:9;22585:19;;;;;;;;;;;;;;;;;;;;;;;;;22584:20;22576:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22644:18;;;;;;;;;;;22643:19;22635:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22717:26;:37;22744:9;22717:37;;;;;;;;;;;;;;;;;;;;;;;;;22713:148;;22788:11;;22778:6;:21;;22770:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22713:148;22885:7;;;;;;;;;;;22875:17;;:6;:17;;;:28;;;;;22896:7;22875:28;22871:286;;;22920:11;:9;:11::i;:::-;22871:286;;;23003:7;;;;;;;;;;;22990:20;;:9;:20;;;:31;;;;;23014:7;22990:31;22986:171;;;23038:12;:10;:12::i;:::-;22986:171;;;23131:14;:12;:14::i;:::-;22986:171;22871:286;23276:21;:29;23298:6;23276:29;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;23310:21;:32;23332:9;23310:32;;;;;;;;;;;;;;;;;;;;;;;;;23309:33;23276:66;23258:599;;;23369:48;23391:6;23399:9;23410:6;23369:21;:48::i;:::-;23258:599;;;23454:21;:29;23476:6;23454:29;;;;;;;;;;;;;;;;;;;;;;;;;23453:30;:66;;;;;23487:21;:32;23509:9;23487:32;;;;;;;;;;;;;;;;;;;;;;;;;23453:66;23435:422;;;23546:46;23566:6;23574:9;23585:6;23546:19;:46::i;:::-;23435:422;;;23628:21;:29;23650:6;23628:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;23661:21;:32;23683:9;23661:32;;;;;;;;;;;;;;;;;;;;;;;;;23628:65;23610:247;;;23720:48;23742:6;23750:9;23761:6;23720:21;:48::i;:::-;23610:247;;;23801:44;23819:6;23827:9;23838:6;23801:17;:44::i;:::-;23610:247;23435:422;23258:599;22342:1522;;;;:::o;19755:355::-;19806:7;19815;19835:15;19853:7;;19835:25;;19871:15;19889:7;;19871:25;;19917:28;19929:15;;19917:7;:11;;:28;;;;:::i;:::-;19907:38;;19966:28;19978:15;;19966:7;:11;;:28;;;;:::i;:::-;19956:38;;20019:20;20031:7;;20019;;:11;;:20;;;;:::i;:::-;20009:7;:30;20005:61;;;20049:7;;20058;;20041:25;;;;;;;;20005:61;20085:7;20094;20077:25;;;;;;19755:355;;;:::o;5265:312::-;5385:7;5417:1;5413;:5;5420:12;5405:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5444:9;5460:1;5456;:5;;;;:::i;:::-;5444:17;;5568:1;5561:8;;;5265:312;;;;;:::o;31171:603::-;31275:20;31309:13;31275:48;;31392:21;31430:1;31416:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31392:40;;31461:4;31443;31448:1;31443:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31487:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31477:4;31482:1;31477:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;31542:9;:60;;;31617:11;31643:1;31687:4;31714;31752:3;31734:15;:21;;;;:::i;:::-;31542:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31264:510;;31171:603;;:::o;31782:512::-;31945:20;31979:13;31945:48;;32036:9;:25;;;32069:9;32102:4;32122:11;32148:1;32191;32234:5;32272:3;32254:15;:21;;;;:::i;:::-;32036:250;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31934:360;31782:512;;;;:::o;19495:252::-;19559:21;;19535;:45;;;;19614:20;;19591;:43;;;;19671:23;;19645;:49;;;;19723:15;;19705;:33;;;;19495:252::o;20305:256::-;20370:22;;20346:21;:46;;;;20426:21;;20403:20;:44;;;;20484:24;;20458:23;:50;;;;20537:16;;20519:15;:34;;;;20305:256::o;20118:179::-;20185:1;20161:21;:25;;;;20220:1;20197:20;:24;;;;20258:1;20232:23;:27;;;;20288:1;20270:15;:19;;;;20118:179::o;24779:855::-;24915:19;24937:10;:8;:10::i;:::-;24915:32;;24958:23;24984:35;24996:22;25010:7;24996:13;:22::i;:::-;24984:7;:11;;:35;;;;:::i;:::-;24958:61;;25030:15;25048:24;25060:11;25048:7;:11;;:24;;;;:::i;:::-;25030:42;;25083:23;25109:76;25135:39;25162:11;25135:22;25149:7;25135:13;:22::i;:::-;:26;;:39;;;;:::i;:::-;25109:7;:11;;:76;;;;:::i;:::-;25083:102;;25196:49;25218:9;25229:15;25196:21;:49::i;:::-;25274:28;25294:7;25274;:15;25282:6;25274:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25256:7;:15;25264:6;25256:15;;;;;;;;;;;;;;;:46;;;;25331:28;25351:7;25331:15;;:19;;:28;;;;:::i;:::-;25313:15;:46;;;;25391:39;25414:15;25391:7;:18;25399:9;25391:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25370:7;:18;25378:9;25370:18;;;;;;;;;;;;;;;:60;;;;25441:40;25453:6;25460:7;25469:11;25441;:40::i;:::-;25492:41;25505:6;25512:7;25521:11;25492:12;:41::i;:::-;25544:20;25556:7;25544:11;:20::i;:::-;25599:9;25582:44;;25591:6;25582:44;;;25610:15;25582:44;;;;;;:::i;:::-;;;;;;;;24904:730;;;;24779:855;;;:::o;26501:740::-;26635:19;26657:10;:8;:10::i;:::-;26635:32;;26678:23;26704:35;26716:22;26730:7;26716:13;:22::i;:::-;26704:7;:11;;:35;;;;:::i;:::-;26678:61;;26750:15;26768:24;26780:11;26768:7;:11;;:24;;;;:::i;:::-;26750:42;;26803:49;26825:9;26836:15;26803:21;:49::i;:::-;26881:28;26901:7;26881;:15;26889:6;26881:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26863:7;:15;26871:6;26863:15;;;;;;;;;;;;;;;:46;;;;26941:39;26964:15;26941:7;:18;26949:9;26941:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26920:7;:18;26928:9;26920:18;;;;;;;;;;;;;;;:60;;;;27009:28;27029:7;27009:15;;:19;;:28;;;;:::i;:::-;26991:15;:46;;;;27048:40;27060:6;27067:7;27076:11;27048;:40::i;:::-;27099:41;27112:6;27119:7;27128:11;27099:12;:41::i;:::-;27151:20;27163:7;27151:11;:20::i;:::-;27206:9;27189:44;;27198:6;27189:44;;;27217:15;27189:44;;;;;;:::i;:::-;;;;;;;;26624:617;;;26501:740;;;:::o;25703:746::-;25839:19;25861:10;:8;:10::i;:::-;25839:32;;25882:23;25908:35;25920:22;25934:7;25920:13;:22::i;:::-;25908:7;:11;;:35;;;;:::i;:::-;25882:61;;25954:49;25976:9;25987:15;25954:21;:49::i;:::-;26032:28;26052:7;26032;:15;26040:6;26032:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26014:7;:15;26022:6;26014:15;;;;;;;;;;;;;;;:46;;;;26089:28;26109:7;26089:15;;:19;;:28;;;;:::i;:::-;26071:15;:46;;;;26149:39;26172:15;26149:7;:18;26157:9;26149:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26128:7;:18;26136:9;26128:18;;;;;;;;;;;;;;;:60;;;;26217:28;26237:7;26217:15;;:19;;:28;;;;:::i;:::-;26199:15;:46;;;;26256:40;26268:6;26275:7;26284:11;26256;:40::i;:::-;26307:41;26320:6;26327:7;26336:11;26307:12;:41::i;:::-;26359:20;26371:7;26359:11;:20::i;:::-;26414:9;26397:44;;26406:6;26397:44;;;26425:15;26397:44;;;;;;:::i;:::-;;;;;;;;25828:621;;25703:746;;;:::o;23937:792::-;24069:19;24091:10;:8;:10::i;:::-;24069:32;;24112:23;24138:35;24150:22;24164:7;24150:13;:22::i;:::-;24138:7;:11;;:35;;;;:::i;:::-;24112:61;;24184:15;24202:24;24214:11;24202:7;:11;;:24;;;;:::i;:::-;24184:42;;24237:23;24263:76;24289:39;24316:11;24289:22;24303:7;24289:13;:22::i;:::-;:26;;:39;;;;:::i;:::-;24263:7;:11;;:76;;;;:::i;:::-;24237:102;;24350:49;24372:9;24383:15;24350:21;:49::i;:::-;24428:28;24448:7;24428;:15;24436:6;24428:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24410:7;:15;24418:6;24410:15;;;;;;;;;;;;;;;:46;;;;24488:39;24511:15;24488:7;:18;24496:9;24488:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24467:7;:18;24475:9;24467:18;;;;;;;;;;;;;;;:60;;;;24538:40;24550:6;24557:7;24566:11;24538;:40::i;:::-;24589:41;24602:6;24609:7;24618:11;24589:12;:41::i;:::-;24641:20;24653:7;24641:11;:20::i;:::-;24694:9;24677:44;;24686:6;24677:44;;;24705:15;24677:44;;;;;;:::i;:::-;;;;;;;;24058:671;;;;23937:792;;;:::o;18899:414::-;19000:27;:31;19028:2;19000:31;;;;;;;;;;;;;;;;;;;;;;;;;18981:325;;19082:19;;;;;;;;;;;19078:217;;;19181:16;;19152:25;19170:6;19152:13;19162:2;19152:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:45;;19122:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;19078:217;18981:325;18899:414;;:::o;27619:863::-;27713:12;27728:99;27823:3;27728:76;27754:49;27779:23;;27754:20;;:24;;:49;;;;:::i;:::-;27728:7;:25;;:76;;;;:::i;:::-;:94;;:99;;;;:::i;:::-;27713:114;;27851:1;27844:4;:8;27840:635;;;27893:101;27937:42;27975:3;27937:33;27949:20;;27937:7;:11;;:33;;;;:::i;:::-;:37;;:42;;;;:::i;:::-;27893:21;;:25;;:101;;;;:::i;:::-;27869:21;:125;;;;28036:107;28083:45;28124:3;28083:36;28095:23;;28083:7;:11;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;28036:24;;:28;;:107;;;;:::i;:::-;28009:24;:134;;;;28160:12;28175:21;28184:11;28175:4;:8;;:21;;;;:::i;:::-;28160:36;;28215:21;:36;28245:4;28215:36;;;;;;;;;;;;;;;;;;;;;;;;;28211:193;;;28295:32;28322:4;28295:7;:22;28311:4;28295:22;;;;;;;;;;;;;;;;:26;;:32;;;;:::i;:::-;28270:7;:22;28286:4;28270:22;;;;;;;;;;;;;;;:57;;;;28211:193;;;28372:32;28399:4;28372:7;:22;28388:4;28372:22;;;;;;;;;;;;;;;;:26;;:32;;;;:::i;:::-;28347:7;:22;28363:4;28347:22;;;;;;;;;;;;;;;:57;;;;28211:193;28451:4;28426:37;;28435:6;28426:37;;;28458:4;28426:37;;;;;;:::i;:::-;;;;;;;;27854:621;27840:635;27702:780;27619:863;;;:::o;28487:336::-;28582:15;28600:37;28633:3;28600:28;28612:15;;28600:7;:11;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;28582:55;;28648:16;28667:24;28679:11;28667:7;:11;;:24;;;;:::i;:::-;28648:43;;28725:34;28750:8;28725:7;:20;28733:11;;;;;;;;;;;28725:20;;;;;;;;;;;;;;;;:24;;:34;;;;:::i;:::-;28702:7;:20;28710:11;;;;;;;;;;;28702:20;;;;;;;;;;;;;;;:57;;;;28794:11;;;;;;;;;;;28777:38;;28786:6;28777:38;;;28807:7;28777:38;;;;;;:::i;:::-;;;;;;;;28571:252;;28487:336;;;:::o;27315:251::-;27372:12;27387:43;27426:3;27387:34;27399:21;;27387:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;27372:58;;27441:12;27456:20;27465:10;:8;:10::i;:::-;27456:4;:8;;:20;;;;:::i;:::-;27441:35;;27497:17;27509:4;27497:7;;:11;;:17;;;;:::i;:::-;27487:7;:27;;;;27538:20;27553:4;27538:10;;:14;;:20;;;;:::i;:::-;27525:10;:33;;;;27361:205;;27315: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://30b50f52c86078844c211f7b267fcd4298023fb3ece3dfe41dd9451c909d7e5c
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.