ETH Price: $3,479.08 (-1.10%)
Gas: 2 Gwei

Token

BabyKiba Inu (BabyKiba)
 

Overview

Max Total Supply

1,000,000,000 BabyKiba

Holders

107

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,225,498 BabyKiba

Value
$0.00
0xEf7Effb035C40Db5811e70BF5f1e1832715A826F
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BabyKiba

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-22
*/

/*
BabyKiba Inu

Website: https://babykibainu.space/
Telegram: https://t.me/babykibaeth
Twitter: https://twitter.com/baby_kiba

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.9;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * C U ON THE MOON
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

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

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

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

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

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

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

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

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

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

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

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 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;
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IAntiSnipe {
  function setTokenOwner(address owner) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

interface IStake {
    function addShares(address shareholder, uint256 amount) external;
    function removeShares(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function claim(address shareholder) external;
    function getUnpaidRewards(address shareholder) external view returns (uint256);
    function getPaidRewards(address shareholder) external view returns (uint256);
    function getClaimTime(address shareholder) external view returns (uint256);
    function countShareholders() external view returns (uint256);
    function getTotalRewards() external view returns (uint256);
    function getTotalRewarded() external view returns (uint256);
    function checkShares(address shareholder) external view returns(uint256);
    function isOpen() external view returns(bool);
    function checkEmergencyRate(address shareholder) external view returns (uint256);
}

contract BabyKiba is IERC20, Ownable {
    using Address for address;
    
    //address STAKE = 0x4B2C54b80B77580dc02A0f6734d3BAD733F50900;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "BabyKiba Inu";
    string constant _symbol = "BabyKiba";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = (_totalSupply * 1) / 100;
    uint256 public _maxWalletSize = (_totalSupply * 2) / 100;

    mapping (address => uint256) _balances;
    mapping (address => uint256) public staked;
    uint256 public totalStaked;
    mapping (uint256 => IStake) stakePools;
    uint256 pools = 0;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) lastBuy;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isDividendExempt;

    uint256 liquidityFee = 20;
    uint256 reflectionFee = 10;
    uint256 marketingFee = 40;
    uint256 devFee = 30;
    uint256 totalFee = 100;
    uint256 sellBias = 0;
    uint256 sellPercent = 250;
    uint256 sellPeriod = 24 hours;
    uint256 feeDenominator = 1000;

    address public autoLiquidityReceiver;
    address payable public marketingFeeReceiver;
    address payable public devFeeReceiver;

    uint256 targetLiquidity = 40;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
    bool public pauseDisabled = false;
    
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        
        isFeeExempt[owner()] = true;
        liquidityProviders[msg.sender] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;
        isDividendExempt[owner()] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;
        autoLiquidityReceiver = 0x6241Fe25F562cEFa47d8F79c531C936580f4ad32;
        marketingFeeReceiver = payable(0x6241Fe25F562cEFa47d8F79c531C936580f4ad32);
        devFeeReceiver = payable(0x87409879aceE5b0B1516953d32442D4D8362673c);

        _balances[owner()] = _totalSupply;
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }
    
    function pauseTrading() external onlyOwner {
        require(!pauseDisabled);
        launchedAt = 0;
    }
    
    function disablePause() external onlyOwner {
        require(launchedAt > 0);
        pauseDisabled = true;
    }

    function setProtection(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled);
        protectionEnabled = _protect;
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled);
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(msg.sender);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] - staked[sender] >= amount, "Insufficient balance");
        require(amount > 0, "Zero amount transferred");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }

        _balances[sender] -= amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] += amountReceived;
            
        if(launched() && protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        isTxLimitExempt[_provider] = true;
        isDividendExempt[_provider] = true;
    }

    function getTotalFee(bool selling, bool inHighPeriod) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return feeDenominator - 1; }
        if (selling) return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee + sellBias;
        return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee - sellBias;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = (amount * getTotalFee(liquidityPools[recipient], !liquidityPools[sender] && lastBuy[sender] + sellPeriod > block.timestamp)) / feeDenominator;
        
        if (liquidityPools[sender] && lastBuy[recipient] == 0)
            lastBuy[recipient] = block.timestamp;

        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !isFeeExempt[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum &&
        totalFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / totalFee) / 2;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 balanceAfter = address(this).balance - balanceBefore;
        uint256 totalETHFee = totalFee - dynamicLiquidityFee / 2;

        uint256 amountLiquidity = (balanceAfter * dynamicLiquidityFee) / totalETHFee / 2;
        //uint256 amountReflection = (balanceAfter * reflectionFee) / totalETHFee;
        uint256 amountMarketing = (balanceAfter * marketingFee) / totalETHFee;
        uint256 amountDev = (balanceAfter * devFee) / totalETHFee;

        if(amountToLiquify > 0) {
            router.addLiquidityETH{value: amountLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountLiquidity, amountToLiquify);
        }
        
        if (amountMarketing > 0)
            marketingFeeReceiver.transfer(amountMarketing);
            
        if (amountDev > 0)
            devFeeReceiver.transfer(amountDev);

    }

    function addPool(address pool) external onlyOwner {
        IStake staker = IStake(pool);
        stakePools[pools] = staker;
        pools++;
    }

    function addToPool(uint256 pool, uint256 _percent) external onlyOwner {
        uint256 purchase = (address(this).balance * _percent) / 100;
        stakePools[pool].deposit{value: purchase}();
    }

    function stake(uint256 pool, uint256 amount) external {
        require(_balances[msg.sender] - staked[msg.sender] >= amount, "Not enought tokens");
        require(stakePools[pool].isOpen(), "Staking closed");
        staked[msg.sender] += amount;
        totalStaked += amount;
        stakePools[pool].addShares(msg.sender, amount);
    }

    function claimStake(uint256 pool) external {
        require(staked[msg.sender] > 0 && stakePools[pool].checkShares(msg.sender) > 0, "No tokens staked");
        require(stakePools[pool].getUnpaidRewards(msg.sender) > 0, "Claims not ready");
        stakePools[pool].claim(msg.sender);
    }

    function removeStake(uint256 pool, uint256 amount, bool emergency) external {
        require(amount > 0 && staked[msg.sender] >= amount && _balances[msg.sender] >= amount && stakePools[pool].checkShares(msg.sender) >= amount, "Not enought tokens");
        if(stakePools[pool].getClaimTime(msg.sender) > 0) {
            require(emergency, "Stake locked");
            uint256 emergencyRate = stakePools[pool].checkEmergencyRate(msg.sender);
            uint256 emergencyTax = (amount * emergencyRate) / feeDenominator;
            if (emergencyTax > 0){
                _balances[msg.sender] -= emergencyRate;
                _balances[address(this)] += emergencyRate;
                emit Transfer(msg.sender, address(this), emergencyRate);
            }

        }
        stakePools[pool].removeShares(msg.sender, amount);
        staked[msg.sender] -= amount;
        totalStaked -= amount;
    }

    function stakingOverride(address _wallet, uint256 amount, bool confirm) external onlyOwner {
        require(confirm, "Confirm staking reset");
        require(amount <= staked[_wallet], "Can't increase stake");
        staked[_wallet] = amount;
    }

    function setSellPeriod(uint256 _sellPercentIncrease, uint256 _period) external onlyOwner {
        require((totalFee * _sellPercentIncrease) / 100 <= 400, "Sell tax too high");
        require(_period <= 7 days, "Sell period too long");
        sellPercent = _sellPercentIncrease;
        sellPeriod = _period;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() external onlyOwner {
        require (launchedAt == 0);
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        require(numerator > 0 && divisor > 0 && (numerator * 1000) / divisor >= 5);
        _maxTxAmount = (_totalSupply * numerator) / divisor;
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _devFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        sellBias = _sellBias;
        totalFee = _liquidityFee + _reflectionFee + _marketingFee + _devFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 4);
        require(sellBias <= totalFee);
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external onlyOwner {
        if (autoLiquidityReceiver != DEAD)
            autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = payable(_marketingFeeReceiver);
    }
    
    function setDevReceiver(address _dev) external onlyOwner {
        devFeeReceiver = payable(_dev);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0);
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        liquidityPools[_pool] = _enabled;
        isDividendExempt[_pool] = _enabled;
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length);
        bool previousSwap = swapEnabled;
        swapEnabled = false;
        for (uint256 i = 0; i < _addresses.length; i++) {
            require(!liquidityPools[_addresses[i]]);
            _transferFrom(msg.sender, _addresses[i], _amount[i] * (10 ** _decimals));
        }
        swapEnabled = previousSwap;
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    //C U ON THE MOON
}

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":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"addToPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"claimStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disablePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"inHighPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"emergency","type":"bool"}],"name":"removeStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"name":"setDevReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_provider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentIncrease","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setSellPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"staked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"confirm","type":"bool"}],"name":"stakingOverride","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811661dead17909155600280549091169055620000326009600a6200061c565b6200004290633b9aca0062000634565b6003556064600354600162000058919062000634565b62000064919062000656565b600455606460035460026200007a919062000634565b62000086919062000656565b6005556000600a8181556014601081905560119190915560286012819055601e60135560649182905560159290925560fa601655620151806017556103e8601855601c91909155601d55601f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055602580546201000160a81b60ff62ffffff60a81b011990911617905560035462000124906101909062000656565b60265561271060035462000139919062000656565b6027553480156200014957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601f54601e80546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e919062000679565b6001600160a01b031663c9c65396601e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000270573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000296919062000679565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000309919062000679565b602280546001600160a01b0319166001600160a01b0392909216918217905560009081526020805260408120805460ff1916600117905560001990600b906200035a6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120601f8054841683529085528382209590955530808252600b855283822086548416835285528382206000199055815483168252600d85528382208054600160ff199182168117909255338452602187528584208054821683179055828452600e8752858420805482168317905583548516845285842080548216831790559654841683528483208054881682179055825484168352600f865284832080548816821790556022548416835284832080548816821790559082528382208054871682179055805483168252838220805487168217905560025483168252838220805490961617909455601980546001600160a01b0319908116736241fe25f562cefa47d8f79c531c936580f4ad32908117909255601a80548216909217909155601b80549091167387409879acee5b0b1516953d32442d4d8362673c1790556003548454821685526006845282852081905584549251908152911692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620006a4565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200055e57816000190482111562000542576200054262000507565b808516156200055057918102915b93841c939080029062000522565b509250929050565b600082620005775750600162000616565b81620005865750600062000616565b81600181146200059f5760028114620005aa57620005ca565b600191505062000616565b60ff841115620005be57620005be62000507565b50506001821b62000616565b5060208310610133831016604e8410600b8410161715620005ef575081810a62000616565b620005fb83836200051d565b806000190482111562000612576200061262000507565b0290505b92915050565b60006200062d60ff84168362000566565b9392505050565b600081600019048311821515161562000651576200065162000507565b500290565b6000826200067457634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200068c57600080fd5b81516001600160a01b03811681146200062d57600080fd5b6132dd80620006b46000396000f3fe6080604052600436106103a65760003560e01c80637d1db4a5116101e7578063bf56b3711161010d578063dce975c1116100a0578063f2fde38b1161006f578063f2fde38b14610ada578063f84ba65d14610afa578063f8821a6214610b1a578063f887ea4014610b3057600080fd5b8063dce975c114610a34578063dd62ed3e14610a54578063e624c4bc14610a9a578063e96fada214610aba57600080fd5b8063d51ed1c8116100dc578063d51ed1c8146109b4578063d5d035f5146109d4578063d914cd4b146109f4578063dab84ee714610a1457600080fd5b8063bf56b3711461093d578063c5363caa14610953578063ca33e64c14610974578063d08893581461099457600080fd5b806395d89b4111610185578063a8aa1b3111610154578063a8aa1b31146108c3578063a9059cbb146108e3578063abe57e7014610903578063b95762441461092357600080fd5b806395d89b411461082557806398807d84146108565780639ff84a9814610883578063a4b45c00146108a357600080fd5b8063882cfb3f116101c1578063882cfb3f146107b4578063893d20e8146107f15780638da5cb5b146107f15780638f9a55c01461080f57600080fd5b80637d1db4a514610768578063817b1cd21461077e57806386f6c3c11461079457600080fd5b8063492a937b116102cc578063659b1c7c1161026a578063715018a611610239578063715018a6146106f25780637364fae8146107075780637516baec146107275780637b0472f01461074857600080fd5b8063659b1c7c1461065b578063672434821461067b5780636ddd17131461069b57806370a08231146106bc57600080fd5b80635804f1e4116102a65780635804f1e4146105f0578063584f969a146106065780636419b6f91461061b578063658d4b7f1461063b57600080fd5b8063492a937b1461059057806352822fa5146105b0578063571ac8b0146105d057600080fd5b806318160ddd116103445780632b112e49116103135780632b112e491461052a578063313ce5671461053f578063421dd7c71461055b57806344c7d6ef1461057057600080fd5b806318160ddd146104b55780631faf723b146104ca578063201e7991146104ea57806323b872dd1461050a57600080fd5b8063095ea7b311610380578063095ea7b3146104305780630f4f7bfe146104605780631031e36e146104805780631161ae391461049557600080fd5b806301339c21146103b25780630445b667146103c957806306fdde03146103f257600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610b50565b005b3480156103d557600080fd5b506103df60265481565b6040519081526020015b60405180910390f35b3480156103fe57600080fd5b5060408051808201909152600c81526b426162794b69626120496e7560a01b60208201525b6040516103e99190612c34565b34801561043c57600080fd5b5061045061044b366004612ca1565b610b9a565b60405190151581526020016103e9565b34801561046c57600080fd5b506103c761047b366004612ccd565b610c07565b34801561048c57600080fd5b506103c7610ce5565b3480156104a157600080fd5b506104506104b0366004612ccd565b610d26565b3480156104c157600080fd5b506003546103df565b3480156104d657600080fd5b506103c76104e5366004612ccd565b610d3a565b3480156104f657600080fd5b506103c7610505366004612ccd565b610dc0565b34801561051657600080fd5b50610450610525366004612cef565b610df5565b34801561053657600080fd5b506103df610e8a565b34801561054b57600080fd5b50604051600981526020016103e9565b34801561056757600080fd5b506103c7610ed0565b34801561057c57600080fd5b506103c761058b366004612d30565b610f0f565b34801561059c57600080fd5b506103c76105ab366004612d57565b611106565b3480156105bc57600080fd5b506103c76105cb366004612d90565b61116c565b3480156105dc57600080fd5b506104506105eb366004612dd2565b611257565b3480156105fc57600080fd5b506103df60245481565b34801561061257600080fd5b506103c7611265565b34801561062757600080fd5b506103df610636366004612def565b6112ad565b34801561064757600080fd5b506103c7610656366004612d57565b61134c565b34801561066757600080fd5b506103c7610676366004612e0d565b6113a1565b34801561068757600080fd5b506103c7610696366004612e76565b611406565b3480156106a757600080fd5b5060255461045090600160b81b900460ff1681565b3480156106c857600080fd5b506103df6106d7366004612dd2565b6001600160a01b031660009081526006602052604090205490565b3480156106fe57600080fd5b506103c7611547565b34801561071357600080fd5b506103c7610722366004612ccd565b6115bb565b34801561073357600080fd5b5060255461045090600160a81b900460ff1681565b34801561075457600080fd5b506103c7610763366004612ccd565b61166a565b34801561077457600080fd5b506103df60045481565b34801561078a57600080fd5b506103df60085481565b3480156107a057600080fd5b506103c76107af366004612ee2565b61183c565b3480156107c057600080fd5b506025546107d99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016103e9565b3480156107fd57600080fd5b506000546001600160a01b03166107d9565b34801561081b57600080fd5b506103df60055481565b34801561083157600080fd5b50604080518082019091526008815267426162794b69626160c01b6020820152610423565b34801561086257600080fd5b506103df610871366004612dd2565b60076020526000908152604090205481565b34801561088f57600080fd5b506103c761089e366004612dd2565b6118d1565b3480156108af57600080fd5b506103c76108be366004612f25565b61191d565b3480156108cf57600080fd5b506022546107d9906001600160a01b031681565b3480156108ef57600080fd5b506104506108fe366004612ca1565b61199e565b34801561090f57600080fd5b506103c761091e366004612ccd565b6119ab565b34801561092f57600080fd5b506025546104509060ff1681565b34801561094957600080fd5b506103df60235481565b34801561095f57600080fd5b5060255461045090600160b01b900460ff1681565b34801561098057600080fd5b506019546107d9906001600160a01b031681565b3480156109a057600080fd5b506103c76109af366004612f53565b611a10565b3480156109c057600080fd5b506103df6109cf366004612d30565b611a91565b3480156109e057600080fd5b506103c76109ef366004612d57565b611aca565b348015610a0057600080fd5b506103c7610a0f366004612dd2565b611b84565b348015610a2057600080fd5b50601b546107d9906001600160a01b031681565b348015610a4057600080fd5b506103c7610a4f366004612f88565b611bf1565b348015610a6057600080fd5b506103df610a6f366004612f25565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b348015610aa657600080fd5b506103c7610ab5366004612dd2565b611f6b565b348015610ac657600080fd5b50601a546107d9906001600160a01b031681565b348015610ae657600080fd5b506103c7610af5366004612dd2565b611fef565b348015610b0657600080fd5b506103c7610b15366004612d57565b6120d9565b348015610b2657600080fd5b506103df60275481565b348015610b3c57600080fd5b50601e546107d9906001600160a01b031681565b6000546001600160a01b03163314610b835760405162461bcd60e51b8152600401610b7a90612fb6565b60405180910390fd5b60235415610b9057600080fd5b4360235542602455565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bf59086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610c315760405162461bcd60e51b8152600401610b7a90612fb6565b610190606483601454610c449190613001565b610c4e9190613020565b1115610c905760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b6044820152606401610b7a565b62093a80811115610cda5760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b6044820152606401610b7a565b601691909155601755565b6000546001600160a01b03163314610d0f5760405162461bcd60e51b8152600401610b7a90612fb6565b60255460ff1615610d1f57600080fd5b6000602355565b600082610d3283611a91565b119392505050565b6000546001600160a01b03163314610d645760405162461bcd60e51b8152600401610b7a90612fb6565b600082118015610d745750600081115b8015610d975750600581610d8a846103e8613001565b610d949190613020565b10155b610da057600080fd5b8082600354610daf9190613001565b610db99190613020565b6004555050565b6000546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610b7a90612fb6565b601c91909155601d55565b6001600160a01b0383166000908152600b6020908152604080832033845290915281205460001914610e75576001600160a01b0384166000908152600b60209081526040808320338452909152902054610e50908390613042565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b610e8084848461212e565b90505b9392505050565b6002546001600160a01b039081166000908152600660205260408082205460015490931682528120549091610ebe91613059565b600354610ecb9190613042565b905090565b6000546001600160a01b03163314610efa5760405162461bcd60e51b8152600401610b7a90612fb6565b6025805460ff60b01b1916600160b01b179055565b3360009081526007602052604090205415801590610fa257506000818152600960205260408082205490516346ae776560e11b81523360048201526001600160a01b0390911690638d5ceeca90602401602060405180830381865afa158015610f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa09190613071565b115b610fe15760405162461bcd60e51b815260206004820152601060248201526f139bc81d1bdad95b9cc81cdd185ad95960821b6044820152606401610b7a565b60008181526009602052604080822054905163155b538760e31b81523360048201526001600160a01b039091169063aada9c3890602401602060405180830381865afa158015611035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110599190613071565b116110995760405162461bcd60e51b815260206004820152601060248201526f436c61696d73206e6f7420726561647960801b6044820152606401610b7a565b60008181526009602052604090819020549051630f41a04d60e11b81523360048201526001600160a01b0390911690631e83409a90602401600060405180830381600087803b1580156110eb57600080fd5b505af11580156110ff573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146111305760405162461bcd60e51b8152600401610b7a90612fb6565b6001600160a01b03909116600090815260208080526040808320805494151560ff199586168117909155600f9092529091208054909216179055565b6000546001600160a01b031633146111965760405162461bcd60e51b8152600401610b7a90612fb6565b806111db5760405162461bcd60e51b815260206004820152601560248201527410dbdb999a5c9b481cdd185ada5b99c81c995cd95d605a1b6044820152606401610b7a565b6001600160a01b03831660009081526007602052604090205482111561123a5760405162461bcd60e51b815260206004820152601460248201527343616e277420696e637265617365207374616b6560601b6044820152606401610b7a565b506001600160a01b03909116600090815260076020526040902055565b6000610c0182600019610b9a565b6000546001600160a01b0316331461128f5760405162461bcd60e51b8152600401610b7a90612fb6565b60006023541161129e57600080fd5b6025805460ff19166001179055565b60004360235460016112bf9190613059565b106112da5760016018546112d39190613042565b9050610c01565b821561131657816112fa576015546014546112f59190613059565b6112d3565b606460165460145461130c9190613001565b6112d39190613020565b816113305760155460145461132b9190613042565b610e83565b60646016546014546113429190613001565b610e839190613020565b6000546001600160a01b031633146113765760405162461bcd60e51b8152600401610b7a90612fb6565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113cb5760405162461bcd60e51b8152600401610b7a90612fb6565b80156113e857602554600160b01b900460ff16156113e857600080fd5b60258054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146114305760405162461bcd60e51b8152600401610b7a90612fb6565b82811461143c57600080fd5b6025805460ff60b81b198116909155600160b81b900460ff1660005b8481101561152457602060008787848181106114765761147661308a565b905060200201602081019061148b9190612dd2565b6001600160a01b0316815260208101919091526040016000205460ff16156114b257600080fd5b611511338787848181106114c8576114c861308a565b90506020020160208101906114dd9190612dd2565b6114e96009600a613184565b8787868181106114fb576114fb61308a565b9050602002013561150c9190613001565b61212e565b508061151c81613193565b915050611458565b5060258054911515600160b81b0260ff60b81b1990921691909117905550505050565b6000546001600160a01b031633146115715760405162461bcd60e51b8152600401610b7a90612fb6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115e55760405162461bcd60e51b8152600401610b7a90612fb6565b600060646115f38347613001565b6115fd9190613020565b600084815260096020526040808220548151630d0e30db60e41b815291519394506001600160a01b03169263d0e30db09285926004808201939182900301818588803b15801561164c57600080fd5b505af1158015611660573d6000803e3d6000fd5b5050505050505050565b33600090815260076020908152604080832054600690925290912054829161169191613042565b10156116d45760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567687420746f6b656e7360701b6044820152606401610b7a565b6000828152600960209081526040918290205482516347535d7b60e01b815292516001600160a01b03909116926347535d7b9260048083019391928290030181865afa158015611728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174c91906131ae565b6117895760405162461bcd60e51b815260206004820152600e60248201526d14dd185ada5b99c818db1bdcd95960921b6044820152606401610b7a565b33600090815260076020526040812080548392906117a8908490613059565b9250508190555080600860008282546117c19190613059565b9091555050600082815260096020526040908190205490516303a041cf60e21b8152336004820152602481018390526001600160a01b0390911690630e81073c906044015b600060405180830381600087803b15801561182057600080fd5b505af1158015611834573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146118665760405162461bcd60e51b8152600401610b7a90612fb6565b60108690556011859055601284905560138390556015829055828461188b8789613059565b6118959190613059565b61189f9190613059565b60145560188190556118b2600482613020565b60145411156118c057600080fd5b601454601554111561183457600080fd5b6000546001600160a01b031633146118fb5760405162461bcd60e51b8152600401610b7a90612fb6565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119475760405162461bcd60e51b8152600401610b7a90612fb6565b6001546019546001600160a01b0390811691161461197b57601980546001600160a01b0319166001600160a01b0384161790555b601a80546001600160a01b0319166001600160a01b039290921691909117905550565b6000610e8333848461212e565b6000546001600160a01b031633146119d55760405162461bcd60e51b8152600401610b7a90612fb6565b6000811180156119e757506127108111155b6119f057600080fd5b80826003546119ff9190613001565b611a099190613020565b6005555050565b6000546001600160a01b03163314611a3a5760405162461bcd60e51b8152600401610b7a90612fb6565b600082118015611a4a5750600081115b611a5357600080fd5b6025805460ff60b81b1916600160b81b85151502179055600354611a78908290613020565b602755600354611a89908390613020565b602655505050565b6000611a9b610e8a565b6022546001600160a01b0316600090815260066020526040902054611ac09084613001565b610c019190613020565b6000546001600160a01b03163314611af45760405162461bcd60e51b8152600401610b7a90612fb6565b6025546001600160a01b038381166101009092041614611b4657602554600160b01b900460ff1615611b2557600080fd5b60258054610100600160a81b0319166101006001600160a01b038516021790555b8015611b80576025546040516318e02bd960e01b81523360048201526101009091046001600160a01b0316906318e02bd990602401611806565b5050565b6000546001600160a01b03163314611bae5760405162461bcd60e51b8152600401610b7a90612fb6565b600a8054600090815260096020526040812080546001600160a01b0319166001600160a01b038516179055815483929091611be883613193565b91905055505050565b600082118015611c105750336000908152600760205260409020548211155b8015611c2b5750336000908152600660205260409020548211155b8015611cae5750600083815260096020526040908190205490516346ae776560e11b815233600482015283916001600160a01b031690638d5ceeca90602401602060405180830381865afa158015611c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cab9190613071565b10155b611cef5760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567687420746f6b656e7360701b6044820152606401610b7a565b600083815260096020526040808220549051630994fc3160e11b81523360048201526001600160a01b0390911690631329f86290602401602060405180830381865afa158015611d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d679190613071565b1115611eb75780611da95760405162461bcd60e51b815260206004820152600c60248201526b14dd185ad9481b1bd8dad95960a21b6044820152606401610b7a565b60008381526009602052604080822054905163a450a2f560e01b81523360048201526001600160a01b039091169063a450a2f590602401602060405180830381865afa158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e219190613071565b905060006018548285611e349190613001565b611e3e9190613020565b90508015611eb4573360009081526006602052604081208054849290611e65908490613042565b90915550503060009081526006602052604081208054849290611e89908490613059565b9091555050604051828152309033906000805160206132888339815191529060200160405180910390a35b50505b6000838152600960205260409081902054905163beffbb8960e01b8152336004820152602481018490526001600160a01b039091169063beffbb8990604401600060405180830381600087803b158015611f1057600080fd5b505af1158015611f24573d6000803e3d6000fd5b50503360009081526007602052604081208054869450909250611f48908490613042565b925050819055508160086000828254611f619190613042565b9091555050505050565b6000546001600160a01b03163314611f955760405162461bcd60e51b8152600401610b7a90612fb6565b6001600160a01b03166000908152600d602090815260408083208054600160ff199182168117909255602184528285208054821683179055600e84528285208054821683179055600f909352922080549091169091179055565b6000546001600160a01b031633146120195760405162461bcd60e51b8152600401610b7a90612fb6565b6001600160a01b03811661207e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121035760405162461bcd60e51b8152600401610b7a90612fb6565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600760209081526040808320546006909252822054839161215d91613042565b10156121a25760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610b7a565b600082116121f25760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e736665727265640000000000000000006044820152606401610b7a565b60285460ff161561220f576122088484846124cc565b9050610e83565b612219848361256f565b6001600160a01b038316600090815260208052604090205460ff1615801561224f57506001546001600160a01b03848116911614155b1561227e576001600160a01b0383166000908152600e602052604090205460ff1661227e5761227e83836125d8565b602354612310576001600160a01b03841660009081526021602052604090205460ff16806122c457506001600160a01b03831660009081526021602052604090205460ff165b6123105760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610b7a565b6001600160a01b03841660009081526006602052604081208054849290612338908490613042565b90915550506001600160a01b0384166000908152600d602052604081205460ff1615801561237f57506001600160a01b0384166000908152600d602052604090205460ff16155b6123895782612394565b612394858585612662565b905061239f846127a7565b156123b35782156123b3576123b38361284d565b6001600160a01b038416600090815260066020526040812080548392906123db908490613059565b9091555050602354151580156123fa5750602554600160a81b900460ff165b156124865760255460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052610100909204909116906348760858906064016020604051808303816000875af1158015612460573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248491906131ae565b505b836001600160a01b0316856001600160a01b0316600080516020613288833981519152836040516124b991815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166000908152600660205260408120805483919083906124f6908490613042565b90915550506001600160a01b03831660009081526006602052604081208054849290612523908490613059565b92505081905550826001600160a01b0316846001600160a01b03166000805160206132888339815191528460405161255d91815260200190565b60405180910390a35060019392505050565b6004548111158061259857506001600160a01b0382166000908152600e602052604090205460ff165b611b805760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b7a565b6005546001600160a01b0383166000908152600660205260409020548190612601908490613059565b111561265d5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610b7a565b505050565b6018546001600160a01b0380841660009081526020805260408082205492871682528120549092839290916126cd9160ff908116911615801561063657506017546001600160a01b0389166000908152600c602052604090205442916126c791613059565b116112ad565b6126d79085613001565b6126e19190613020565b6001600160a01b038616600090815260208052604090205490915060ff16801561272157506001600160a01b0384166000908152600c6020526040902054155b15612742576001600160a01b0384166000908152600c602052604090204290555b3060009081526006602052604081208054839290612761908490613059565b909155505060405181815230906001600160a01b038716906000805160206132888339815191529060200160405180910390a361279e8184613042565b95945050505050565b33600090815260208052604081205460ff161580156127d65750336000908152600d602052604090205460ff16155b80156127e5575060285460ff16155b80156127fa5750602554600160b81b900460ff165b801561281d57506001600160a01b038216600090815260208052604090205460ff165b801561283a57506027543060009081526006602052604090205410155b8015610c01575060006014541192915050565b6028805460ff19166001179055602654600090821061286e57602654612870565b815b3060009081526006602052604090205490915081111561289c5750306000908152600660205260409020545b60006128ac601c54601d54610d26565b6128b8576010546128bb565b60005b90506000600260145483856128d09190613001565b6128da9190613020565b6128e49190613020565b90506128f08184613042565b6040805160028082526060820183529295506000929091602083019080368337019050509050308160008151811061292a5761292a61308a565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a791906131cb565b816001815181106129ba576129ba61308a565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b81524792919091169063791ac94790612a049088906000908790309042906004016131e8565b600060405180830381600087803b158015612a1e57600080fd5b505af1158015612a32573d6000803e3d6000fd5b5050505060008147612a449190613042565b90506000612a53600287613020565b601454612a609190613042565b90506000600282612a718986613001565b612a7b9190613020565b612a859190613020565b905060008260125485612a989190613001565b612aa29190613020565b905060008360135486612ab59190613001565b612abf9190613020565b90508715612b9957601e5460195460405163f305d71960e01b8152306004820152602481018b905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c40160606040518083038185885af1158015612b37573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b5c9190613259565b505060408051858152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b8115612bdb57601a546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612bd9573d6000803e3d6000fd5b505b8015612c1d57601b546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612c1b573d6000803e3d6000fd5b505b50506028805460ff19169055505050505050505050565b600060208083528351808285015260005b81811015612c6157858101830151858201604001528201612c45565b81811115612c73576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612c9e57600080fd5b50565b60008060408385031215612cb457600080fd5b8235612cbf81612c89565b946020939093013593505050565b60008060408385031215612ce057600080fd5b50508035926020909101359150565b600080600060608486031215612d0457600080fd5b8335612d0f81612c89565b92506020840135612d1f81612c89565b929592945050506040919091013590565b600060208284031215612d4257600080fd5b5035919050565b8015158114612c9e57600080fd5b60008060408385031215612d6a57600080fd5b8235612d7581612c89565b91506020830135612d8581612d49565b809150509250929050565b600080600060608486031215612da557600080fd5b8335612db081612c89565b9250602084013591506040840135612dc781612d49565b809150509250925092565b600060208284031215612de457600080fd5b8135610e8381612c89565b60008060408385031215612e0257600080fd5b8235612d7581612d49565b600060208284031215612e1f57600080fd5b8135610e8381612d49565b60008083601f840112612e3c57600080fd5b50813567ffffffffffffffff811115612e5457600080fd5b6020830191508360208260051b8501011115612e6f57600080fd5b9250929050565b60008060008060408587031215612e8c57600080fd5b843567ffffffffffffffff80821115612ea457600080fd5b612eb088838901612e2a565b90965094506020870135915080821115612ec957600080fd5b50612ed687828801612e2a565b95989497509550505050565b60008060008060008060c08789031215612efb57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612f3857600080fd5b8235612f4381612c89565b91506020830135612d8581612c89565b600080600060608486031215612f6857600080fd5b8335612f7381612d49565b95602085013595506040909401359392505050565b600080600060608486031215612f9d57600080fd5b83359250602084013591506040840135612dc781612d49565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561301b5761301b612feb565b500290565b60008261303d57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561305457613054612feb565b500390565b6000821982111561306c5761306c612feb565b500190565b60006020828403121561308357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600181815b808511156130db5781600019048211156130c1576130c1612feb565b808516156130ce57918102915b93841c93908002906130a5565b509250929050565b6000826130f257506001610c01565b816130ff57506000610c01565b8160018114613115576002811461311f5761313b565b6001915050610c01565b60ff84111561313057613130612feb565b50506001821b610c01565b5060208310610133831016604e8410600b841016171561315e575081810a610c01565b61316883836130a0565b806000190482111561317c5761317c612feb565b029392505050565b6000610e8360ff8416836130e3565b60006000198214156131a7576131a7612feb565b5060010190565b6000602082840312156131c057600080fd5b8151610e8381612d49565b6000602082840312156131dd57600080fd5b8151610e8381612c89565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132385784516001600160a01b031683529383019391830191600101613213565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561326e57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122009b426169f71e7d2706e9ada87e99212ecdc0beffb88fd74a5788f41e308599364736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80637d1db4a5116101e7578063bf56b3711161010d578063dce975c1116100a0578063f2fde38b1161006f578063f2fde38b14610ada578063f84ba65d14610afa578063f8821a6214610b1a578063f887ea4014610b3057600080fd5b8063dce975c114610a34578063dd62ed3e14610a54578063e624c4bc14610a9a578063e96fada214610aba57600080fd5b8063d51ed1c8116100dc578063d51ed1c8146109b4578063d5d035f5146109d4578063d914cd4b146109f4578063dab84ee714610a1457600080fd5b8063bf56b3711461093d578063c5363caa14610953578063ca33e64c14610974578063d08893581461099457600080fd5b806395d89b4111610185578063a8aa1b3111610154578063a8aa1b31146108c3578063a9059cbb146108e3578063abe57e7014610903578063b95762441461092357600080fd5b806395d89b411461082557806398807d84146108565780639ff84a9814610883578063a4b45c00146108a357600080fd5b8063882cfb3f116101c1578063882cfb3f146107b4578063893d20e8146107f15780638da5cb5b146107f15780638f9a55c01461080f57600080fd5b80637d1db4a514610768578063817b1cd21461077e57806386f6c3c11461079457600080fd5b8063492a937b116102cc578063659b1c7c1161026a578063715018a611610239578063715018a6146106f25780637364fae8146107075780637516baec146107275780637b0472f01461074857600080fd5b8063659b1c7c1461065b578063672434821461067b5780636ddd17131461069b57806370a08231146106bc57600080fd5b80635804f1e4116102a65780635804f1e4146105f0578063584f969a146106065780636419b6f91461061b578063658d4b7f1461063b57600080fd5b8063492a937b1461059057806352822fa5146105b0578063571ac8b0146105d057600080fd5b806318160ddd116103445780632b112e49116103135780632b112e491461052a578063313ce5671461053f578063421dd7c71461055b57806344c7d6ef1461057057600080fd5b806318160ddd146104b55780631faf723b146104ca578063201e7991146104ea57806323b872dd1461050a57600080fd5b8063095ea7b311610380578063095ea7b3146104305780630f4f7bfe146104605780631031e36e146104805780631161ae391461049557600080fd5b806301339c21146103b25780630445b667146103c957806306fdde03146103f257600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610b50565b005b3480156103d557600080fd5b506103df60265481565b6040519081526020015b60405180910390f35b3480156103fe57600080fd5b5060408051808201909152600c81526b426162794b69626120496e7560a01b60208201525b6040516103e99190612c34565b34801561043c57600080fd5b5061045061044b366004612ca1565b610b9a565b60405190151581526020016103e9565b34801561046c57600080fd5b506103c761047b366004612ccd565b610c07565b34801561048c57600080fd5b506103c7610ce5565b3480156104a157600080fd5b506104506104b0366004612ccd565b610d26565b3480156104c157600080fd5b506003546103df565b3480156104d657600080fd5b506103c76104e5366004612ccd565b610d3a565b3480156104f657600080fd5b506103c7610505366004612ccd565b610dc0565b34801561051657600080fd5b50610450610525366004612cef565b610df5565b34801561053657600080fd5b506103df610e8a565b34801561054b57600080fd5b50604051600981526020016103e9565b34801561056757600080fd5b506103c7610ed0565b34801561057c57600080fd5b506103c761058b366004612d30565b610f0f565b34801561059c57600080fd5b506103c76105ab366004612d57565b611106565b3480156105bc57600080fd5b506103c76105cb366004612d90565b61116c565b3480156105dc57600080fd5b506104506105eb366004612dd2565b611257565b3480156105fc57600080fd5b506103df60245481565b34801561061257600080fd5b506103c7611265565b34801561062757600080fd5b506103df610636366004612def565b6112ad565b34801561064757600080fd5b506103c7610656366004612d57565b61134c565b34801561066757600080fd5b506103c7610676366004612e0d565b6113a1565b34801561068757600080fd5b506103c7610696366004612e76565b611406565b3480156106a757600080fd5b5060255461045090600160b81b900460ff1681565b3480156106c857600080fd5b506103df6106d7366004612dd2565b6001600160a01b031660009081526006602052604090205490565b3480156106fe57600080fd5b506103c7611547565b34801561071357600080fd5b506103c7610722366004612ccd565b6115bb565b34801561073357600080fd5b5060255461045090600160a81b900460ff1681565b34801561075457600080fd5b506103c7610763366004612ccd565b61166a565b34801561077457600080fd5b506103df60045481565b34801561078a57600080fd5b506103df60085481565b3480156107a057600080fd5b506103c76107af366004612ee2565b61183c565b3480156107c057600080fd5b506025546107d99061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016103e9565b3480156107fd57600080fd5b506000546001600160a01b03166107d9565b34801561081b57600080fd5b506103df60055481565b34801561083157600080fd5b50604080518082019091526008815267426162794b69626160c01b6020820152610423565b34801561086257600080fd5b506103df610871366004612dd2565b60076020526000908152604090205481565b34801561088f57600080fd5b506103c761089e366004612dd2565b6118d1565b3480156108af57600080fd5b506103c76108be366004612f25565b61191d565b3480156108cf57600080fd5b506022546107d9906001600160a01b031681565b3480156108ef57600080fd5b506104506108fe366004612ca1565b61199e565b34801561090f57600080fd5b506103c761091e366004612ccd565b6119ab565b34801561092f57600080fd5b506025546104509060ff1681565b34801561094957600080fd5b506103df60235481565b34801561095f57600080fd5b5060255461045090600160b01b900460ff1681565b34801561098057600080fd5b506019546107d9906001600160a01b031681565b3480156109a057600080fd5b506103c76109af366004612f53565b611a10565b3480156109c057600080fd5b506103df6109cf366004612d30565b611a91565b3480156109e057600080fd5b506103c76109ef366004612d57565b611aca565b348015610a0057600080fd5b506103c7610a0f366004612dd2565b611b84565b348015610a2057600080fd5b50601b546107d9906001600160a01b031681565b348015610a4057600080fd5b506103c7610a4f366004612f88565b611bf1565b348015610a6057600080fd5b506103df610a6f366004612f25565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b348015610aa657600080fd5b506103c7610ab5366004612dd2565b611f6b565b348015610ac657600080fd5b50601a546107d9906001600160a01b031681565b348015610ae657600080fd5b506103c7610af5366004612dd2565b611fef565b348015610b0657600080fd5b506103c7610b15366004612d57565b6120d9565b348015610b2657600080fd5b506103df60275481565b348015610b3c57600080fd5b50601e546107d9906001600160a01b031681565b6000546001600160a01b03163314610b835760405162461bcd60e51b8152600401610b7a90612fb6565b60405180910390fd5b60235415610b9057600080fd5b4360235542602455565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bf59086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610c315760405162461bcd60e51b8152600401610b7a90612fb6565b610190606483601454610c449190613001565b610c4e9190613020565b1115610c905760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b6044820152606401610b7a565b62093a80811115610cda5760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b6044820152606401610b7a565b601691909155601755565b6000546001600160a01b03163314610d0f5760405162461bcd60e51b8152600401610b7a90612fb6565b60255460ff1615610d1f57600080fd5b6000602355565b600082610d3283611a91565b119392505050565b6000546001600160a01b03163314610d645760405162461bcd60e51b8152600401610b7a90612fb6565b600082118015610d745750600081115b8015610d975750600581610d8a846103e8613001565b610d949190613020565b10155b610da057600080fd5b8082600354610daf9190613001565b610db99190613020565b6004555050565b6000546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610b7a90612fb6565b601c91909155601d55565b6001600160a01b0383166000908152600b6020908152604080832033845290915281205460001914610e75576001600160a01b0384166000908152600b60209081526040808320338452909152902054610e50908390613042565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b610e8084848461212e565b90505b9392505050565b6002546001600160a01b039081166000908152600660205260408082205460015490931682528120549091610ebe91613059565b600354610ecb9190613042565b905090565b6000546001600160a01b03163314610efa5760405162461bcd60e51b8152600401610b7a90612fb6565b6025805460ff60b01b1916600160b01b179055565b3360009081526007602052604090205415801590610fa257506000818152600960205260408082205490516346ae776560e11b81523360048201526001600160a01b0390911690638d5ceeca90602401602060405180830381865afa158015610f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa09190613071565b115b610fe15760405162461bcd60e51b815260206004820152601060248201526f139bc81d1bdad95b9cc81cdd185ad95960821b6044820152606401610b7a565b60008181526009602052604080822054905163155b538760e31b81523360048201526001600160a01b039091169063aada9c3890602401602060405180830381865afa158015611035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110599190613071565b116110995760405162461bcd60e51b815260206004820152601060248201526f436c61696d73206e6f7420726561647960801b6044820152606401610b7a565b60008181526009602052604090819020549051630f41a04d60e11b81523360048201526001600160a01b0390911690631e83409a90602401600060405180830381600087803b1580156110eb57600080fd5b505af11580156110ff573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146111305760405162461bcd60e51b8152600401610b7a90612fb6565b6001600160a01b03909116600090815260208080526040808320805494151560ff199586168117909155600f9092529091208054909216179055565b6000546001600160a01b031633146111965760405162461bcd60e51b8152600401610b7a90612fb6565b806111db5760405162461bcd60e51b815260206004820152601560248201527410dbdb999a5c9b481cdd185ada5b99c81c995cd95d605a1b6044820152606401610b7a565b6001600160a01b03831660009081526007602052604090205482111561123a5760405162461bcd60e51b815260206004820152601460248201527343616e277420696e637265617365207374616b6560601b6044820152606401610b7a565b506001600160a01b03909116600090815260076020526040902055565b6000610c0182600019610b9a565b6000546001600160a01b0316331461128f5760405162461bcd60e51b8152600401610b7a90612fb6565b60006023541161129e57600080fd5b6025805460ff19166001179055565b60004360235460016112bf9190613059565b106112da5760016018546112d39190613042565b9050610c01565b821561131657816112fa576015546014546112f59190613059565b6112d3565b606460165460145461130c9190613001565b6112d39190613020565b816113305760155460145461132b9190613042565b610e83565b60646016546014546113429190613001565b610e839190613020565b6000546001600160a01b031633146113765760405162461bcd60e51b8152600401610b7a90612fb6565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113cb5760405162461bcd60e51b8152600401610b7a90612fb6565b80156113e857602554600160b01b900460ff16156113e857600080fd5b60258054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146114305760405162461bcd60e51b8152600401610b7a90612fb6565b82811461143c57600080fd5b6025805460ff60b81b198116909155600160b81b900460ff1660005b8481101561152457602060008787848181106114765761147661308a565b905060200201602081019061148b9190612dd2565b6001600160a01b0316815260208101919091526040016000205460ff16156114b257600080fd5b611511338787848181106114c8576114c861308a565b90506020020160208101906114dd9190612dd2565b6114e96009600a613184565b8787868181106114fb576114fb61308a565b9050602002013561150c9190613001565b61212e565b508061151c81613193565b915050611458565b5060258054911515600160b81b0260ff60b81b1990921691909117905550505050565b6000546001600160a01b031633146115715760405162461bcd60e51b8152600401610b7a90612fb6565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115e55760405162461bcd60e51b8152600401610b7a90612fb6565b600060646115f38347613001565b6115fd9190613020565b600084815260096020526040808220548151630d0e30db60e41b815291519394506001600160a01b03169263d0e30db09285926004808201939182900301818588803b15801561164c57600080fd5b505af1158015611660573d6000803e3d6000fd5b5050505050505050565b33600090815260076020908152604080832054600690925290912054829161169191613042565b10156116d45760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567687420746f6b656e7360701b6044820152606401610b7a565b6000828152600960209081526040918290205482516347535d7b60e01b815292516001600160a01b03909116926347535d7b9260048083019391928290030181865afa158015611728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174c91906131ae565b6117895760405162461bcd60e51b815260206004820152600e60248201526d14dd185ada5b99c818db1bdcd95960921b6044820152606401610b7a565b33600090815260076020526040812080548392906117a8908490613059565b9250508190555080600860008282546117c19190613059565b9091555050600082815260096020526040908190205490516303a041cf60e21b8152336004820152602481018390526001600160a01b0390911690630e81073c906044015b600060405180830381600087803b15801561182057600080fd5b505af1158015611834573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146118665760405162461bcd60e51b8152600401610b7a90612fb6565b60108690556011859055601284905560138390556015829055828461188b8789613059565b6118959190613059565b61189f9190613059565b60145560188190556118b2600482613020565b60145411156118c057600080fd5b601454601554111561183457600080fd5b6000546001600160a01b031633146118fb5760405162461bcd60e51b8152600401610b7a90612fb6565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119475760405162461bcd60e51b8152600401610b7a90612fb6565b6001546019546001600160a01b0390811691161461197b57601980546001600160a01b0319166001600160a01b0384161790555b601a80546001600160a01b0319166001600160a01b039290921691909117905550565b6000610e8333848461212e565b6000546001600160a01b031633146119d55760405162461bcd60e51b8152600401610b7a90612fb6565b6000811180156119e757506127108111155b6119f057600080fd5b80826003546119ff9190613001565b611a099190613020565b6005555050565b6000546001600160a01b03163314611a3a5760405162461bcd60e51b8152600401610b7a90612fb6565b600082118015611a4a5750600081115b611a5357600080fd5b6025805460ff60b81b1916600160b81b85151502179055600354611a78908290613020565b602755600354611a89908390613020565b602655505050565b6000611a9b610e8a565b6022546001600160a01b0316600090815260066020526040902054611ac09084613001565b610c019190613020565b6000546001600160a01b03163314611af45760405162461bcd60e51b8152600401610b7a90612fb6565b6025546001600160a01b038381166101009092041614611b4657602554600160b01b900460ff1615611b2557600080fd5b60258054610100600160a81b0319166101006001600160a01b038516021790555b8015611b80576025546040516318e02bd960e01b81523360048201526101009091046001600160a01b0316906318e02bd990602401611806565b5050565b6000546001600160a01b03163314611bae5760405162461bcd60e51b8152600401610b7a90612fb6565b600a8054600090815260096020526040812080546001600160a01b0319166001600160a01b038516179055815483929091611be883613193565b91905055505050565b600082118015611c105750336000908152600760205260409020548211155b8015611c2b5750336000908152600660205260409020548211155b8015611cae5750600083815260096020526040908190205490516346ae776560e11b815233600482015283916001600160a01b031690638d5ceeca90602401602060405180830381865afa158015611c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cab9190613071565b10155b611cef5760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567687420746f6b656e7360701b6044820152606401610b7a565b600083815260096020526040808220549051630994fc3160e11b81523360048201526001600160a01b0390911690631329f86290602401602060405180830381865afa158015611d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d679190613071565b1115611eb75780611da95760405162461bcd60e51b815260206004820152600c60248201526b14dd185ad9481b1bd8dad95960a21b6044820152606401610b7a565b60008381526009602052604080822054905163a450a2f560e01b81523360048201526001600160a01b039091169063a450a2f590602401602060405180830381865afa158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e219190613071565b905060006018548285611e349190613001565b611e3e9190613020565b90508015611eb4573360009081526006602052604081208054849290611e65908490613042565b90915550503060009081526006602052604081208054849290611e89908490613059565b9091555050604051828152309033906000805160206132888339815191529060200160405180910390a35b50505b6000838152600960205260409081902054905163beffbb8960e01b8152336004820152602481018490526001600160a01b039091169063beffbb8990604401600060405180830381600087803b158015611f1057600080fd5b505af1158015611f24573d6000803e3d6000fd5b50503360009081526007602052604081208054869450909250611f48908490613042565b925050819055508160086000828254611f619190613042565b9091555050505050565b6000546001600160a01b03163314611f955760405162461bcd60e51b8152600401610b7a90612fb6565b6001600160a01b03166000908152600d602090815260408083208054600160ff199182168117909255602184528285208054821683179055600e84528285208054821683179055600f909352922080549091169091179055565b6000546001600160a01b031633146120195760405162461bcd60e51b8152600401610b7a90612fb6565b6001600160a01b03811661207e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121035760405162461bcd60e51b8152600401610b7a90612fb6565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600760209081526040808320546006909252822054839161215d91613042565b10156121a25760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610b7a565b600082116121f25760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e736665727265640000000000000000006044820152606401610b7a565b60285460ff161561220f576122088484846124cc565b9050610e83565b612219848361256f565b6001600160a01b038316600090815260208052604090205460ff1615801561224f57506001546001600160a01b03848116911614155b1561227e576001600160a01b0383166000908152600e602052604090205460ff1661227e5761227e83836125d8565b602354612310576001600160a01b03841660009081526021602052604090205460ff16806122c457506001600160a01b03831660009081526021602052604090205460ff165b6123105760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610b7a565b6001600160a01b03841660009081526006602052604081208054849290612338908490613042565b90915550506001600160a01b0384166000908152600d602052604081205460ff1615801561237f57506001600160a01b0384166000908152600d602052604090205460ff16155b6123895782612394565b612394858585612662565b905061239f846127a7565b156123b35782156123b3576123b38361284d565b6001600160a01b038416600090815260066020526040812080548392906123db908490613059565b9091555050602354151580156123fa5750602554600160a81b900460ff165b156124865760255460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052610100909204909116906348760858906064016020604051808303816000875af1158015612460573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248491906131ae565b505b836001600160a01b0316856001600160a01b0316600080516020613288833981519152836040516124b991815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166000908152600660205260408120805483919083906124f6908490613042565b90915550506001600160a01b03831660009081526006602052604081208054849290612523908490613059565b92505081905550826001600160a01b0316846001600160a01b03166000805160206132888339815191528460405161255d91815260200190565b60405180910390a35060019392505050565b6004548111158061259857506001600160a01b0382166000908152600e602052604090205460ff165b611b805760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b7a565b6005546001600160a01b0383166000908152600660205260409020548190612601908490613059565b111561265d5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610b7a565b505050565b6018546001600160a01b0380841660009081526020805260408082205492871682528120549092839290916126cd9160ff908116911615801561063657506017546001600160a01b0389166000908152600c602052604090205442916126c791613059565b116112ad565b6126d79085613001565b6126e19190613020565b6001600160a01b038616600090815260208052604090205490915060ff16801561272157506001600160a01b0384166000908152600c6020526040902054155b15612742576001600160a01b0384166000908152600c602052604090204290555b3060009081526006602052604081208054839290612761908490613059565b909155505060405181815230906001600160a01b038716906000805160206132888339815191529060200160405180910390a361279e8184613042565b95945050505050565b33600090815260208052604081205460ff161580156127d65750336000908152600d602052604090205460ff16155b80156127e5575060285460ff16155b80156127fa5750602554600160b81b900460ff165b801561281d57506001600160a01b038216600090815260208052604090205460ff165b801561283a57506027543060009081526006602052604090205410155b8015610c01575060006014541192915050565b6028805460ff19166001179055602654600090821061286e57602654612870565b815b3060009081526006602052604090205490915081111561289c5750306000908152600660205260409020545b60006128ac601c54601d54610d26565b6128b8576010546128bb565b60005b90506000600260145483856128d09190613001565b6128da9190613020565b6128e49190613020565b90506128f08184613042565b6040805160028082526060820183529295506000929091602083019080368337019050509050308160008151811061292a5761292a61308a565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a791906131cb565b816001815181106129ba576129ba61308a565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b81524792919091169063791ac94790612a049088906000908790309042906004016131e8565b600060405180830381600087803b158015612a1e57600080fd5b505af1158015612a32573d6000803e3d6000fd5b5050505060008147612a449190613042565b90506000612a53600287613020565b601454612a609190613042565b90506000600282612a718986613001565b612a7b9190613020565b612a859190613020565b905060008260125485612a989190613001565b612aa29190613020565b905060008360135486612ab59190613001565b612abf9190613020565b90508715612b9957601e5460195460405163f305d71960e01b8152306004820152602481018b905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c40160606040518083038185885af1158015612b37573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b5c9190613259565b505060408051858152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b8115612bdb57601a546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612bd9573d6000803e3d6000fd5b505b8015612c1d57601b546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612c1b573d6000803e3d6000fd5b505b50506028805460ff19169055505050505050505050565b600060208083528351808285015260005b81811015612c6157858101830151858201604001528201612c45565b81811115612c73576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612c9e57600080fd5b50565b60008060408385031215612cb457600080fd5b8235612cbf81612c89565b946020939093013593505050565b60008060408385031215612ce057600080fd5b50508035926020909101359150565b600080600060608486031215612d0457600080fd5b8335612d0f81612c89565b92506020840135612d1f81612c89565b929592945050506040919091013590565b600060208284031215612d4257600080fd5b5035919050565b8015158114612c9e57600080fd5b60008060408385031215612d6a57600080fd5b8235612d7581612c89565b91506020830135612d8581612d49565b809150509250929050565b600080600060608486031215612da557600080fd5b8335612db081612c89565b9250602084013591506040840135612dc781612d49565b809150509250925092565b600060208284031215612de457600080fd5b8135610e8381612c89565b60008060408385031215612e0257600080fd5b8235612d7581612d49565b600060208284031215612e1f57600080fd5b8135610e8381612d49565b60008083601f840112612e3c57600080fd5b50813567ffffffffffffffff811115612e5457600080fd5b6020830191508360208260051b8501011115612e6f57600080fd5b9250929050565b60008060008060408587031215612e8c57600080fd5b843567ffffffffffffffff80821115612ea457600080fd5b612eb088838901612e2a565b90965094506020870135915080821115612ec957600080fd5b50612ed687828801612e2a565b95989497509550505050565b60008060008060008060c08789031215612efb57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612f3857600080fd5b8235612f4381612c89565b91506020830135612d8581612c89565b600080600060608486031215612f6857600080fd5b8335612f7381612d49565b95602085013595506040909401359392505050565b600080600060608486031215612f9d57600080fd5b83359250602084013591506040840135612dc781612d49565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561301b5761301b612feb565b500290565b60008261303d57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561305457613054612feb565b500390565b6000821982111561306c5761306c612feb565b500190565b60006020828403121561308357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600181815b808511156130db5781600019048211156130c1576130c1612feb565b808516156130ce57918102915b93841c93908002906130a5565b509250929050565b6000826130f257506001610c01565b816130ff57506000610c01565b8160018114613115576002811461311f5761313b565b6001915050610c01565b60ff84111561313057613130612feb565b50506001821b610c01565b5060208310610133831016604e8410600b841016171561315e575081810a610c01565b61316883836130a0565b806000190482111561317c5761317c612feb565b029392505050565b6000610e8360ff8416836130e3565b60006000198214156131a7576131a7612feb565b5060010190565b6000602082840312156131c057600080fd5b8151610e8381612d49565b6000602082840312156131dd57600080fd5b8151610e8381612c89565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132385784516001600160a01b031683529383019391830191600101613213565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561326e57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122009b426169f71e7d2706e9ada87e99212ecdc0beffb88fd74a5788f41e308599364736f6c634300080b0033

Deployed Bytecode Sourcemap

14074:17473:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27953:158;;;;;;;;;;;;;:::i;:::-;;16134:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;16134:49:0;;;;;;;;17753:71;;;;;;;;;;-1:-1:-1;17816:5:0;;;;;;;;;;;;-1:-1:-1;;;17816:5:0;;;;17753:71;;;;;;;:::i;18159:216::-;;;;;;;;;;-1:-1:-1;18159:216:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;18159:216:0;1254:187:1;27526:321:0;;;;;;;;;;-1:-1:-1;27526:321:0;;;;;:::i;:::-;;:::i;18517:110::-;;;;;;;;;;;;;:::i;30641:150::-;;;;;;;;;;-1:-1:-1;30641:150:0;;;;;:::i;:::-;;:::i;17501:88::-;;;;;;;;;;-1:-1:-1;17574:12:0;;17501:88;;28119:230;;;;;;;;;;-1:-1:-1;28119:230:0;;;;;:::i;:::-;;:::i;30141:182::-;;;;;;;;;;-1:-1:-1;30141:182:0;;;;;:::i;:::-;;:::i;19527:341::-;;;;;;;;;;-1:-1:-1;19527:341:0;;;;;:::i;:::-;;:::i;30331:138::-;;;;;;;;;;;;;:::i;17595:71::-;;;;;;;;;;-1:-1:-1;17595:71:0;;14468:1;2302:36:1;;2290:2;2275:18;17595:71:0;2160:184:1;19263:92:0;;;;;;;;;;;;;:::i;26034:295::-;;;;;;;;;;-1:-1:-1;26034:295:0;;;;;:::i;:::-;;:::i;30799:171::-;;;;;;;;;;-1:-1:-1;30799:171:0;;;;;:::i;:::-;;:::i;27263:255::-;;;;;;;;;;-1:-1:-1;27263:255:0;;;;;:::i;:::-;;:::i;18383:122::-;;;;;;;;;;-1:-1:-1;18383:122:0;;;;;:::i;:::-;;:::i;15893:27::-;;;;;;;;;;;;;;;;18639:116;;;;;;;;;;;;;:::i;22153:349::-;;;;;;;;;;-1:-1:-1;22153:349:0;;;;;:::i;:::-;;:::i;28571:119::-;;;;;;;;;;-1:-1:-1;28571:119:0;;;;;:::i;:::-;;:::i;18763:170::-;;;;;;;;;;-1:-1:-1;18763:170:0;;;;;:::i;:::-;;:::i;30975:483::-;;;;;;;;;;-1:-1:-1;30975:483:0;;;;;:::i;:::-;;:::i;16097:30::-;;;;;;;;;;-1:-1:-1;16097:30:0;;;;-1:-1:-1;;;16097:30:0;;;;;;17907:105;;;;;;;;;;-1:-1:-1;17907:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17991:18:0;17973:7;17991:18;;;:9;:18;;;;;;;17907:105;12384:148;;;;;;;;;;;;;:::i;25469:202::-;;;;;;;;;;-1:-1:-1;25469:202:0;;;;;:::i;:::-;;:::i;16007:36::-;;;;;;;;;;-1:-1:-1;16007:36:0;;;;-1:-1:-1;;;16007:36:0;;;;;;25679:347;;;;;;;;;;-1:-1:-1;25679:347:0;;;;;:::i;:::-;;:::i;14541:54::-;;;;;;;;;;;;;;;;14761:26;;;;;;;;;;;;;;;;28833:563;;;;;;;;;;-1:-1:-1;28833:563:0;;;;;:::i;:::-;;:::i;15973:27::-;;;;;;;;;;-1:-1:-1;15973:27:0;;;;;;;-1:-1:-1;;;;;15973:27:0;;;;;;-1:-1:-1;;;;;6238:32:1;;;6220:51;;6208:2;6193:18;15973:27:0;6056:221:1;17830:71:0;;;;;;;;;;-1:-1:-1;17873:7:0;11808:6;-1:-1:-1;;;;;11808:6:0;17830:71;30331:138;14602:56;;;;;;;;;;;;;;;;17672:75;;;;;;;;;;-1:-1:-1;17737:7:0;;;;;;;;;;;;-1:-1:-1;;;17737:7:0;;;;17672:75;;14712:42;;;;;;;;;;-1:-1:-1;14712:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;29700:106;;;;;;;;;;-1:-1:-1;29700:106:0;;;;;:::i;:::-;;:::i;29404:284::-;;;;;;;;;;-1:-1:-1;29404:284:0;;;;;:::i;:::-;;:::i;15833:19::-;;;;;;;;;;-1:-1:-1;15833:19:0;;;;-1:-1:-1;;;;;15833:19:0;;;19363:156;;;;;;;;;;-1:-1:-1;19363:156:0;;;;;:::i;:::-;;:::i;28361:202::-;;;;;;;;;;-1:-1:-1;28361:202:0;;;;;:::i;:::-;;:::i;15927:33::-;;;;;;;;;;-1:-1:-1;15927:33:0;;;;;;;;15861:25;;;;;;;;;;;;;;;;16050:38;;;;;;;;;;-1:-1:-1;16050:38:0;;;;-1:-1:-1;;;16050:38:0;;;;;;15404:36;;;;;;;;;;-1:-1:-1;15404:36:0;;;;-1:-1:-1;;;;;15404:36:0;;;29814:319;;;;;;;;;;-1:-1:-1;29814:319:0;;;;;:::i;:::-;;:::i;30477:156::-;;;;;;;;;;-1:-1:-1;30477:156:0;;;;;:::i;:::-;;:::i;18945:306::-;;;;;;;;;;-1:-1:-1;18945:306:0;;;;;:::i;:::-;;:::i;25309:152::-;;;;;;;;;;-1:-1:-1;25309:152:0;;;;;:::i;:::-;;:::i;15497:37::-;;;;;;;;;;-1:-1:-1;15497:37:0;;;;-1:-1:-1;;;;;15497:37:0;;;26337:918;;;;;;;;;;-1:-1:-1;26337:918:0;;;;;:::i;:::-;;:::i;18018:133::-;;;;;;;;;;-1:-1:-1;18018:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;18120:19:0;;;18102:7;18120:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;18018:133;21893:252;;;;;;;;;;-1:-1:-1;21893:252:0;;;;;:::i;:::-;;:::i;15447:43::-;;;;;;;;;;-1:-1:-1;15447:43:0;;;;-1:-1:-1;;;;;15447:43:0;;;12687:244;;;;;;;;;;-1:-1:-1;12687:244:0;;;;;:::i;:::-;;:::i;28698:127::-;;;;;;;;;;-1:-1:-1;28698:127:0;;;;;:::i;:::-;;:::i;16190:49::-;;;;;;;;;;;;;;;;15627:24;;;;;;;;;;-1:-1:-1;15627:24:0;;;;-1:-1:-1;;;;;15627:24:0;;;27953:158;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;;;;;;;;;28010:10:::1;::::0;:15;28001:25:::1;;;::::0;::::1;;28050:12;28037:10;:25:::0;28088:15:::1;28073:12;:30:::0;27953:158::o;18159:216::-;18263:10;18234:4;18251:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18251:32:0;;;;;;;;;;:41;;;18308:37;18234:4;;18251:32;;18308:37;;;;18286:6;160:25:1;;148:2;133:18;;14:177;18308:37:0;;;;;;;;-1:-1:-1;18363:4:0;18159:216;;;;;:::o;27526:321::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;27677:3:::1;27670;27646:20;27635:8;;:31;;;;:::i;:::-;27634:39;;;;:::i;:::-;:46;;27626:76;;;::::0;-1:-1:-1;;;27626:76:0;;9187:2:1;27626:76:0::1;::::0;::::1;9169:21:1::0;9226:2;9206:18;;;9199:30;-1:-1:-1;;;9245:18:1;;;9238:47;9302:18;;27626:76:0::1;8985:341:1::0;27626:76:0::1;27732:6;27721:7;:17;;27713:50;;;::::0;-1:-1:-1;;;27713:50:0;;9533:2:1;27713:50:0::1;::::0;::::1;9515:21:1::0;9572:2;9552:18;;;9545:30;-1:-1:-1;;;9591:18:1;;;9584:50;9651:18;;27713:50:0::1;9331:344:1::0;27713:50:0::1;27774:11;:34:::0;;;;27819:10:::1;:20:::0;27526:321::o;18517:110::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;18580:13:::1;::::0;::::1;;18579:14;18571:23;;;::::0;::::1;;18618:1;18605:10;:14:::0;18517:110::o;30641:150::-;30721:4;30777:6;30745:29;30765:8;30745:19;:29::i;:::-;:38;;30641:150;-1:-1:-1;;;30641:150:0:o;28119:230::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;28225:1:::1;28213:9;:13;:28;;;;;28240:1;28230:7;:11;28213:28;:65;;;;-1:-1:-1::0;28277:1:0::1;28266:7:::0;28246:16:::1;:9:::0;28258:4:::1;28246:16;:::i;:::-;28245:28;;;;:::i;:::-;:33;;28213:65;28205:74;;;::::0;::::1;;28334:7;28321:9;28306:12;;:24;;;;:::i;:::-;28305:36;;;;:::i;:::-;28290:12;:51:::0;-1:-1:-1;;28119:230:0:o;30141:182::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;30238:15:::1;:25:::0;;;;30274:26:::1;:41:::0;30141:182::o;19527:341::-;-1:-1:-1;;;;;19647:19:0;;19627:4;19647:19;;;:11;:19;;;;;;;;19667:10;19647:31;;;;;;;;-1:-1:-1;;19647:52:0;19644:157;;-1:-1:-1;;;;;19749:19:0;;;;;;:11;:19;;;;;;;;19769:10;19749:31;;;;;;;;:40;;19783:6;;19749:40;:::i;:::-;-1:-1:-1;;;;;19715:19:0;;;;;;:11;:19;;;;;;;;19735:10;19715:31;;;;;;;:74;19644:157;19820:40;19834:6;19842:9;19853:6;19820:13;:40::i;:::-;19813:47;;19527:341;;;;;;:::o;30331:138::-;30455:4;;-1:-1:-1;;;;;30455:4:0;;;30384:7;17991:18;;;:9;:18;;;;;;;30437:4;;;;;17991:18;;;;;30384:7;;30427:33;;;:::i;:::-;30411:12;;:50;;;;:::i;:::-;30404:57;;30331:138;:::o;19263:92::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;19322:18:::1;:25:::0;;-1:-1:-1;;;;19322:25:0::1;-1:-1:-1::0;;;19322:25:0::1;::::0;;19263:92::o;26034:295::-;26103:10;26117:1;26096:18;;;:6;:18;;;;;;:22;;;;:70;;-1:-1:-1;26165:1:0;26122:16;;;:10;:16;;;;;;;:40;;-1:-1:-1;;;26122:40:0;;26151:10;26122:40;;;6220:51:1;-1:-1:-1;;;;;26122:16:0;;;;:28;;6193:18:1;;26122:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;26096:70;26088:99;;;;-1:-1:-1;;;26088:99:0;;10334:2:1;26088:99:0;;;10316:21:1;10373:2;10353:18;;;10346:30;-1:-1:-1;;;10392:18:1;;;10385:46;10448:18;;26088:99:0;10132:340:1;26088:99:0;26254:1;26206:16;;;:10;:16;;;;;;;:45;;-1:-1:-1;;;26206:45:0;;26240:10;26206:45;;;6220:51:1;-1:-1:-1;;;;;26206:16:0;;;;:33;;6193:18:1;;26206:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;26198:78;;;;-1:-1:-1;;;26198:78:0;;10679:2:1;26198:78:0;;;10661:21:1;10718:2;10698:18;;;10691:30;-1:-1:-1;;;10737:18:1;;;10730:46;10793:18;;26198:78:0;10477:340:1;26198:78:0;26287:16;;;;:10;:16;;;;;;;;:34;;-1:-1:-1;;;26287:34:0;;26310:10;26287:34;;;6220:51:1;-1:-1:-1;;;;;26287:16:0;;;;:22;;6193:18:1;;26287:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26034:295;:::o;30799:171::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30885:21:0;;::::1;;::::0;;;:14:::1;:21:::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;30885:32:0;;::::1;::::0;::::1;::::0;;;30928:16:::1;:23:::0;;;;;;:34;;;;::::1;;::::0;;30799:171::o;27263:255::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;27373:7:::1;27365:41;;;::::0;-1:-1:-1;;;27365:41:0;;11024:2:1;27365:41:0::1;::::0;::::1;11006:21:1::0;11063:2;11043:18;;;11036:30;-1:-1:-1;;;11082:18:1;;;11075:51;11143:18;;27365:41:0::1;10822:345:1::0;27365:41:0::1;-1:-1:-1::0;;;;;27435:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;27425:25;::::1;;27417:58;;;::::0;-1:-1:-1;;;27417:58:0;;11374:2:1;27417:58:0::1;::::0;::::1;11356:21:1::0;11413:2;11393:18;;;11386:30;-1:-1:-1;;;11432:18:1;;;11425:50;11492:18;;27417:58:0::1;11172:344:1::0;27417:58:0::1;-1:-1:-1::0;;;;;;27486:15:0;;::::1;;::::0;;;:6:::1;:15;::::0;;;;:24;27263:255::o;18383:122::-;18438:4;18462:35;18470:7;-1:-1:-1;;18462:7:0;:35::i;18639:116::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;18714:1:::1;18701:10;;:14;18693:23;;;::::0;::::1;;18727:13;:20:::0;;-1:-1:-1;;18727:20:0::1;18743:4;18727:20;::::0;;18639:116::o;22153:349::-;22228:7;22269:12;22251:10;;22264:1;22251:14;;;;:::i;:::-;:30;22248:64;;22308:1;22291:14;;:18;;;;:::i;:::-;22284:25;;;;22248:64;22326:7;22322:87;;;22342:12;:67;;22401:8;;22390;;:19;;;;:::i;:::-;22342:67;;;22384:3;22369:11;;22358:8;;:22;;;;:::i;:::-;22357:30;;;;:::i;22322:87::-;22427:12;:67;;22486:8;;22475;;:19;;;;:::i;:::-;22427:67;;;22469:3;22454:11;;22443:8;;:22;;;;:::i;:::-;22442:30;;;;:::i;28571:119::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28654:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28654:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28571:119::o;18763:170::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;18835:8:::1;18831:55;;;18867:18;::::0;-1:-1:-1;;;18867:18:0;::::1;;;18866:19;18858:28;;;::::0;::::1;;18897:17;:28:::0;;;::::1;;-1:-1:-1::0;;;18897:28:0::1;-1:-1:-1::0;;;;18897:28:0;;::::1;::::0;;;::::1;::::0;;18763:170::o;30975:483::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;31094:35;;::::1;31086:44;;;::::0;::::1;;31161:11;::::0;;-1:-1:-1;;;;31183:19:0;::::1;::::0;;;-1:-1:-1;;;31161:11:0;::::1;;;-1:-1:-1::0;31213:201:0::1;31233:21:::0;;::::1;31213:201;;;31285:14;:29;31300:10;;31311:1;31300:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31285:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;31285:29:0;;::::1;;31284:30;31276:39;;;::::0;::::1;;31330:72;31344:10;31356;;31367:1;31356:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;31385:15;14468:1;31385:2;:15;:::i;:::-;31371:7;;31379:1;31371:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;31330:13;:72::i;:::-;-1:-1:-1::0;31256:3:0;::::1;::::0;::::1;:::i;:::-;;;;31213:201;;;-1:-1:-1::0;31424:11:0::1;:26:::0;;;::::1;;-1:-1:-1::0;;;31424:26:0::1;-1:-1:-1::0;;;;31424:26:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;30975:483:0:o;12384:148::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;12491:1:::1;12475:6:::0;;12454:40:::1;::::0;-1:-1:-1;;;;;12475:6:0;;::::1;::::0;12454:40:::1;::::0;12491:1;;12454:40:::1;12522:1;12505:19:::0;;-1:-1:-1;;;;;;12505:19:0::1;::::0;;12384:148::o;25469:202::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;25550:16:::1;25606:3;25570:32;25594:8:::0;25570:21:::1;:32;:::i;:::-;25569:40;;;;:::i;:::-;25620:16;::::0;;;:10:::1;:16;::::0;;;;;;:43;;-1:-1:-1;;;25620:43:0;;;;25550:59;;-1:-1:-1;;;;;;25620:16:0::1;::::0;:24:::1;::::0;25550:59;;25620:43:::1;::::0;;::::1;::::0;;;;;;;25550:59;25620:16;:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;25539:132;25469:202:::0;;:::o;25679:347::-;25783:10;25776:18;;;;:6;:18;;;;;;;;;25752:9;:21;;;;;;;25798:6;;25752:42;;;:::i;:::-;:52;;25744:83;;;;-1:-1:-1;;;25744:83:0;;13378:2:1;25744:83:0;;;13360:21:1;13417:2;13397:18;;;13390:30;-1:-1:-1;;;13436:18:1;;;13429:48;13494:18;;25744:83:0;13176:342:1;25744:83:0;25846:16;;;;:10;:16;;;;;;;;;;:25;;-1:-1:-1;;;25846:25:0;;;;-1:-1:-1;;;;;25846:16:0;;;;:23;;:25;;;;;:16;;:25;;;;;:16;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25838:52;;;;-1:-1:-1;;;25838:52:0;;13975:2:1;25838:52:0;;;13957:21:1;14014:2;13994:18;;;13987:30;-1:-1:-1;;;14033:18:1;;;14026:44;14087:18;;25838:52:0;13773:338:1;25838:52:0;25908:10;25901:18;;;;:6;:18;;;;;:28;;25923:6;;25901:18;:28;;25923:6;;25901:28;:::i;:::-;;;;;;;;25955:6;25940:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;25972:16:0;;;;:10;:16;;;;;;;;:46;;-1:-1:-1;;;25972:46:0;;25999:10;25972:46;;;14290:51:1;14357:18;;;14350:34;;;-1:-1:-1;;;;;25972:16:0;;;;:26;;14263:18:1;;25972:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25679:347;;:::o;28833:563::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;29011:12:::1;:28:::0;;;29050:13:::1;:30:::0;;;29091:12:::1;:28:::0;;;29130:6:::1;:16:::0;;;29157:8:::1;:20:::0;;;29139:7;29106:13;29199:30:::1;29066:14:::0;29026:13;29199:30:::1;:::i;:::-;:46;;;;:::i;:::-;:56;;;;:::i;:::-;29188:8;:67:::0;29266:14:::1;:32:::0;;;29329:18:::1;29346:1;29283:15:::0;29329:18:::1;:::i;:::-;29317:8;;:30;;29309:39;;;::::0;::::1;;29379:8;;29367;;:20;;29359:29;;;::::0;::::1;29700:106:::0;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;29768:14:::1;:30:::0;;-1:-1:-1;;;;;;29768:30:0::1;-1:-1:-1::0;;;;;29768:30:0;;;::::1;::::0;;;::::1;::::0;;29700:106::o;29404:284::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;29551:4:::1;::::0;29526:21:::1;::::0;-1:-1:-1;;;;;29526:21:0;;::::1;29551:4:::0;::::1;29526:29;29522:94;;29570:21;:46:::0;;-1:-1:-1;;;;;;29570:46:0::1;-1:-1:-1::0;;;;;29570:46:0;::::1;;::::0;;29522:94:::1;29627:20;:53:::0;;-1:-1:-1;;;;;;29627:53:0::1;-1:-1:-1::0;;;;;29627:53:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;29404:284:0:o;19363:156::-;19443:4;19467:44;19481:10;19493:9;19504:6;19467:13;:44::i;28361:202::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;28469:1:::1;28459:7;:11;:31;;;;;28485:5;28474:7;:16;;28459:31;28451:40;;;::::0;::::1;;28548:7;28535:9;28520:12;;:24;;;;:::i;:::-;28519:36;;;;:::i;:::-;28502:14;:53:::0;-1:-1:-1;;28361:202:0:o;29814:319::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;29958:1:::1;29943:12;:16;:39;;;;;29981:1;29963:15;:19;29943:39;29935:48;;;::::0;::::1;;29994:11;:22:::0;;-1:-1:-1;;;;29994:22:0::1;-1:-1:-1::0;;;29994:22:0;::::1;;;;::::0;;30041:12:::1;::::0;:30:::1;::::0;30056:15;;30041:30:::1;:::i;:::-;30027:11;:44:::0;30098:12:::1;::::0;:27:::1;::::0;30113:12;;30098:27:::1;:::i;:::-;30082:13;:43:::0;-1:-1:-1;;;29814:319:0:o;30477:156::-;30545:7;30603:22;:20;:22::i;:::-;30594:4;;-1:-1:-1;;;;;30594:4:0;17973:7;17991:18;;;:9;:18;;;;;;30573:26;;:8;:26;:::i;:::-;30572:53;;;;:::i;18945:306::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;19058:9:::1;::::0;-1:-1:-1;;;;;19035:33:0;;::::1;19058:9;::::0;;::::1;;19035:33;19031:143;;19093:18;::::0;-1:-1:-1;;;19093:18:0;::::1;;;19092:19;19084:28;;;::::0;::::1;;19127:9;:35:::0;;-1:-1:-1;;;;;;19127:35:0::1;;-1:-1:-1::0;;;;;19127:35:0;::::1;;;::::0;;19031:143:::1;19188:5;19184:59;;;19208:9;::::0;:35:::1;::::0;-1:-1:-1;;;19208:35:0;;19232:10:::1;19208:35;::::0;::::1;6220:51:1::0;19208:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;19208:9:0::1;::::0;:23:::1;::::0;6193:18:1;;19208:35:0::1;6056:221:1::0;19184:59:0::1;18945:306:::0;;:::o;25309:152::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;25420:5:::1;::::0;;25370:13:::1;25409:17:::0;;;:10:::1;:17;::::0;;;;:26;;-1:-1:-1;;;;;;25409:26:0::1;-1:-1:-1::0;;;;;25409:26:0;::::1;;::::0;;25446:7;;25409:26;;25446:7;;::::1;::::0;::::1;:::i;:::-;;;;;;25359:102;25309:152:::0;:::o;26337:918::-;26441:1;26432:6;:10;:42;;;;-1:-1:-1;26453:10:0;26446:18;;;;:6;:18;;;;;;:28;-1:-1:-1;26446:28:0;26432:42;:77;;;;-1:-1:-1;26488:10:0;26478:21;;;;:9;:21;;;;;;:31;-1:-1:-1;26478:31:0;26432:77;:131;;;;-1:-1:-1;26513:16:0;;;;:10;:16;;;;;;;;:40;;-1:-1:-1;;;26513:40:0;;26542:10;26513:40;;;6220:51:1;26557:6:0;;-1:-1:-1;;;;;26513:16:0;;:28;;6193:18:1;;26513:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;26432:131;26424:162;;;;-1:-1:-1;;;26424:162:0;;13378:2:1;26424:162:0;;;13360:21:1;13417:2;13397:18;;;13390:30;-1:-1:-1;;;13436:18:1;;;13429:48;13494:18;;26424:162:0;13176:342:1;26424:162:0;26644:1;26600:16;;;:10;:16;;;;;;;:41;;-1:-1:-1;;;26600:41:0;;26630:10;26600:41;;;6220:51:1;-1:-1:-1;;;;;26600:16:0;;;;:29;;6193:18:1;;26600:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;26597:520;;;26670:9;26662:34;;;;-1:-1:-1;;;26662:34:0;;14597:2:1;26662:34:0;;;14579:21:1;14636:2;14616:18;;;14609:30;-1:-1:-1;;;14655:18:1;;;14648:42;14707:18;;26662:34:0;14395:336:1;26662:34:0;26711:21;26735:16;;;:10;:16;;;;;;;:47;;-1:-1:-1;;;26735:47:0;;26771:10;26735:47;;;6220:51:1;-1:-1:-1;;;;;26735:16:0;;;;:35;;6193:18:1;;26735:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26711:71;;26797:20;26847:14;;26830:13;26821:6;:22;;;;:::i;:::-;26820:41;;;;:::i;:::-;26797:64;-1:-1:-1;26880:16:0;;26876:228;;26926:10;26916:21;;;;:9;:21;;;;;:38;;26941:13;;26916:21;:38;;26941:13;;26916:38;:::i;:::-;;;;-1:-1:-1;;26991:4:0;26973:24;;;;:9;:24;;;;;:41;;27001:13;;26973:24;:41;;27001:13;;26973:41;:::i;:::-;;;;-1:-1:-1;;27038:50:0;;160:25:1;;;27067:4:0;;27047:10;;-1:-1:-1;;;;;;;;;;;27038:50:0;148:2:1;133:18;27038:50:0;;;;;;;26876:228;26647:470;;26597:520;27127:16;;;;:10;:16;;;;;;;;:49;;-1:-1:-1;;;27127:49:0;;27157:10;27127:49;;;14290:51:1;14357:18;;;14350:34;;;-1:-1:-1;;;;;27127:16:0;;;;:29;;14263:18:1;;27127:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27194:10:0;27187:18;;;;:6;:18;;;;;:28;;27209:6;;-1:-1:-1;27187:18:0;;-1:-1:-1;27187:28:0;;27209:6;;27187:28;:::i;:::-;;;;;;;;27241:6;27226:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;26337:918:0:o;21893:252::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21972:22:0::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;21997:4:::1;-1:-1:-1::0;;21972:29:0;;::::1;::::0;::::1;::::0;;;22012:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;22059:15:::1;:26:::0;;;;;:33;;;::::1;::::0;::::1;::::0;;22103:16:::1;:27:::0;;;;;:34;;;;::::1;::::0;;::::1;::::0;;21893:252::o;12687:244::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12776:22:0;::::1;12768:73;;;::::0;-1:-1:-1;;;12768:73:0;;14938:2:1;12768:73:0::1;::::0;::::1;14920:21:1::0;14977:2;14957:18;;;14950:30;15016:34;14996:18;;;14989:62;-1:-1:-1;;;15067:18:1;;;15060:36;15113:19;;12768:73:0::1;14736:402:1::0;12768:73:0::1;12878:6;::::0;;12857:38:::1;::::0;-1:-1:-1;;;;;12857:38:0;;::::1;::::0;12878:6;::::1;::::0;12857:38:::1;::::0;::::1;12906:6;:17:::0;;-1:-1:-1;;;;;;12906:17:0::1;-1:-1:-1::0;;;;;12906:17:0;;;::::1;::::0;;;::::1;::::0;;12687:244::o;28698:127::-;11955:6;;-1:-1:-1;;;;;11955:6:0;6445:10;11955:22;11947:67;;;;-1:-1:-1;;;11947:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28785:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;28785:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28698:127::o;19876:1195::-;-1:-1:-1;;;;;20013:14:0;;19968:4;20013:14;;;:6;:14;;;;;;;;;19993:9;:17;;;;;;20031:6;;19993:34;;;:::i;:::-;:44;;19985:77;;;;-1:-1:-1;;;19985:77:0;;15345:2:1;19985:77:0;;;15327:21:1;15384:2;15364:18;;;15357:30;-1:-1:-1;;;15403:18:1;;;15396:50;15463:18;;19985:77:0;15143:344:1;19985:77:0;20090:1;20081:6;:10;20073:46;;;;-1:-1:-1;;;20073:46:0;;15694:2:1;20073:46:0;;;15676:21:1;15733:2;15713:18;;;15706:30;15772:25;15752:18;;;15745:53;15815:18;;20073:46:0;15492:347:1;20073:46:0;20135:6;;;;20132:63;;;20151:41;20166:6;20174:9;20185:6;20151:14;:41::i;:::-;20144:48;;;;20132:63;20207:28;20220:6;20228;20207:12;:28::i;:::-;-1:-1:-1;;;;;20261:25:0;;;;;;:14;:25;;;;;;;;20260:26;:47;;;;-1:-1:-1;20303:4:0;;-1:-1:-1;;;;;20290:17:0;;;20303:4;;20290:17;;20260:47;20256:148;;;-1:-1:-1;;;;;20329:26:0;;;;;;:15;:26;;;;;;;;20324:68;;20357:35;20374:9;20385:6;20357:16;:35::i;:::-;27922:10;;20416:118;;-1:-1:-1;;;;;20441:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;20471:29:0;;;;;;:18;:29;;;;;;;;20441:59;20433:98;;;;-1:-1:-1;;;20433:98:0;;16046:2:1;20433:98:0;;;16028:21:1;16085:2;16065:18;;;16058:30;16124:28;16104:18;;;16097:56;16170:18;;20433:98:0;15844:350:1;20433:98:0;-1:-1:-1;;;;;20546:17:0;;;;;;:9;:17;;;;;:27;;20567:6;;20546:17;:27;;20567:6;;20546:27;:::i;:::-;;;;-1:-1:-1;;;;;;;21854:19:0;;20586:22;21854:19;;;:11;:19;;;;;;;;21853:20;20611:49;;;;-1:-1:-1;;;;;;21854:19:0;;21829:4;21854:19;;;:11;:19;;;;;;;;21853:20;20636:24;20611:95;;20700:6;20611:95;;;20663:34;20671:6;20679:9;20690:6;20663:7;:34::i;:::-;20586:120;;20730:25;20745:9;20730:14;:25::i;:::-;20727:66;;;20762:10;;20758:32;;20774:16;20783:6;20774:8;:16::i;:::-;-1:-1:-1;;;;;20813:20:0;;;;;;:9;:20;;;;;:38;;20837:14;;20813:20;:38;;20837:14;;20813:38;:::i;:::-;;;;-1:-1:-1;;27922:10:0;;:15;;20879:31;;;;-1:-1:-1;20893:17:0;;-1:-1:-1;;;20893:17:0;;;;20879:31;20876:104;;;20925:9;;:55;;-1:-1:-1;;;20925:55:0;;-1:-1:-1;;;;;16457:15:1;;;20925:55:0;;;16439:34:1;16509:15;;;16489:18;;;16482:43;16541:18;;;16534:34;;;20925:9:0;;;;;;;;:28;;16374:18:1;;20925:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20876:104;21015:9;-1:-1:-1;;;;;20998:43:0;21007:6;-1:-1:-1;;;;;20998:43:0;-1:-1:-1;;;;;;;;;;;21026:14:0;20998:43;;;;160:25:1;;148:2;133:18;;14:177;20998:43:0;;;;;;;;-1:-1:-1;21059:4:0;;19876:1195;-1:-1:-1;;;;19876:1195:0:o;21079:259::-;-1:-1:-1;;;;;21189:17:0;;21172:4;21189:17;;;:9;:17;;;;;:27;;21210:6;;21189:17;21172:4;;21189:27;;21210:6;;21189:27;:::i;:::-;;;;-1:-1:-1;;;;;;;21227:20:0;;;;;;:9;:20;;;;;:30;;21251:6;;21227:20;:30;;21251:6;;21227:30;:::i;:::-;;;;;;;;21290:9;-1:-1:-1;;;;;21273:35:0;21282:6;-1:-1:-1;;;;;21273:35:0;-1:-1:-1;;;;;;;;;;;21301:6:0;21273:35;;;;160:25:1;;148:2;133:18;;14:177;21273:35:0;;;;;;;;-1:-1:-1;21326:4:0;21079:259;;;;;:::o;21593:166::-;21690:12;;21680:6;:22;;:49;;;-1:-1:-1;;;;;;21706:23:0;;;;;;:15;:23;;;;;;;;21680:49;21672:79;;;;-1:-1:-1;;;21672:79:0;;16781:2:1;21672:79:0;;;16763:21:1;16820:2;16800:18;;;16793:30;-1:-1:-1;;;16839:18:1;;;16832:47;16896:18;;21672:79:0;16579:341:1;21350:235:0;21458:14;;-1:-1:-1;;;;;21491:20:0;;21436:19;21491:20;;;:9;:20;;;;;;21458:14;;21491:29;;21514:6;;21491:29;:::i;:::-;:44;;21483:94;;;;-1:-1:-1;;;21483:94:0;;17127:2:1;21483:94:0;;;17109:21:1;17166:2;17146:18;;;17139:30;17205:34;17185:18;;;17178:62;-1:-1:-1;;;17256:18:1;;;17249:35;17301:19;;21483:94:0;16925:401:1;21483:94:0;21425:160;21350:235;;:::o;22510:546::-;22763:14;;-1:-1:-1;;;;;22658:25:0;;;22596:7;22658:25;;;:14;:25;;;;;;;22686:22;;;;;;;;22596:7;;;;22763:14;;22646:113;;22658:25;;;;;22686:22;22685:23;:73;;;;-1:-1:-1;22730:10:0;;-1:-1:-1;;;;;22712:15:0;;;;;;:7;:15;;;;;;22743;;22712:28;;;:::i;:::-;:46;22646:11;:113::i;:::-;22637:122;;:6;:122;:::i;:::-;22636:141;;;;:::i;:::-;-1:-1:-1;;;;;22802:22:0;;;;;;:14;:22;;;;;;22616:161;;-1:-1:-1;22802:22:0;;:49;;;;-1:-1:-1;;;;;;22828:18:0;;;;;;:7;:18;;;;;;:23;22802:49;22798:104;;;-1:-1:-1;;;;;22866:18:0;;;;;;:7;:18;;;;;22887:15;22866:36;;22798:104;22933:4;22915:24;;;;:9;:24;;;;;:37;;22943:9;;22915:24;:37;;22943:9;;22915:37;:::i;:::-;;;;-1:-1:-1;;22968:42:0;;160:25:1;;;22993:4:0;;-1:-1:-1;;;;;22968:42:0;;;-1:-1:-1;;;;;;;;;;;22968:42:0;148:2:1;133:18;22968:42:0;;;;;;;23030:18;23039:9;23030:6;:18;:::i;:::-;23023:25;22510:546;-1:-1:-1;;;;;22510:546:0:o;23064:321::-;23170:10;23130:4;23155:26;;;:14;:26;;;;;;;;23154:27;:64;;;;-1:-1:-1;23207:10:0;23195:23;;;;:11;:23;;;;;;;;23194:24;23154:64;:84;;;;-1:-1:-1;23232:6:0;;;;23231:7;23154:84;:108;;;;-1:-1:-1;23251:11:0;;-1:-1:-1;;;23251:11:0;;;;23154:108;:146;;;;-1:-1:-1;;;;;;23275:25:0;;;;;;:14;:25;;;;;;;;23154:146;:198;;;;-1:-1:-1;23341:11:0;;23331:4;23313:24;;;;:9;:24;;;;;;:39;;23154:198;:223;;;;;23376:1;23365:8;;:12;23147:230;23064:321;-1:-1:-1;;23064:321:0:o;23393:1908::-;16286:6;:13;;-1:-1:-1;;16286:13:0;16295:4;16286:13;;;23488::::1;::::0;16286:6;;23479:22;::::1;:47;;23513:13;;23479:47;;;23504:6;23479:47;23559:4;23541:24;::::0;;;:9:::1;:24;::::0;;;;;23456:70;;-1:-1:-1;23541:39:0;-1:-1:-1;23537:84:0::1;;;-1:-1:-1::0;23615:4:0::1;23597:24;::::0;;;:9:::1;:24;::::0;;;;;23537:84:::1;23632:27;23662:60;23678:15;;23695:26;;23662:15;:60::i;:::-;:79;;23729:12;;23662:79;;;23725:1;23662:79;23632:109;;23752:23;23830:1;23818:8;;23795:19;23780:12;:34;;;;:::i;:::-;23779:47;;;;:::i;:::-;23778:53;;;;:::i;:::-;23752:79:::0;-1:-1:-1;23842:31:0::1;23752:79:::0;23842:31;::::1;:::i;:::-;23910:16;::::0;;23924:1:::1;23910:16:::0;;;;;::::1;::::0;;23842:31;;-1:-1:-1;23886:21:0::1;::::0;23910:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23910:16:0::1;23886:40;;23955:4;23937;23942:1;23937:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23937:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23981:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;23981:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;23937:7;;23981:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23971:4;23976:1;23971:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23971:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24073:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;24073:188:0;;24039:21:::1;::::0;24073:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;24145:12;;24015:21:::1;::::0;24188:4;;24215::::1;::::0;24235:15:::1;::::0;24073:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24274:20;24321:13;24297:21;:37;;;;:::i;:::-;24274:60:::0;-1:-1:-1;24345:19:0::1;24378:23;24400:1;24378:19:::0;:23:::1;:::i;:::-;24367:8;;:34;;;;:::i;:::-;24345:56:::0;-1:-1:-1;24414:23:0::1;24493:1;24345:56:::0;24441:34:::1;24456:19:::0;24441:12;:34:::1;:::i;:::-;24440:50;;;;:::i;:::-;:54;;;;:::i;:::-;24414:80;;24589:23;24647:11;24631:12;;24616;:27;;;;:::i;:::-;24615:43;;;;:::i;:::-;24589:69;;24669:17;24715:11;24705:6;;24690:12;:21;;;;:::i;:::-;24689:37;;;;:::i;:::-;24669:57:::0;-1:-1:-1;24742:19:0;;24739:357:::1;;24778:6;::::0;24949:21:::1;::::0;24778:241:::1;::::0;-1:-1:-1;;;24778:241:0;;24851:4:::1;24778:241;::::0;::::1;19045:34:1::0;19095:18;;;19088:34;;;24778:6:0::1;19138:18:1::0;;;19131:34;;;19181:18;;;19174:34;-1:-1:-1;;;;;24949:21:0;;::::1;19224:19:1::0;;;19217:44;24989:15:0::1;19277:19:1::0;;;19270:35;24778:6:0;::::1;::::0;:22:::1;::::0;24808:15;;18979:19:1;;24778:241:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25039:45:0::1;::::0;;19801:25:1;;;19857:2;19842:18;;19835:34;;;25039:45:0::1;::::0;-1:-1:-1;19774:18:1;25039:45:0::1;;;;;;;24739:357;25120:19:::0;;25116:84:::1;;25154:20;::::0;:46:::1;::::0;-1:-1:-1;;;;;25154:20:0;;::::1;::::0;:46;::::1;;;::::0;25184:15;;25154:20:::1;:46:::0;:20;:46;25184:15;25154:20;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25116:84;25229:13:::0;;25225:66:::1;;25257:14;::::0;:34:::1;::::0;-1:-1:-1;;;;;25257:14:0;;::::1;::::0;:34;::::1;;;::::0;25281:9;;25257:14:::1;:34:::0;:14;:34;25281:9;25257:14;:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25225:66;-1:-1:-1::0;;16304:6:0;:14;;-1:-1:-1;;16304:14:0;;;-1:-1:-1;;;;;;;;;23393:1908:0:o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;853:70;798:131;:::o;934:315::-;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:248::-;1514:6;1522;1575:2;1563:9;1554:7;1550:23;1546:32;1543:52;;;1591:1;1588;1581:12;1543:52;-1:-1:-1;;1614:23:1;;;1684:2;1669:18;;;1656:32;;-1:-1:-1;1446:248:1:o;1699:456::-;1776:6;1784;1792;1845:2;1833:9;1824:7;1820:23;1816:32;1813:52;;;1861:1;1858;1851:12;1813:52;1900:9;1887:23;1919:31;1944:5;1919:31;:::i;:::-;1969:5;-1:-1:-1;2026:2:1;2011:18;;1998:32;2039:33;1998:32;2039:33;:::i;:::-;1699:456;;2091:7;;-1:-1:-1;;;2145:2:1;2130:18;;;;2117:32;;1699:456::o;2349:180::-;2408:6;2461:2;2449:9;2440:7;2436:23;2432:32;2429:52;;;2477:1;2474;2467:12;2429:52;-1:-1:-1;2500:23:1;;2349:180;-1:-1:-1;2349:180:1:o;2534:118::-;2620:5;2613:13;2606:21;2599:5;2596:32;2586:60;;2642:1;2639;2632:12;2657:382;2722:6;2730;2783:2;2771:9;2762:7;2758:23;2754:32;2751:52;;;2799:1;2796;2789:12;2751:52;2838:9;2825:23;2857:31;2882:5;2857:31;:::i;:::-;2907:5;-1:-1:-1;2964:2:1;2949:18;;2936:32;2977:30;2936:32;2977:30;:::i;:::-;3026:7;3016:17;;;2657:382;;;;;:::o;3044:450::-;3118:6;3126;3134;3187:2;3175:9;3166:7;3162:23;3158:32;3155:52;;;3203:1;3200;3193:12;3155:52;3242:9;3229:23;3261:31;3286:5;3261:31;:::i;:::-;3311:5;-1:-1:-1;3363:2:1;3348:18;;3335:32;;-1:-1:-1;3419:2:1;3404:18;;3391:32;3432:30;3391:32;3432:30;:::i;:::-;3481:7;3471:17;;;3044:450;;;;;:::o;3499:247::-;3558:6;3611:2;3599:9;3590:7;3586:23;3582:32;3579:52;;;3627:1;3624;3617:12;3579:52;3666:9;3653:23;3685:31;3710:5;3685:31;:::i;3751:376::-;3813:6;3821;3874:2;3862:9;3853:7;3849:23;3845:32;3842:52;;;3890:1;3887;3880:12;3842:52;3929:9;3916:23;3948:28;3970:5;3948:28;:::i;4132:241::-;4188:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:52;;;4257:1;4254;4247:12;4209:52;4296:9;4283:23;4315:28;4337:5;4315:28;:::i;4378:367::-;4441:8;4451:6;4505:3;4498:4;4490:6;4486:17;4482:27;4472:55;;4523:1;4520;4513:12;4472:55;-1:-1:-1;4546:20:1;;4589:18;4578:30;;4575:50;;;4621:1;4618;4611:12;4575:50;4658:4;4650:6;4646:17;4634:29;;4718:3;4711:4;4701:6;4698:1;4694:14;4686:6;4682:27;4678:38;4675:47;4672:67;;;4735:1;4732;4725:12;4672:67;4378:367;;;;;:::o;4750:773::-;4872:6;4880;4888;4896;4949:2;4937:9;4928:7;4924:23;4920:32;4917:52;;;4965:1;4962;4955:12;4917:52;5005:9;4992:23;5034:18;5075:2;5067:6;5064:14;5061:34;;;5091:1;5088;5081:12;5061:34;5130:70;5192:7;5183:6;5172:9;5168:22;5130:70;:::i;:::-;5219:8;;-1:-1:-1;5104:96:1;-1:-1:-1;5307:2:1;5292:18;;5279:32;;-1:-1:-1;5323:16:1;;;5320:36;;;5352:1;5349;5342:12;5320:36;;5391:72;5455:7;5444:8;5433:9;5429:24;5391:72;:::i;:::-;4750:773;;;;-1:-1:-1;5482:8:1;-1:-1:-1;;;;4750:773:1:o;5528:523::-;5632:6;5640;5648;5656;5664;5672;5725:3;5713:9;5704:7;5700:23;5696:33;5693:53;;;5742:1;5739;5732:12;5693:53;-1:-1:-1;;5765:23:1;;;5835:2;5820:18;;5807:32;;-1:-1:-1;5886:2:1;5871:18;;5858:32;;5937:2;5922:18;;5909:32;;-1:-1:-1;5988:3:1;5973:19;;5960:33;;-1:-1:-1;6040:3:1;6025:19;6012:33;;-1:-1:-1;5528:523:1;-1:-1:-1;5528:523:1:o;6490:388::-;6558:6;6566;6619:2;6607:9;6598:7;6594:23;6590:32;6587:52;;;6635:1;6632;6625:12;6587:52;6674:9;6661:23;6693:31;6718:5;6693:31;:::i;:::-;6743:5;-1:-1:-1;6800:2:1;6785:18;;6772:32;6813:33;6772:32;6813:33;:::i;6883:377::-;6957:6;6965;6973;7026:2;7014:9;7005:7;7001:23;6997:32;6994:52;;;7042:1;7039;7032:12;6994:52;7081:9;7068:23;7100:28;7122:5;7100:28;:::i;:::-;7147:5;7199:2;7184:18;;7171:32;;-1:-1:-1;7250:2:1;7235:18;;;7222:32;;6883:377;-1:-1:-1;;;6883:377:1:o;7489:::-;7563:6;7571;7579;7632:2;7620:9;7611:7;7607:23;7603:32;7600:52;;;7648:1;7645;7638:12;7600:52;7684:9;7671:23;7661:33;;7741:2;7730:9;7726:18;7713:32;7703:42;;7795:2;7784:9;7780:18;7767:32;7808:28;7830:5;7808:28;:::i;8097:356::-;8299:2;8281:21;;;8318:18;;;8311:30;8377:34;8372:2;8357:18;;8350:62;8444:2;8429:18;;8097:356::o;8458:127::-;8519:10;8514:3;8510:20;8507:1;8500:31;8550:4;8547:1;8540:15;8574:4;8571:1;8564:15;8590:168;8630:7;8696:1;8692;8688:6;8684:14;8681:1;8678:21;8673:1;8666:9;8659:17;8655:45;8652:71;;;8703:18;;:::i;:::-;-1:-1:-1;8743:9:1;;8590:168::o;8763:217::-;8803:1;8829;8819:132;;8873:10;8868:3;8864:20;8861:1;8854:31;8908:4;8905:1;8898:15;8936:4;8933:1;8926:15;8819:132;-1:-1:-1;8965:9:1;;8763:217::o;9680:125::-;9720:4;9748:1;9745;9742:8;9739:34;;;9753:18;;:::i;:::-;-1:-1:-1;9790:9:1;;9680:125::o;9810:128::-;9850:3;9881:1;9877:6;9874:1;9871:13;9868:39;;;9887:18;;:::i;:::-;-1:-1:-1;9923:9:1;;9810:128::o;9943:184::-;10013:6;10066:2;10054:9;10045:7;10041:23;10037:32;10034:52;;;10082:1;10079;10072:12;10034:52;-1:-1:-1;10105:16:1;;9943:184;-1:-1:-1;9943:184:1:o;11521:127::-;11582:10;11577:3;11573:20;11570:1;11563:31;11613:4;11610:1;11603:15;11637:4;11634:1;11627:15;11653:422;11742:1;11785:5;11742:1;11799:270;11820:7;11810:8;11807:21;11799:270;;;11879:4;11875:1;11871:6;11867:17;11861:4;11858:27;11855:53;;;11888:18;;:::i;:::-;11938:7;11928:8;11924:22;11921:55;;;11958:16;;;;11921:55;12037:22;;;;11997:15;;;;11799:270;;;11803:3;11653:422;;;;;:::o;12080:806::-;12129:5;12159:8;12149:80;;-1:-1:-1;12200:1:1;12214:5;;12149:80;12248:4;12238:76;;-1:-1:-1;12285:1:1;12299:5;;12238:76;12330:4;12348:1;12343:59;;;;12416:1;12411:130;;;;12323:218;;12343:59;12373:1;12364:10;;12387:5;;;12411:130;12448:3;12438:8;12435:17;12432:43;;;12455:18;;:::i;:::-;-1:-1:-1;;12511:1:1;12497:16;;12526:5;;12323:218;;12625:2;12615:8;12612:16;12606:3;12600:4;12597:13;12593:36;12587:2;12577:8;12574:16;12569:2;12563:4;12560:12;12556:35;12553:77;12550:159;;;-1:-1:-1;12662:19:1;;;12694:5;;12550:159;12741:34;12766:8;12760:4;12741:34;:::i;:::-;12811:6;12807:1;12803:6;12799:19;12790:7;12787:32;12784:58;;;12822:18;;:::i;:::-;12860:20;;12080:806;-1:-1:-1;;;12080:806:1:o;12891:140::-;12949:5;12978:47;13019:4;13009:8;13005:19;12999:4;12978:47;:::i;13036:135::-;13075:3;-1:-1:-1;;13096:17:1;;13093:43;;;13116:18;;:::i;:::-;-1:-1:-1;13163:1:1;13152:13;;13036:135::o;13523:245::-;13590:6;13643:2;13631:9;13622:7;13618:23;13614:32;13611:52;;;13659:1;13656;13649:12;13611:52;13691:9;13685:16;13710:28;13732:5;13710:28;:::i;17463:251::-;17533:6;17586:2;17574:9;17565:7;17561:23;17557:32;17554:52;;;17602:1;17599;17592:12;17554:52;17634:9;17628:16;17653:31;17678:5;17653:31;:::i;17719:980::-;17981:4;18029:3;18018:9;18014:19;18060:6;18049:9;18042:25;18086:2;18124:6;18119:2;18108:9;18104:18;18097:34;18167:3;18162:2;18151:9;18147:18;18140:31;18191:6;18226;18220:13;18257:6;18249;18242:22;18295:3;18284:9;18280:19;18273:26;;18334:2;18326:6;18322:15;18308:29;;18355:1;18365:195;18379:6;18376:1;18373:13;18365:195;;;18444:13;;-1:-1:-1;;;;;18440:39:1;18428:52;;18535:15;;;;18500:12;;;;18476:1;18394:9;18365:195;;;-1:-1:-1;;;;;;;18616:32:1;;;;18611:2;18596:18;;18589:60;-1:-1:-1;;;18680:3:1;18665:19;18658:35;18577:3;17719:980;-1:-1:-1;;;17719:980:1:o;19316:306::-;19404:6;19412;19420;19473:2;19461:9;19452:7;19448:23;19444:32;19441:52;;;19489:1;19486;19479:12;19441:52;19518:9;19512:16;19502:26;;19568:2;19557:9;19553:18;19547:25;19537:35;;19612:2;19601:9;19597:18;19591:25;19581:35;;19316:306;;;;;:::o

Swarm Source

ipfs://09b426169f71e7d2706e9ada87e99212ecdc0beffb88fd74a5788f41e3085993
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.