Token Degen Brain Finance

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
100,000,000 DBF

Holders:
626 addresses
Balance
337.388905365515408305 DBF

Value
$0.00
0x5345d5a36e163d1c277e2ec171974d455708664b
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Degen Brain Finance is the first gamified Learn2Earn web3 project on Cronos that incorporates NFT Avatars (DegenBrains), staking utility, our own CRC-20 Token, and a growing community of like-minded investors.


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

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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 add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

   
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }


    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}


library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

library Address {
  
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

    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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

    function owner() public view 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;
    }

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


interface IUniswapV2Router02 is IUniswapV2Router01 {

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


contract Token is Context, IERC20, Ownable {

    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    using Address for address;
    using SafeERC20 for IERC20;
    
    address immutable dead = 0x000000000000000000000000000000000000dEaD;
    address immutable zero = 0x0000000000000000000000000000000000000000;
    
    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;
    address[] private _excluded;

    address public router = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30;
    
    uint256 private constant MAX = ~uint256(0);
    
    uint256 private _tFeeTotal;

    string public constant _name ="Degen Brain Finance";
    string public constant _symbol = "DBF";
    uint8 private constant _decimals = 18;

    uint256 public _tTotal = 100_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint8 private _taxFee = 0;                           
    uint8 private _previousTaxFee = _taxFee;

    uint8 private _MarketingFee = 0;
    uint8 private _previousMarketingFee = _MarketingFee;

    IUniswapV2Router02 public pcsV2Router;
    address public pcsV2Pair;

    mapping (address => bool) public isMarketPair;

    address public MarketingWallet = 0x6Bd7D7D302357217b52B629ce54d854cD288532A;

    struct BuyFee{
        uint8 setTaxFee;
        uint8 setMarketingFee;     
    }

    struct SellFee{
        uint8 setTaxFee;
        uint8 setMarketingFee;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    constructor ()  {       
        
        _rOwned[_msgSender()] = _rTotal;

        buyFee.setTaxFee = 0;
        buyFee.setMarketingFee = 0;

        sellFee.setTaxFee = 75;
        sellFee.setMarketingFee = 75;
                
        IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(router);
		
        pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory())
            .createPair(address(this), _pcsV2Router.WETH());

        pcsV2Router = _pcsV2Router;

        isMarketPair[pcsV2Pair] = true;
        
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(0xdead)] = true;
        _isExcludedFromFee[address(0x0)] = true;

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

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

    function updatePcsV2Router(address newAddress) public onlyOwner {
        require(
        newAddress != address(pcsV2Router),
        "The router already has that address"
        );
        IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(newAddress);
		
        pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory())
            .createPair(address(this), _pcsV2Router.WETH());

        pcsV2Router = _pcsV2Router;
    }

    function setMarketPair(address _adr, bool status) public onlyOwner {
        isMarketPair[_adr] = status;
    }

    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 tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

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

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amt must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amt must be less than tot refl");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Already 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 setBuyFeePercent(uint8 taxFee,uint8 marketingFee) external onlyOwner() {   
        buyFee.setTaxFee = taxFee;
        buyFee.setMarketingFee = marketingFee; 
    }

    function setSellFeePercent(uint8 taxFee, uint8 marketingFee) external onlyOwner() {
        sellFee.setTaxFee = taxFee;
        sellFee.setMarketingFee = marketingFee;
    }

    function setFeeWallet(address payable newFeeWallet) external onlyOwner {
        require(newFeeWallet != address(0), "ZERO ADDRESS");
        MarketingWallet = newFeeWallet;
    }
    
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tMarketing, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tMarketing = calculateMarketingFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing);
        return (tTransferAmount, tFee, tMarketing);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(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.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[MarketingWallet] = _rOwned[MarketingWallet].add(rMarketing);
        if(_isExcluded[MarketingWallet])
            _tOwned[MarketingWallet] = _tOwned[MarketingWallet].add(tMarketing);

    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**3
        );
    }

    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_MarketingFee).div(
            10**3
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _MarketingFee == 0 ) return;  
        
        _previousTaxFee = _taxFee;
        _previousMarketingFee = _MarketingFee;

        _taxFee = 0;
        _MarketingFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _MarketingFee = _previousMarketingFee;
    }

    function setBuy () private {
        _taxFee = buyFee.setTaxFee;
        _MarketingFee = buyFee.setMarketingFee;
    }
    
    function setSell() private {
        _taxFee = sellFee.setTaxFee;
        _MarketingFee = sellFee.setMarketingFee;
    }

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "CRC20: transfer from zero address");
        require(to != address(0), "CRC20: transfer to zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        bool takeFee = true;
        
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }        

        _tokenTransfer(from,to,amount,takeFee);

    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        
            removeAllFee();

            if (takeFee){

                if (isMarketPair[sender]) {
                    setBuy();
                }
                else if (isMarketPair[recipient]) {
                    setSell();
                }
                
            } 
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
	
    function _tokenTransferNoFee(address sender, address recipient, uint256 amount) private {
        uint256 currentRate =  _getRate();  
        uint256 rAmount = amount.mul(currentRate);   

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rAmount); 
        
        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        } 
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        } 
        emit Transfer(sender, recipient, amount);
    }

    function recoverFunds() public onlyOwner {
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os);
    }

    function recoverCRC20(address tokenAddress, uint256 tokenAmount) public onlyOwner {
        IERC20(tokenAddress).transfer(msg.sender, tokenAmount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"buyFee","outputs":[{"internalType":"uint8","name":"setTaxFee","type":"uint8"},{"internalType":"uint8","name":"setMarketingFee","type":"uint8"}],"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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","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":"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":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","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":"pcsV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverCRC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"setTaxFee","type":"uint8"},{"internalType":"uint8","name":"setMarketingFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"taxFee","type":"uint8"},{"internalType":"uint8","name":"marketingFee","type":"uint8"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"taxFee","type":"uint8"},{"internalType":"uint8","name":"marketingFee","type":"uint8"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updatePcsV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526ddead000000000000000000000000608052600060a052600980546001600160a01b03191673145677fc4d9b8f19b5d56d1820c48e0443049a301790556200004f6012600a620004f7565b6200005f906305f5e100620005e2565b600b81905562000072906000196200061e565b620000809060001962000604565b600c55600d805463010000006201000062ffffff1983160460ff160263ffffffff19909116179055601080546001600160a01b031916736bd7d7d302357217b52b629ce54d854cd288532a179055348015620000db57600080fd5b506000620000e862000453565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c54600360006200014362000453565b6001600160a01b0390811682526020808301939093526040918201600020939093556011805461ffff1916905560128054614b0060ff1991909116604b1761ff001916179055600954815163c45a015560e01b81529151931692839263c45a01559260048082019391829003018186803b158015620001c157600080fd5b505afa158015620001d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fc919062000457565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024557600080fd5b505afa1580156200025a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000280919062000457565b6040518363ffffffff1660e01b81526004016200029f92919062000487565b602060405180830381600087803b158015620002ba57600080fd5b505af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000457565b600e80546001600160a01b0319166001600160a01b039283161790819055600d8054600160201b600160c01b03191664010000000085851602179055166000908152600f60205260408120805460ff19166001908117909155906006906200035c62000453565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600690925281208054831660019081179091557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548416821790559080527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f88054909216179055620003fd62000453565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620004449190620004a1565b60405180910390a35062000655565b3390565b60006020828403121562000469578081fd5b81516001600160a01b038116811462000480578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b80825b6001808611620004be5750620004ee565b818704821115620004d357620004d36200063f565b80861615620004e157918102915b9490941c938002620004ad565b94509492505050565b60006200048060001960ff851684600082620005165750600162000480565b81620005255750600062000480565b81600181146200053e576002811462000549576200057d565b600191505062000480565b60ff8411156200055d576200055d6200063f565b6001841b9150848211156200057657620005766200063f565b5062000480565b5060208310610133831016604e8410600b8410161715620005b5575081810a83811115620005af57620005af6200063f565b62000480565b620005c48484846001620004aa565b808604821115620005d957620005d96200063f565b02949350505050565b6000816000190483118215151615620005ff57620005ff6200063f565b500290565b6000828210156200061957620006196200063f565b500390565b6000826200063a57634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60805160601c60a05160601c61293c6200067b600039600050506000505061293c6000f3fe60806040526004361061024a5760003560e01c806352390c0211610139578063a9059cbb116100b6578063caebb8431161007a578063caebb8431461066b578063d28d88521461068b578063dd62ed3e146106a0578063ea2f0b37146106c0578063f2fde38b146106e0578063f887ea401461070057610251565b8063a9059cbb146105ec578063af465a271461060c578063b09f126614610621578063b79550be14610636578063c16dd4a41461064b57610251565b806388f82020116100fd57806388f82020146105625780638da5cb5b1461058257806390d49b9d1461059757806395d89b41146105b7578063a457c2d7146105cc57610251565b806352390c02146104cd5780635342acb4146104ed5780635f848bd21461050d57806370a082311461052d578063715018a61461054d57610251565b8063313ce567116101c75780633ecad2711161018b5780633ecad27114610443578063437823ec146104635780634549b0391461048357806347062402146104a357806352143290146104b857610251565b8063313ce567146103a1578063349656a8146103c35780633685d419146103e357806339509351146104035780633bd5d1731461042357610251565b806323b872dd1161020e57806323b872dd146103075780632598cdb2146103275780632b14ca56146103495780632d6abf871461036c5780632d8381191461038157610251565b806306fdde0314610256578063095ea7b31461028157806313114a9d146102ae57806318138246146102d057806318160ddd146102f257610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b610715565b60405161027891906123c5565b60405180910390f35b34801561028d57600080fd5b506102a161029c3660046122bb565b610742565b60405161027891906123ba565b3480156102ba57600080fd5b506102c3610760565b60405161027891906127cc565b3480156102dc57600080fd5b506102f06102eb36600461233e565b610766565b005b3480156102fe57600080fd5b506102c36107c9565b34801561031357600080fd5b506102a161032236600461224e565b6107cf565b34801561033357600080fd5b5061033c610856565b6040516102789190612373565b34801561035557600080fd5b5061035e610865565b6040516102789291906127e3565b34801561037857600080fd5b5061033c610877565b34801561038d57600080fd5b506102c361039c366004612302565b61088e565b3480156103ad57600080fd5b506103b66108d1565b60405161027891906127d5565b3480156103cf57600080fd5b506102f06103de36600461233e565b6108d6565b3480156103ef57600080fd5b506102f06103fe3660046121de565b610930565b34801561040f57600080fd5b506102a161041e3660046122bb565b610afb565b34801561042f57600080fd5b506102f061043e366004612302565b610b49565b34801561044f57600080fd5b506102a161045e3660046121de565b610c04565b34801561046f57600080fd5b506102f061047e3660046121de565b610c19565b34801561048f57600080fd5b506102c361049e36600461231a565b610c72565b3480156104af57600080fd5b5061035e610ccf565b3480156104c457600080fd5b5061033c610ce1565b3480156104d957600080fd5b506102f06104e83660046121de565b610cf0565b3480156104f957600080fd5b506102a16105083660046121de565b610e1e565b34801561051957600080fd5b506102f06105283660046122bb565b610e3c565b34801561053957600080fd5b506102c36105483660046121de565b610ef6565b34801561055957600080fd5b506102f0610f58565b34801561056e57600080fd5b506102a161057d3660046121de565b610fd7565b34801561058e57600080fd5b5061033c610ff5565b3480156105a357600080fd5b506102f06105b23660046121de565b611004565b3480156105c357600080fd5b5061026b611081565b3480156105d857600080fd5b506102a16105e73660046122bb565b61109e565b3480156105f857600080fd5b506102a16106073660046122bb565b611106565b34801561061857600080fd5b506102c361111a565b34801561062d57600080fd5b5061026b611120565b34801561064257600080fd5b506102f061113f565b34801561065757600080fd5b506102f061066636600461228e565b6111e0565b34801561067757600080fd5b506102f06106863660046121de565b611240565b34801561069757600080fd5b5061026b611452565b3480156106ac57600080fd5b506102c36106bb366004612216565b611481565b3480156106cc57600080fd5b506102f06106db3660046121de565b6114ac565b3480156106ec57600080fd5b506102f06106fb3660046121de565b611502565b34801561070c57600080fd5b5061033c6115b8565b604080518082019091526013815272446567656e20427261696e2046696e616e636560681b602082015290565b600061075661074f6115c7565b84846115cb565b5060015b92915050565b600a5490565b61076e6115c7565b6000546001600160a01b039081169116146107a45760405162461bcd60e51b815260040161079b906125f8565b60405180910390fd5b6012805460ff9283166101000261ff00199490931660ff199091161792909216179055565b600b5490565b60006107dc84848461167f565b61084c846107e86115c7565b610847856040518060600160405280602881526020016128df602891396001600160a01b038a166000908152600560205260408120906108266115c7565b6001600160a01b031681526020810191909152604001600020549190611748565b6115cb565b5060019392505050565b6010546001600160a01b031681565b60125460ff8082169161010090041682565b600d5464010000000090046001600160a01b031681565b6000600c548211156108b25760405162461bcd60e51b815260040161079b90612580565b60006108bc611782565b90506108c883826117a5565b9150505b919050565b601290565b6108de6115c7565b6000546001600160a01b0390811691161461090b5760405162461bcd60e51b815260040161079b906125f8565b6011805460ff9283166101000261ff00199490931660ff199091161792909216179055565b6109386115c7565b6000546001600160a01b039081169116146109655760405162461bcd60e51b815260040161079b906125f8565b6001600160a01b03811660009081526007602052604090205460ff1661099d5760405162461bcd60e51b815260040161079b90612556565b60005b600854811015610af757816001600160a01b0316600882815481106109d557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610ae55760088054610a009060019061284e565b81548110610a1e57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610a5857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610abe57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610af7565b80610aef81612865565b9150506109a0565b5050565b6000610756610b086115c7565b846108478560056000610b196115c7565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906117ee565b6000610b536115c7565b6001600160a01b03811660009081526007602052604090205490915060ff1615610b8f5760405162461bcd60e51b815260040161079b90612780565b6000610b9a8361181d565b505050506001600160a01b038416600090815260036020526040902054919250610bc69190508261186c565b6001600160a01b038316600090815260036020526040902055600c54610bec908261186c565b600c55600a54610bfc90846117ee565b600a55505050565b600f6020526000908152604090205460ff1681565b610c216115c7565b6000546001600160a01b03908116911614610c4e5760405162461bcd60e51b815260040161079b906125f8565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b54831115610c965760405162461bcd60e51b815260040161079b9061245f565b81610cb5576000610ca68461181d565b5093955061075a945050505050565b6000610cc08461181d565b5092955061075a945050505050565b60115460ff8082169161010090041682565b600e546001600160a01b031681565b610cf86115c7565b6000546001600160a01b03908116911614610d255760405162461bcd60e51b815260040161079b906125f8565b6001600160a01b03811660009081526007602052604090205460ff1615610d5e5760405162461bcd60e51b815260040161079b90612418565b6001600160a01b03811660009081526003602052604090205415610db8576001600160a01b038116600090815260036020526040902054610d9e9061088e565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b610e446115c7565b6000546001600160a01b03908116911614610e715760405162461bcd60e51b815260040161079b906125f8565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90610e9f90339085906004016123a1565b602060405180830381600087803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef191906122e6565b505050565b6001600160a01b03811660009081526007602052604081205460ff1615610f3657506001600160a01b0381166000908152600460205260409020546108cc565b6001600160a01b03821660009081526003602052604090205461075a9061088e565b610f606115c7565b6000546001600160a01b03908116911614610f8d5760405162461bcd60e51b815260040161079b906125f8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b61100c6115c7565b6000546001600160a01b039081169116146110395760405162461bcd60e51b815260040161079b906125f8565b6001600160a01b03811661105f5760405162461bcd60e51b815260040161079b906126ec565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600381526222212360e91b602082015290565b60006107566110ab6115c7565b84610847856040518060600160405280602581526020016128ba60259139600560006110d56115c7565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611748565b60006107566111136115c7565b848461167f565b600b5481565b6040518060400160405280600381526020016222212360e91b81525081565b6111476115c7565b6000546001600160a01b039081169116146111745760405162461bcd60e51b815260040161079b906125f8565b6000336001600160a01b03164760405161118d90612370565b60006040518083038185875af1925050503d80600081146111ca576040519150601f19603f3d011682016040523d82523d6000602084013e6111cf565b606091505b50509050806111dd57600080fd5b50565b6111e86115c7565b6000546001600160a01b039081169116146112155760405162461bcd60e51b815260040161079b906125f8565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6112486115c7565b6000546001600160a01b039081169116146112755760405162461bcd60e51b815260040161079b906125f8565b600d546001600160a01b038281166401000000009092041614156112ab5760405162461bcd60e51b815260040161079b90612513565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e957600080fd5b505afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132191906121fa565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561136957600080fd5b505afa15801561137d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a191906121fa565b6040518363ffffffff1660e01b81526004016113be929190612387565b602060405180830381600087803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141091906121fa565b600e80546001600160a01b0319166001600160a01b03928316179055600d8054640100000000600160c01b031916640100000000939092169290920217905550565b60405180604001604052806013815260200172446567656e20427261696e2046696e616e636560681b81525081565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6114b46115c7565b6000546001600160a01b039081169116146114e15760405162461bcd60e51b815260040161079b906125f8565b6001600160a01b03166000908152600660205260409020805460ff19169055565b61150a6115c7565b6000546001600160a01b039081169116146115375760405162461bcd60e51b815260040161079b906125f8565b6001600160a01b03811661155d5760405162461bcd60e51b815260040161079b90612496565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031681565b3390565b6001600160a01b0383166115f15760405162461bcd60e51b815260040161079b906126b7565b6001600160a01b0382166116175760405162461bcd60e51b815260040161079b90612749565b6001600160a01b0380841660008181526005602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906116729085906127cc565b60405180910390a3505050565b6001600160a01b0383166116a55760405162461bcd60e51b815260040161079b9061262d565b6001600160a01b0382166116cb5760405162461bcd60e51b815260040161079b90612712565b600081116116eb5760405162461bcd60e51b815260040161079b9061266e565b6001600160a01b03831660009081526006602052604090205460019060ff168061172d57506001600160a01b03831660009081526006602052604090205460ff165b15611736575060005b611742848484846118ae565b50505050565b6000818484111561176c5760405162461bcd60e51b815260040161079b91906123c5565b506000611779848661284e565b95945050505050565b600080600061178f611a74565b909250905061179e82826117a5565b9250505090565b60006117e783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c31565b9392505050565b6000806117fb83856127f7565b9050838110156117e75760405162461bcd60e51b815260040161079b906124dc565b60008060008060008060008060006118348a611c5f565b92509250925060008060006118528d868661184d611782565b611ca1565b919f909e50909c50959a5093985091965092945050505050565b60006117e783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611748565b6118b6611cf1565b8015611913576001600160a01b0384166000908152600f602052604090205460ff16156118ea576118e5611d50565b611913565b6001600160a01b0383166000908152600f602052604090205460ff161561191357611913611d80565b6001600160a01b03841660009081526007602052604090205460ff16801561195457506001600160a01b03831660009081526007602052604090205460ff16155b1561196957611964848484611db0565b611a67565b6001600160a01b03841660009081526007602052604090205460ff161580156119aa57506001600160a01b03831660009081526007602052604090205460ff165b156119ba57611964848484611ed4565b6001600160a01b03841660009081526007602052604090205460ff161580156119fc57506001600160a01b03831660009081526007602052604090205460ff16155b15611a0c57611964848484611f7d565b6001600160a01b03841660009081526007602052604090205460ff168015611a4c57506001600160a01b03831660009081526007602052604090205460ff165b15611a5c57611964848484611fc1565b611a67848484611f7d565b8061174257611742612034565b600c54600b546000918291825b600854811015611bff57826003600060088481548110611ab157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611b2a5750816004600060088481548110611b0357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611b4157600c54600b5494509450505050611c2d565b611b956003600060088481548110611b6957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061186c565b9250611beb6004600060088481548110611bbf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061186c565b915080611bf781612865565b915050611a81565b50600b54600c54611c0f916117a5565b821015611c2757600c54600b54935093505050611c2d565b90925090505b9091565b60008183611c525760405162461bcd60e51b815260040161079b91906123c5565b506000611779848661280f565b600080600080611c6e85612065565b90506000611c7b86612087565b90506000611c9382611c8d898661186c565b9061186c565b979296509094509092505050565b6000808080611cb088866120a5565b90506000611cbe88876120a5565b90506000611ccc88886120a5565b90506000611cde82611c8d868661186c565b939b939a50919850919650505050505050565b600d5460ff16158015611d0d5750600d5462010000900460ff16155b15611d1757611d4e565b600d805463ff0000001961ff0019821661010060ff9384160217908116620100009091049091166301000000021762ff00ff191690555b565b601154600d805460ff80841660ff199092169190911762ff00001916610100909304166201000002919091179055565b601254600d805460ff80841660ff199092169190911762ff00001916610100909304166201000002919091179055565b600080600080600080611dc28761181d565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150611df4908861186c565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054611e23908761186c565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054611e5290866117ee565b6001600160a01b038916600090815260036020526040902055611e74816120ea565b611e7e84836121a9565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611ec191906127cc565b60405180910390a3505050505050505050565b600080600080600080611ee68761181d565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150611f18908761186c565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054611f4e90846117ee565b6001600160a01b038916600090815260046020908152604080832093909355600390522054611e5290866117ee565b600080600080600080611f8f8761181d565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150611e23908761186c565b600080600080600080611fd38761181d565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612005908861186c565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054611f18908761186c565b600d805462010000630100000060ff19831660ff6101009094048416179081049092160262ff000019909116179055565b600d5460009061075a906103e89061208190859060ff166120a5565b906117a5565b600d5460009061075a906103e89061208190859062010000900460ff165b6000826120b45750600061075a565b60006120c0838561282f565b9050826120cd858361280f565b146117e75760405162461bcd60e51b815260040161079b906125b7565b60006120f4611782565b9050600061210283836120a5565b6010546001600160a01b031660009081526003602052604090205490915061212a90826117ee565b601080546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615610ef1576010546001600160a01b031660009081526004602052604090205461218990846117ee565b6010546001600160a01b0316600090815260046020526040902055505050565b600c546121b6908361186c565b600c55600a546121c690826117ee565b600a555050565b803560ff811681146108cc57600080fd5b6000602082840312156121ef578081fd5b81356117e781612896565b60006020828403121561220b578081fd5b81516117e781612896565b60008060408385031215612228578081fd5b823561223381612896565b9150602083013561224381612896565b809150509250929050565b600080600060608486031215612262578081fd5b833561226d81612896565b9250602084013561227d81612896565b929592945050506040919091013590565b600080604083850312156122a0578182fd5b82356122ab81612896565b91506020830135612243816128ab565b600080604083850312156122cd578182fd5b82356122d881612896565b946020939093013593505050565b6000602082840312156122f7578081fd5b81516117e7816128ab565b600060208284031215612313578081fd5b5035919050565b6000806040838503121561232c578182fd5b823591506020830135612243816128ab565b60008060408385031215612350578182fd5b612359836121cd565b9150612367602084016121cd565b90509250929050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b818110156123f1578581018301518582016040015282016123d5565b818111156124025783604083870101525b50601f01601f1916929092016040019392505050565b60208082526027908201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604082015266081c995dd85c9960ca1b606082015260800190565b6020808252601c908201527f416d74206d757374206265206c657373207468616e20737570706c7900000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526023908201527f54686520726f7574657220616c7265616479206861732074686174206164647260408201526265737360e81b606082015260800190565b60208082526010908201526f105b1c9958591e48195e18db1d59195960821b604082015260600190565b6020808252601e908201527f416d74206d757374206265206c657373207468616e20746f74207265666c0000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f43524332303a207472616e736665722066726f6d207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252818101527f43524332303a20617070726f76652066726f6d207a65726f2061646472657373604082015260600190565b6020808252600c908201526b5a45524f204144445245535360a01b604082015260600190565b6020808252601f908201527f43524332303a207472616e7366657220746f207a65726f206164647265737300604082015260600190565b6020808252601e908201527f43524332303a20617070726f766520746f207a65726f20616464726573730000604082015260600190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b90815260200190565b60ff91909116815260200190565b60ff92831681529116602082015260400190565b6000821982111561280a5761280a612880565b500190565b60008261282a57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561284957612849612880565b500290565b60008282101561286057612860612880565b500390565b600060001982141561287957612879612880565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146111dd57600080fd5b80151581146111dd57600080fdfe43524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f43524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220681aab7f6950eea37eb3065e0e1d38c8ad5cfa5a95d5e64d28464afb8797ee0964736f6c63430008010033

Deployed ByteCode Sourcemap

15465:16915:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18077:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19555:161;;;;;;;;;;-1:-1:-1;19555:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20676:87::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23104:176::-;;;;;;;;;;-1:-1:-1;23104:176:0;;;;;:::i;:::-;;:::i;:::-;;18920:95;;;;;;;;;;;;;:::i;19724:313::-;;;;;;;;;;-1:-1:-1;19724:313:0;;;;;:::i;:::-;;:::i;16945:75::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17236:22::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;16814:37::-;;;;;;;;;;;;;:::i;21597:241::-;;;;;;;;;;-1:-1:-1;21597:241:0;;;;;:::i;:::-;;:::i;18829:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22920:176::-;;;;;;;;;;-1:-1:-1;22920:176:0;;;;;:::i;:::-;;:::i;22199:468::-;;;;;;;;;;-1:-1:-1;22199:468:0;;;;;:::i;:::-;;:::i;20045:218::-;;;;;;;;;;-1:-1:-1;20045:218:0;;;;;:::i;:::-;;:::i;20771:377::-;;;;;;;;;;-1:-1:-1;20771:377:0;;;;;:::i;:::-;;:::i;16891:45::-;;;;;;;;;;-1:-1:-1;16891:45:0;;;;;:::i;:::-;;:::i;22679:111::-;;;;;;;;;;-1:-1:-1;22679:111:0;;;;;:::i;:::-;;:::i;21156:433::-;;;;;;;;;;-1:-1:-1;21156:433:0;;;;;:::i;:::-;;:::i;17209:20::-;;;;;;;;;;;;;:::i;16858:24::-;;;;;;;;;;;;;:::i;21846:345::-;;;;;;;;;;-1:-1:-1;21846:345:0;;;;;:::i;:::-;;:::i;26993:123::-;;;;;;;;;;-1:-1:-1;26993:123:0;;;;;:::i;:::-;;:::i;32216:155::-;;;;;;;;;;-1:-1:-1;32216:155:0;;;;;:::i;:::-;;:::i;19023:198::-;;;;;;;;;;-1:-1:-1;19023:198:0;;;;;:::i;:::-;;:::i;9537:148::-;;;;;;;;;;;;;:::i;20548:120::-;;;;;;;;;;-1:-1:-1;20548:120:0;;;;;:::i;:::-;;:::i;9323:79::-;;;;;;;;;;;;;:::i;23288:182::-;;;;;;;;;;-1:-1:-1;23288:182:0;;;;;:::i;:::-;;:::i;18734:87::-;;;;;;;;;;;;;:::i;20271:269::-;;;;;;;;;;-1:-1:-1;20271:269:0;;;;;:::i;:::-;;:::i;19229:167::-;;;;;;;;;;-1:-1:-1;19229:167:0;;;;;:::i;:::-;;:::i;16492:52::-;;;;;;;;;;;;;:::i;16401:38::-;;;;;;;;;;;;;:::i;32055:153::-;;;;;;;;;;;;;:::i;18613:113::-;;;;;;;;;;-1:-1:-1;18613:113:0;;;;;:::i;:::-;;:::i;18168:437::-;;;;;;;;;;-1:-1:-1;18168:437:0;;;;;:::i;:::-;;:::i;16343:51::-;;;;;;;;;;;;;:::i;19404:143::-;;;;;;;;;;-1:-1:-1;19404:143:0;;;;;:::i;:::-;;:::i;22802:110::-;;;;;;;;;;-1:-1:-1;22802:110:0;;;;;:::i;:::-;;:::i;9693:244::-;;;;;;;;;;-1:-1:-1;9693:244:0;;;;;:::i;:::-;;:::i;16174:66::-;;;;;;;;;;;;;:::i;18077:83::-;18147:5;;;;;;;;;;;;-1:-1:-1;;;18147:5:0;;;;18077:83;:::o;19555:161::-;19630:4;19647:39;19656:12;:10;:12::i;:::-;19670:7;19679:6;19647:8;:39::i;:::-;-1:-1:-1;19704:4:0;19555:161;;;;;:::o;20676:87::-;20745:10;;20676:87;:::o;23104:176::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;;;;;;;;;23197:7:::1;:26:::0;;::::1;23234:38:::0;;::::1;23197:26;23234:38;-1:-1:-1::0;;23197:26:0;;;::::1;-1:-1:-1::0;;23197:26:0;;::::1;;23234:38:::0;;;::::1;;::::0;;23104:176::o;18920:95::-;19000:7;;18920:95;:::o;19724:313::-;19822:4;19839:36;19849:6;19857:9;19868:6;19839:9;:36::i;:::-;19886:121;19895:6;19903:12;:10;:12::i;:::-;19917:89;19955:6;19917:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19917:19:0;;;;;;:11;:19;;;;;;19937:12;:10;:12::i;:::-;-1:-1:-1;;;;;19917:33:0;;;;;;;;;;;;-1:-1:-1;19917:33:0;;;:89;:37;:89::i;:::-;19886:8;:121::i;:::-;-1:-1:-1;20025:4:0;19724:313;;;;;:::o;16945:75::-;;;-1:-1:-1;;;;;16945:75:0;;:::o;17236:22::-;;;;;;;;;;;;;:::o;16814:37::-;;;;;;-1:-1:-1;;;;;16814:37:0;;:::o;21597:241::-;21663:7;21702;;21691;:18;;21683:61;;;;-1:-1:-1;;;21683:61:0;;;;;;;:::i;:::-;21755:19;21778:10;:8;:10::i;:::-;21755:33;-1:-1:-1;21806:24:0;:7;21755:33;21806:11;:24::i;:::-;21799:31;;;21597:241;;;;:::o;18829:83::-;16481:2;18829:83;:::o;22920:176::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;23014:6:::1;:25:::0;;::::1;23050:37:::0;;::::1;23014:25;23050:37;-1:-1:-1::0;;23014:25:0;;;::::1;-1:-1:-1::0;;23014:25:0;;::::1;;23050:37:::0;;;::::1;;::::0;;22920:176::o;22199:468::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22281:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22273:49;;;;-1:-1:-1::0;;;22273:49:0::1;;;;;;;:::i;:::-;22338:9;22333:327;22357:9;:16:::0;22353:20;::::1;22333:327;;;22415:7;-1:-1:-1::0;;;;;22399:23:0::1;:9;22409:1;22399:12;;;;;;-1:-1:-1::0;;;22399:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22399:12:0::1;:23;22395:254;;;22458:9;22468:16:::0;;:20:::1;::::0;22487:1:::1;::::0;22468:20:::1;:::i;:::-;22458:31;;;;;;-1:-1:-1::0;;;22458:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22443:9:::1;:12:::0;;-1:-1:-1;;;;;22458:31:0;;::::1;::::0;22453:1;;22443:12;::::1;;;-1:-1:-1::0;;;22443:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22443:46:0::1;-1:-1:-1::0;;;;;22443:46:0;;::::1;;::::0;;22508:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22547:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22547:28:0::1;::::0;;22594:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;22594:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22594:15:0;;;;;-1:-1:-1;;;;;;22594:15:0::1;::::0;;;;;22628:5:::1;;22395:254;22375:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22333:327;;;;22199:468:::0;:::o;20045:218::-;20133:4;20150:83;20159:12;:10;:12::i;:::-;20173:7;20182:50;20221:10;20182:11;:25;20194:12;:10;:12::i;:::-;-1:-1:-1;;;;;20182:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;20182:25:0;;;:34;;;;;;;;;;;:38;:50::i;20771:377::-;20823:14;20840:12;:10;:12::i;:::-;-1:-1:-1;;;;;20872:19:0;;;;;;:11;:19;;;;;;20823:29;;-1:-1:-1;20872:19:0;;20871:20;20863:77;;;;-1:-1:-1;;;20863:77:0;;;;;;;:::i;:::-;20952:15;20976:19;20987:7;20976:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21024:15:0;;;;;;:7;:15;;;;;;20951:44;;-1:-1:-1;21024:28:0;;:15;-1:-1:-1;20951:44:0;21024:19;:28::i;:::-;-1:-1:-1;;;;;21006:15:0;;;;;;:7;:15;;;;;:46;21073:7;;:20;;21085:7;21073:11;:20::i;:::-;21063:7;:30;21117:10;;:23;;21132:7;21117:14;:23::i;:::-;21104:10;:36;-1:-1:-1;;;20771:377:0:o;16891:45::-;;;;;;;;;;;;;;;:::o;22679:111::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22748:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22748:34:0::1;22778:4;22748:34;::::0;;22679:111::o;21156:433::-;21246:7;21285;;21274;:18;;21266:59;;;;-1:-1:-1;;;21266:59:0;;;;;;;:::i;:::-;21341:17;21336:246;;21376:15;21400:19;21411:7;21400:10;:19::i;:::-;-1:-1:-1;21375:44:0;;-1:-1:-1;21434:14:0;;-1:-1:-1;;;;;21434:14:0;21336:246;21483:23;21514:19;21525:7;21514:10;:19::i;:::-;-1:-1:-1;21481:52:0;;-1:-1:-1;21548:22:0;;-1:-1:-1;;;;;21548:22:0;17209:20;;;;;;;;;;;;;:::o;16858:24::-;;;-1:-1:-1;;;;;16858:24:0;;:::o;21846:345::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21929:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21928:21;21920:73;;;;-1:-1:-1::0;;;21920:73:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22007:16:0;::::1;22026:1;22007:16:::0;;;:7:::1;:16;::::0;;;;;:20;22004:108:::1;;-1:-1:-1::0;;;;;22083:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22063:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22044:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22004:108:::1;-1:-1:-1::0;;;;;22122:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22122:27:0::1;22145:4;22122:27:::0;;::::1;::::0;;;22160:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22160:23:0::1;::::0;;::::1;::::0;;21846:345::o;26993:123::-;-1:-1:-1;;;;;27081:27:0;27057:4;27081:27;;;:18;:27;;;;;;;;;26993:123::o;32216:155::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;32309:54:::1;::::0;-1:-1:-1;;;32309:54:0;;-1:-1:-1;;;;;32309:29:0;::::1;::::0;::::1;::::0;:54:::1;::::0;32339:10:::1;::::0;32351:11;;32309:54:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32216:155:::0;;:::o;19023:198::-;-1:-1:-1;;;;;19113:20:0;;19089:7;19113:20;;;:11;:20;;;;;;;;19109:49;;;-1:-1:-1;;;;;;19142:16:0;;;;;;:7;:16;;;;;;19135:23;;19109:49;-1:-1:-1;;;;;19196:16:0;;;;;;:7;:16;;;;;;19176:37;;:19;:37::i;9537:148::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;9644:1:::1;9628:6:::0;;9607:40:::1;::::0;-1:-1:-1;;;;;9628:6:0;;::::1;::::0;9607:40:::1;::::0;9644:1;;9607:40:::1;9675:1;9658:19:::0;;-1:-1:-1;;;;;;9658:19:0::1;::::0;;9537:148::o;20548:120::-;-1:-1:-1;;;;;20640:20:0;20616:4;20640:20;;;:11;:20;;;;;;;;;20548:120::o;9323:79::-;9361:7;9388:6;-1:-1:-1;;;;;9388:6:0;9323:79;:::o;23288:182::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23378:26:0;::::1;23370:51;;;;-1:-1:-1::0;;;23370:51:0::1;;;;;;;:::i;:::-;23432:15;:30:::0;;-1:-1:-1;;;;;;23432:30:0::1;-1:-1:-1::0;;;;;23432:30:0;;;::::1;::::0;;;::::1;::::0;;23288:182::o;18734:87::-;18806:7;;;;;;;;;;;;-1:-1:-1;;;18806:7:0;;;;18734:87;:::o;20271:269::-;20364:4;20381:129;20390:12;:10;:12::i;:::-;20404:7;20413:96;20452:15;20413:96;;;;;;;;;;;;;;;;;:11;:25;20425:12;:10;:12::i;:::-;-1:-1:-1;;;;;20413:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;20413:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;19229:167::-;19307:4;19324:42;19334:12;:10;:12::i;:::-;19348:9;19359:6;19324:9;:42::i;16492:52::-;;;;:::o;16401:38::-;;;;;;;;;;;;;;-1:-1:-1;;;16401:38:0;;;;:::o;32055:153::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;32108:7:::1;32128:10;-1:-1:-1::0;;;;;32120:24:0::1;32152:21;32120:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32107:71;;;32197:2;32189:11;;;::::0;::::1;;9520:1;32055:153::o:0;18613:113::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18691:18:0;;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:27;;-1:-1:-1;;18691:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18613:113::o;18168:437::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;18283:11:::1;::::0;-1:-1:-1;;;;;18261:34:0;;::::1;18283:11:::0;;;::::1;;18261:34;;18243:111;;;;-1:-1:-1::0;;;18243:111:0::1;;;;;;;:::i;:::-;18365:31;18418:10;18365:64;;18474:12;-1:-1:-1::0;;;;;18474:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18456:66:0::1;;18531:4;18538:12;-1:-1:-1::0;;;;;18538:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18456:102;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18444:9;:114:::0;;-1:-1:-1;;;;;;18444:114:0::1;-1:-1:-1::0;;;;;18444:114:0;;::::1;;::::0;;18571:11:::1;:26:::0;;-1:-1:-1;;;;;;18571:26:0::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;-1:-1:-1;18168:437:0:o;16343:51::-;;;;;;;;;;;;;;-1:-1:-1;;;16343:51:0;;;;:::o;19404:143::-;-1:-1:-1;;;;;19512:18:0;;;19485:7;19512:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19404:143::o;22802:110::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22869:27:0::1;22899:5;22869:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;22869:35:0::1;::::0;;22802:110::o;9693:244::-;9460:12;:10;:12::i;:::-;9450:6;;-1:-1:-1;;;;;9450:6:0;;;:22;;;9442:67;;;;-1:-1:-1;;;9442:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9782:22:0;::::1;9774:73;;;;-1:-1:-1::0;;;9774:73:0::1;;;;;;;:::i;:::-;9884:6;::::0;;9863:38:::1;::::0;-1:-1:-1;;;;;9863:38:0;;::::1;::::0;9884:6;::::1;::::0;9863:38:::1;::::0;::::1;9912:6;:17:::0;;-1:-1:-1;;;;;;9912:17:0::1;-1:-1:-1::0;;;;;9912:17:0;;;::::1;::::0;;;::::1;::::0;;9693:244::o;16174:66::-;;;-1:-1:-1;;;;;16174:66:0;;:::o;2267:124::-;2371:10;2267:124;:::o;27124:329::-;-1:-1:-1;;;;;27217:19:0;;27209:64;;;;-1:-1:-1;;;27209:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27292:21:0;;27284:64;;;;-1:-1:-1;;;27284:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27361:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;27413:32;;;;;27391:6;;27413:32;:::i;:::-;;;;;;;;27124:329;;;:::o;27461:549::-;-1:-1:-1;;;;;27583:18:0;;27575:64;;;;-1:-1:-1;;;27575:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27658:16:0;;27650:60;;;;-1:-1:-1;;;27650:60:0;;;;;;;:::i;:::-;27738:1;27729:6;:10;27721:64;;;;-1:-1:-1;;;27721:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27849:24:0;;27806:12;27849:24;;;:18;:24;;;;;;27821:4;;27849:24;;;:50;;-1:-1:-1;;;;;;27877:22:0;;;;;;:18;:22;;;;;;;;27849:50;27846:96;;;-1:-1:-1;27925:5:0;27846:96;27962:38;27977:4;27982:2;27985:6;27992:7;27962:14;:38::i;:::-;27461:549;;;;:::o;1120:192::-;1206:7;1242:12;1234:6;;;;1226:29;;;;-1:-1:-1;;;1226:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1266:9:0;1278:5;1282:1;1278;:5;:::i;:::-;1266:17;1120:192;-1:-1:-1;;;;;1120:192:0:o;24876:163::-;24917:7;24938:15;24955;24974:19;:17;:19::i;:::-;24937:56;;-1:-1:-1;24937:56:0;-1:-1:-1;25011:20:0;24937:56;;25011:11;:20::i;:::-;25004:27;;;;24876:163;:::o;1584:132::-;1642:7;1669:39;1673:1;1676;1669:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1662:46;1584:132;-1:-1:-1;;;1584:132:0:o;787:181::-;845:7;;877:5;881:1;877;:5;:::i;:::-;865:17;;906:1;901;:6;;893:46;;;;-1:-1:-1;;;893:46:0;;;;;;;:::i;23674:419::-;23733:7;23742;23751;23760;23769;23778;23799:23;23824:12;23838:18;23860:20;23872:7;23860:11;:20::i;:::-;23798:82;;;;;;23892:15;23909:23;23934:12;23950:50;23962:7;23971:4;23977:10;23989;:8;:10::i;:::-;23950:11;:50::i;:::-;23891:109;;;;-1:-1:-1;23891:109:0;;-1:-1:-1;24051:15:0;;-1:-1:-1;24068:4:0;;-1:-1:-1;24074:10:0;;-1:-1:-1;23674:419:0;;-1:-1:-1;;;;;23674:419:0:o;976:136::-;1034:7;1061:43;1065:1;1068;1061:43;;;;;;;;;;;;;;;;;:3;:43::i;28018:1086::-;28139:14;:12;:14::i;:::-;28174:7;28170:247;;;-1:-1:-1;;;;;28207:20:0;;;;;;:12;:20;;;;;;;;28203:181;;;28252:8;:6;:8::i;:::-;28203:181;;;-1:-1:-1;;;;;28307:23:0;;;;;;:12;:23;;;;;;;;28303:81;;;28355:9;:7;:9::i;:::-;-1:-1:-1;;;;;28442:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28466:22:0;;;;;;:11;:22;;;;;;;;28465:23;28442:46;28438:597;;;28505:48;28527:6;28535:9;28546:6;28505:21;:48::i;:::-;28438:597;;;-1:-1:-1;;;;;28576:19:0;;;;;;:11;:19;;;;;;;;28575:20;:46;;;;-1:-1:-1;;;;;;28599:22:0;;;;;;:11;:22;;;;;;;;28575:46;28571:464;;;28638:46;28658:6;28666:9;28677:6;28638:19;:46::i;28571:464::-;-1:-1:-1;;;;;28707:19:0;;;;;;:11;:19;;;;;;;;28706:20;:47;;;;-1:-1:-1;;;;;;28731:22:0;;;;;;:11;:22;;;;;;;;28730:23;28706:47;28702:333;;;28770:44;28788:6;28796:9;28807:6;28770:17;:44::i;28702:333::-;-1:-1:-1;;;;;28836:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28859:22:0;;;;;;:11;:22;;;;;;;;28836:45;28832:203;;;28898:48;28920:6;28928:9;28939:6;28898:21;:48::i;28832:203::-;28979:44;28997:6;29005:9;29016:6;28979:17;:44::i;:::-;29059:7;29055:41;;29081:15;:13;:15::i;25047:561::-;25144:7;;25180;;25097;;;;;25204:289;25228:9;:16;25224:20;;25204:289;;;25294:7;25270;:21;25278:9;25288:1;25278:12;;;;;;-1:-1:-1;;;25278:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25278:12:0;25270:21;;;;;;;;;;;;;:31;;:66;;;25329:7;25305;:21;25313:9;25323:1;25313:12;;;;;;-1:-1:-1;;;25313:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25313:12:0;25305:21;;;;;;;;;;;;;:31;25270:66;25266:97;;;25346:7;;25355;;25338:25;;;;;;;;;25266:97;25388:34;25400:7;:21;25408:9;25418:1;25408:12;;;;;;-1:-1:-1;;;25408:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25408:12:0;25400:21;;;;;;;;;;;;;25388:7;;:11;:34::i;:::-;25378:44;;25447:34;25459:7;:21;25467:9;25477:1;25467:12;;;;;;-1:-1:-1;;;25467:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25467:12:0;25459:21;;;;;;;;;;;;;25447:7;;:11;:34::i;:::-;25437:44;-1:-1:-1;25246:3:0;;;;:::i;:::-;;;;25204:289;;;-1:-1:-1;25529:7:0;;25517;;:20;;:11;:20::i;:::-;25507:7;:30;25503:61;;;25547:7;;25556;;25539:25;;;;;;;;25503:61;25583:7;;-1:-1:-1;25592:7:0;-1:-1:-1;25047:561:0;;;:::o;1724:191::-;1810:7;1845:12;1838:5;1830:28;;;;-1:-1:-1;;;1830:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1869:9:0;1881:5;1885:1;1881;:5;:::i;24101:330::-;24161:7;24170;24179;24199:12;24214:24;24230:7;24214:15;:24::i;:::-;24199:39;;24249:18;24270:30;24292:7;24270:21;:30::i;:::-;24249:51;-1:-1:-1;24311:23:0;24337:33;24249:51;24337:17;:7;24349:4;24337:11;:17::i;:::-;:21;;:33::i;:::-;24311:59;24406:4;;-1:-1:-1;24412:10:0;;-1:-1:-1;24101:330:0;;-1:-1:-1;;;24101:330:0:o;24439:429::-;24554:7;;;;24610:24;:7;24622:11;24610;:24::i;:::-;24592:42;-1:-1:-1;24645:12:0;24660:21;:4;24669:11;24660:8;:21::i;:::-;24645:36;-1:-1:-1;24692:18:0;24713:27;:10;24728:11;24713:14;:27::i;:::-;24692:48;-1:-1:-1;24751:23:0;24777:33;24692:48;24777:17;:7;24789:4;24777:11;:17::i;:33::-;24829:7;;;;-1:-1:-1;24855:4:0;;-1:-1:-1;24439:429:0;;-1:-1:-1;;;;;;;24439:429:0:o;26339:245::-;26385:7;;;;:12;:34;;;;-1:-1:-1;26401:13:0;;;;;;;:18;26385:34;26382:47;;;26422:7;;26382:47;26469:7;;;-1:-1:-1;;;;26451:25:0;;26469:7;;;;;26451:25;;26487:37;;;26511:13;;;;;;;26487:37;;;-1:-1:-1;;26559:17:0;;;26339:245;:::o;26729:121::-;26777:6;:16;26767:7;:26;;26777:16;;;;-1:-1:-1;;26767:26:0;;;;;;;-1:-1:-1;;26804:38:0;26777:16;26820:22;;;;26804:38;;;;;;;;26729:121::o;26862:123::-;26910:7;:17;26900:7;:27;;26910:17;;;;-1:-1:-1;;26900:27:0;;;;;;;-1:-1:-1;;26938:39:0;26910:17;26954:23;;;;26938:39;;;;;;;;26862:123::o;30216:566::-;30319:15;30336:23;30361:12;30375:23;30400:12;30414:18;30436:19;30447:7;30436:10;:19::i;:::-;-1:-1:-1;;;;;30484:15:0;;;;;;:7;:15;;;;;;30318:137;;-1:-1:-1;30318:137:0;;-1:-1:-1;30318:137:0;;-1:-1:-1;30318:137:0;-1:-1:-1;30318:137:0;-1:-1:-1;30318:137:0;-1:-1:-1;30484:28:0;;30504:7;30484:19;:28::i;:::-;-1:-1:-1;;;;;30466:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30541:7;:15;;;;:28;;30561:7;30541:19;:28::i;:::-;-1:-1:-1;;;;;30523:15:0;;;;;;;:7;:15;;;;;;:46;;;;30601:18;;;;;;;:39;;30624:15;30601:22;:39::i;:::-;-1:-1:-1;;;;;30580:18:0;;;;;;:7;:18;;;;;:60;30654:26;30669:10;30654:14;:26::i;:::-;30691:23;30703:4;30709;30691:11;:23::i;:::-;30747:9;-1:-1:-1;;;;;30730:44:0;30739:6;-1:-1:-1;;;;;30730:44:0;;30758:15;30730:44;;;;;;:::i;:::-;;;;;;;;30216:566;;;;;;;;;:::o;29622:586::-;29723:15;29740:23;29765:12;29779:23;29804:12;29818:18;29840:19;29851:7;29840:10;:19::i;:::-;-1:-1:-1;;;;;29888:15:0;;;;;;:7;:15;;;;;;29722:137;;-1:-1:-1;29722:137:0;;-1:-1:-1;29722:137:0;;-1:-1:-1;29722:137:0;-1:-1:-1;29722:137:0;-1:-1:-1;29722:137:0;-1:-1:-1;29888:28:0;;29722:137;29888:19;:28::i;:::-;-1:-1:-1;;;;;29870:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;29948:18;;;;;:7;:18;;;;;:39;;29971:15;29948:22;:39::i;:::-;-1:-1:-1;;;;;29927:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30019:7;:18;;;;:39;;30042:15;30019:22;:39::i;29112:502::-;29211:15;29228:23;29253:12;29267:23;29292:12;29306:18;29328:19;29339:7;29328:10;:19::i;:::-;-1:-1:-1;;;;;29376:15:0;;;;;;:7;:15;;;;;;29210:137;;-1:-1:-1;29210:137:0;;-1:-1:-1;29210:137:0;;-1:-1:-1;29210:137:0;-1:-1:-1;29210:137:0;-1:-1:-1;29210:137:0;-1:-1:-1;29376:28:0;;29210:137;29376:19;:28::i;30790:642::-;30893:15;30910:23;30935:12;30949:23;30974:12;30988:18;31010:19;31021:7;31010:10;:19::i;:::-;-1:-1:-1;;;;;31058:15:0;;;;;;:7;:15;;;;;;30892:137;;-1:-1:-1;30892:137:0;;-1:-1:-1;30892:137:0;;-1:-1:-1;30892:137:0;-1:-1:-1;30892:137:0;-1:-1:-1;30892:137:0;-1:-1:-1;31058:28:0;;31078:7;31058:19;:28::i;:::-;-1:-1:-1;;;;;31040:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31115:7;:15;;;;:28;;31135:7;31115:19;:28::i;26596:125::-;26650:15;;;26676:37;26692:21;-1:-1:-1;;26640:25:0;;26650:15;;;;;;;26640:25;26692:21;;;;;;26676:37;-1:-1:-1;;26676:37:0;;;;;;26596:125::o;25999:154::-;26102:7;;26063;;26090:55;;26129:5;;26090:20;;:7;;26102;;26090:11;:20::i;:::-;:24;;:55::i;26161:166::-;26270:13;;26231:7;;26258:61;;26303:5;;26258:26;;:7;;26270:13;;;;;1320:256;1378:7;1408:6;1404:47;;-1:-1:-1;1438:1:0;1431:8;;1404:47;1463:9;1475:5;1479:1;1475;:5;:::i;:::-;1463:17;-1:-1:-1;1508:1:0;1499:5;1503:1;1463:17;1499:5;:::i;:::-;:10;1491:56;;;;-1:-1:-1;;;1491:56:0;;;;;;;:::i;25620:367::-;25683:19;25706:10;:8;:10::i;:::-;25683:33;-1:-1:-1;25727:18:0;25748:27;:10;25683:33;25748:14;:27::i;:::-;25821:15;;-1:-1:-1;;;;;25821:15:0;25813:24;;;;:7;:24;;;;;;25727:48;;-1:-1:-1;25813:40:0;;25727:48;25813:28;:40::i;:::-;25794:15;;;-1:-1:-1;;;;;25794:15:0;;;25786:24;;;;:7;:24;;;;;;;;:67;;;;25879:15;;;;;25867:28;;:11;:28;;;;;;;25864:113;;;25945:15;;-1:-1:-1;;;;;25945:15:0;25937:24;;;;:7;:24;;;;;;:40;;25966:10;25937:28;:40::i;:::-;25918:15;;-1:-1:-1;;;;;25918:15:0;25910:24;;;;:7;:24;;;;;:67;25620:367;;;:::o;23519:147::-;23597:7;;:17;;23609:4;23597:11;:17::i;:::-;23587:7;:27;23638:10;;:20;;23653:4;23638:14;:20::i;:::-;23625:10;:33;-1:-1:-1;;23519:147:0:o;14:158:1:-;82:20;;142:4;131:16;;121:27;;111:2;;162:1;159;152:12;177:259;;289:2;277:9;268:7;264:23;260:32;257:2;;;310:6;302;295:22;257:2;354:9;341:23;373:33;400:5;373:33;:::i;441:263::-;;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:33;668:5;641:33;:::i;981:402::-;;;1110:2;1098:9;1089:7;1085:23;1081:32;1078:2;;;1131:6;1123;1116:22;1078:2;1175:9;1162:23;1194:33;1221:5;1194:33;:::i;:::-;1246:5;-1:-1:-1;1303:2:1;1288:18;;1275:32;1316:35;1275:32;1316:35;:::i;:::-;1370:7;1360:17;;;1068:315;;;;;:::o;1388:470::-;;;;1534:2;1522:9;1513:7;1509:23;1505:32;1502:2;;;1555:6;1547;1540:22;1502:2;1599:9;1586:23;1618:33;1645:5;1618:33;:::i;:::-;1670:5;-1:-1:-1;1727:2:1;1712:18;;1699:32;1740:35;1699:32;1740:35;:::i;:::-;1492:366;;1794:7;;-1:-1:-1;;;1848:2:1;1833:18;;;;1820:32;;1492:366::o;1863:396::-;;;1989:2;1977:9;1968:7;1964:23;1960:32;1957:2;;;2010:6;2002;1995:22;1957:2;2054:9;2041:23;2073:33;2100:5;2073:33;:::i;:::-;2125:5;-1:-1:-1;2182:2:1;2167:18;;2154:32;2195;2154;2195;:::i;2264:327::-;;;2393:2;2381:9;2372:7;2368:23;2364:32;2361:2;;;2414:6;2406;2399:22;2361:2;2458:9;2445:23;2477:33;2504:5;2477:33;:::i;:::-;2529:5;2581:2;2566:18;;;;2553:32;;-1:-1:-1;;;2351:240:1:o;2596:257::-;;2716:2;2704:9;2695:7;2691:23;2687:32;2684:2;;;2737:6;2729;2722:22;2684:2;2774:9;2768:16;2793:30;2817:5;2793:30;:::i;2858:190::-;;2970:2;2958:9;2949:7;2945:23;2941:32;2938:2;;;2991:6;2983;2976:22;2938:2;-1:-1:-1;3019:23:1;;2928:120;-1:-1:-1;2928:120:1:o;3053:321::-;;;3179:2;3167:9;3158:7;3154:23;3150:32;3147:2;;;3200:6;3192;3185:22;3147:2;3241:9;3228:23;3218:33;;3301:2;3290:9;3286:18;3273:32;3314:30;3338:5;3314:30;:::i;3379:266::-;;;3504:2;3492:9;3483:7;3479:23;3475:32;3472:2;;;3525:6;3517;3510:22;3472:2;3553:29;3572:9;3553:29;:::i;:::-;3543:39;;3601:38;3635:2;3624:9;3620:18;3601:38;:::i;:::-;3591:48;;3462:183;;;;;:::o;3650:205::-;3850:3;3841:14::o;3860:203::-;-1:-1:-1;;;;;4024:32:1;;;;4006:51;;3994:2;3979:18;;3961:102::o;4068:304::-;-1:-1:-1;;;;;4298:15:1;;;4280:34;;4350:15;;4345:2;4330:18;;4323:43;4230:2;4215:18;;4197:175::o;4377:274::-;-1:-1:-1;;;;;4569:32:1;;;;4551:51;;4633:2;4618:18;;4611:34;4539:2;4524:18;;4506:145::o;4656:187::-;4821:14;;4814:22;4796:41;;4784:2;4769:18;;4751:92::o;5083:603::-;;5224:2;5253;5242:9;5235:21;5285:6;5279:13;5328:6;5323:2;5312:9;5308:18;5301:34;5353:4;5366:140;5380:6;5377:1;5374:13;5366:140;;;5475:14;;;5471:23;;5465:30;5441:17;;;5460:2;5437:26;5430:66;5395:10;;5366:140;;;5524:6;5521:1;5518:13;5515:2;;;5594:4;5589:2;5580:6;5569:9;5565:22;5561:31;5554:45;5515:2;-1:-1:-1;5670:2:1;5649:15;-1:-1:-1;;5645:29:1;5630:45;;;;5677:2;5626:54;;5204:482;-1:-1:-1;;;5204:482:1:o;5691:403::-;5893:2;5875:21;;;5932:2;5912:18;;;5905:30;5971:34;5966:2;5951:18;;5944:62;-1:-1:-1;;;6037:2:1;6022:18;;6015:37;6084:3;6069:19;;5865:229::o;6099:352::-;6301:2;6283:21;;;6340:2;6320:18;;;6313:30;6379;6374:2;6359:18;;6352:58;6442:2;6427:18;;6273:178::o;6456:402::-;6658:2;6640:21;;;6697:2;6677:18;;;6670:30;6736:34;6731:2;6716:18;;6709:62;-1:-1:-1;;;6802:2:1;6787:18;;6780:36;6848:3;6833:19;;6630:228::o;6863:351::-;7065:2;7047:21;;;7104:2;7084:18;;;7077:30;7143:29;7138:2;7123:18;;7116:57;7205:2;7190:18;;7037:177::o;7219:399::-;7421:2;7403:21;;;7460:2;7440:18;;;7433:30;7499:34;7494:2;7479:18;;7472:62;-1:-1:-1;;;7565:2:1;7550:18;;7543:33;7608:3;7593:19;;7393:225::o;7623:340::-;7825:2;7807:21;;;7864:2;7844:18;;;7837:30;-1:-1:-1;;;7898:2:1;7883:18;;7876:46;7954:2;7939:18;;7797:166::o;7968:354::-;8170:2;8152:21;;;8209:2;8189:18;;;8182:30;8248:32;8243:2;8228:18;;8221:60;8313:2;8298:18;;8142:180::o;8327:397::-;8529:2;8511:21;;;8568:2;8548:18;;;8541:30;8607:34;8602:2;8587:18;;8580:62;-1:-1:-1;;;8673:2:1;8658:18;;8651:31;8714:3;8699:19;;8501:223::o;8729:356::-;8931:2;8913:21;;;8950:18;;;8943:30;9009:34;9004:2;8989:18;;8982:62;9076:2;9061:18;;8903:182::o;9090:397::-;9292:2;9274:21;;;9331:2;9311:18;;;9304:30;9370:34;9365:2;9350:18;;9343:62;-1:-1:-1;;;9436:2:1;9421:18;;9414:31;9477:3;9462:19;;9264:223::o;9492:405::-;9694:2;9676:21;;;9733:2;9713:18;;;9706:30;9772:34;9767:2;9752:18;;9745:62;-1:-1:-1;;;9838:2:1;9823:18;;9816:39;9887:3;9872:19;;9666:231::o;9902:356::-;10104:2;10086:21;;;10123:18;;;10116:30;10182:34;10177:2;10162:18;;10155:62;10249:2;10234:18;;10076:182::o;10263:336::-;10465:2;10447:21;;;10504:2;10484:18;;;10477:30;-1:-1:-1;;;10538:2:1;10523:18;;10516:42;10590:2;10575:18;;10437:162::o;10604:355::-;10806:2;10788:21;;;10845:2;10825:18;;;10818:30;10884:33;10879:2;10864:18;;10857:61;10950:2;10935:18;;10778:181::o;10964:354::-;11166:2;11148:21;;;11205:2;11185:18;;;11178:30;11244:32;11239:2;11224:18;;11217:60;11309:2;11294:18;;11138:180::o;11323:408::-;11525:2;11507:21;;;11564:2;11544:18;;;11537:30;11603:34;11598:2;11583:18;;11576:62;-1:-1:-1;;;11669:2:1;11654:18;;11647:42;11721:3;11706:19;;11497:234::o;11736:177::-;11882:25;;;11870:2;11855:18;;11837:76::o;11918:184::-;12090:4;12078:17;;;;12060:36;;12048:2;12033:18;;12015:87::o;12107:262::-;12303:4;12291:17;;;12273:36;;12345:17;;12340:2;12325:18;;12318:45;12261:2;12246:18;;12228:141::o;12374:128::-;;12445:1;12441:6;12438:1;12435:13;12432:2;;;12451:18;;:::i;:::-;-1:-1:-1;12487:9:1;;12422:80::o;12507:217::-;;12573:1;12563:2;;-1:-1:-1;;;12598:31:1;;12652:4;12649:1;12642:15;12680:4;12605:1;12670:15;12563:2;-1:-1:-1;12709:9:1;;12553:171::o;12729:168::-;;12835:1;12831;12827:6;12823:14;12820:1;12817:21;12812:1;12805:9;12798:17;12794:45;12791:2;;;12842:18;;:::i;:::-;-1:-1:-1;12882:9:1;;12781:116::o;12902:125::-;;12970:1;12967;12964:8;12961:2;;;12975:18;;:::i;:::-;-1:-1:-1;13012:9:1;;12951:76::o;13032:135::-;;-1:-1:-1;;13092:17:1;;13089:2;;;13112:18;;:::i;:::-;-1:-1:-1;13159:1:1;13148:13;;13079:88::o;13172:127::-;13233:10;13228:3;13224:20;13221:1;13214:31;13264:4;13261:1;13254:15;13288:4;13285:1;13278:15;13304:133;-1:-1:-1;;;;;13381:31:1;;13371:42;;13361:2;;13427:1;13424;13417:12;13442:120;13530:5;13523:13;13516:21;13509:5;13506:32;13496:2;;13552:1;13549;13542:12

Swarm Source

ipfs://681aab7f6950eea37eb3065e0e1d38c8ad5cfa5a95d5e64d28464afb8797ee09
Loading