CRO Price: $0.09 (-1.98%)

Token

SCALE (SCALE)

Overview

Max Total Supply

10,000,000 SCALE

Holders

222

Market

Price

$0.00 @ 0.000000 CRO

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
berebel.cro
Balance
1,068.227398069343150656 SCALE

Value
$0.00
0x11d205f4f1301d28ba3195911aa7a80938df41b2
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
SCALE

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2023-03-15
*/

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeERC20 {
    using Address for address;

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function getAmountsIn(
        uint256 amountOut,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract SCALE is ERC20, Ownable {
    using SafeERC20 for IERC20;
    using Address for address;

    uint256 constant MUL_CONSTANT = 10000;
    uint256 constant TRADING_FEE_LIMIT = 1000;
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;

    address public marketingWallet;
    address public maintenanceWallet;
    uint256 public maxTransactionAmount;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;

    bool public swapEnabled = false;
    bool public tradingActive = false;

    // 1% = 100, 100% = 10000
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyMaintenanceFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellMaintenanceFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForMaintenance;
    uint256 public tokensForLiquidity;
    /******************/

    address autoLP_collector = address(0xdead);

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event MarketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event MaintenanceWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event OtherTaxWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("SCALE", "SCALE") {
        address _uniswapV2RouterCA = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            _uniswapV2RouterCA
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 400;
        uint256 _buyMaintenanceFee = 400;
        uint256 _buyLiquidityFee = 200;

        uint256 _sellMarketingFee = 400;
        uint256 _sellMaintenanceFee = 400;
        uint256 _sellLiquidityFee = 200;

        uint256 totalSupply = 1 * 1e7 * 1e18; // 10 million

        maxTransactionAmount = (totalSupply * 50) / 10000; // 0.5% maxTransactionAmountTxn
        maxWallet = (totalSupply * 100) / 10000; // 1% max wallet

        buyMarketingFee = _buyMarketingFee;
        buyMaintenanceFee = _buyMaintenanceFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyMaintenanceFee + buyLiquidityFee;

        sellMarketingFee = _sellMarketingFee;
        sellMaintenanceFee = _sellMaintenanceFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees =
            sellMarketingFee +
            sellMaintenanceFee +
            sellLiquidityFee;

        marketingWallet = msg.sender;
        maintenanceWallet = msg.sender;
        swapTokensAtAmount = 1000 * 1e18;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(msg.sender, true);
        excludeFromFees(address(this), true);

        excludeFromMaxTransaction(msg.sender, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(0), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // Enable Trading
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // Disable Trading
    function disableTrading() external onlyOwner {
        tradingActive = false;
        swapEnabled = false;
    }

    function setMaxTransactionAmount(uint256 newNumInEther) external onlyOwner {
        maxTransactionAmount = newNumInEther * (10 ** 18);
    }

    function setAutoLpCollector(address lpCollector) external onlyOwner {
        autoLP_collector = lpCollector;
    }

    function setMaxWalletAmount(uint256 newNumInEther) external onlyOwner {
        maxWallet = newNumInEther * (10 ** 18);
    }

    function setSwapTokensAtAmount(
        uint256 newAmountInWei
    ) external onlyOwner returns (bool) {
        swapTokensAtAmount = newAmountInWei;
        return true;
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function setBuyFees(
        uint256 _marketingFee,
        uint256 _maintenanceFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyMaintenanceFee = _maintenanceFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyMaintenanceFee + buyLiquidityFee;

        require(buyTotalFees <= TRADING_FEE_LIMIT, "Total fees exceeds max fee");
    }

    function setSellFees(
        uint256 _marketingFee,
        uint256 _maintenanceFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellMaintenanceFee = _maintenanceFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees =
            sellMarketingFee +
            sellMaintenanceFee +
            sellLiquidityFee;
        require(sellTotalFees <= TRADING_FEE_LIMIT, "Total fees exceeds max fee");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit MarketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
        excludeFromFees(marketingWallet, true);
    }

    function setMaintenanceWallet(
        address newMaintenanceWallet
    ) external onlyOwner {
        emit MaintenanceWalletUpdated(newMaintenanceWallet, maintenanceWallet);
        maintenanceWallet = newMaintenanceWallet;
        excludeFromFees(maintenanceWallet, true);
    }

    function clearStuckBNBBalance(address addr) external onlyOwner {
        (bool sent, ) = payable(addr).call{value: (address(this).balance)}("");
        require(sent);
    }

    function setOwner(address _newOwner) external onlyOwner {
        transferOwnership(_newOwner);
        excludeFromFees(_newOwner, true);
    }

    function clearStuckTokenBalance(
        address addr,
        address tokenAddress
    ) external onlyOwner {
        uint256 _bal = IERC20(tokenAddress).balanceOf(address(this));
        IERC20(tokenAddress).safeTransfer(addr, _bal);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "Trading is not active."
                );
            }

            //when buy
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );
            }
            //when sell
            else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else {
                if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to] &&
            sellTotalFees > 0 &&
            buyTotalFees > 0
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        uint256 marketingFee = 0;
        uint256 liquidityFee = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / MUL_CONSTANT;
                marketingFee = (fees * sellMarketingFee) / sellTotalFees;
                liquidityFee = (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += marketingFee;
                tokensForLiquidity += liquidityFee;
                unchecked {
                    tokensForMaintenance += (fees -
                        marketingFee -
                        liquidityFee);
                }
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / MUL_CONSTANT;
                marketingFee = (fees * buyMarketingFee) / buyTotalFees;
                liquidityFee = (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += marketingFee;
                tokensForLiquidity += liquidityFee;
                unchecked {
                    tokensForMaintenance += (fees -
                        marketingFee -
                        liquidityFee);
                }
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            autoLP_collector,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForMaintenance;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = 0;

        unchecked {
            amountToSwapForETH = contractBalance - liquidityTokens;
        }

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = 0;

        unchecked {
            ethBalance = address(this).balance - initialETHBalance;
        }

        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            totalTokensToSwap;
        uint256 ethForMaintenance = (ethBalance * tokensForMaintenance) /
            totalTokensToSwap;

        uint256 ethForLiquidity = 0;

        unchecked {
            ethForLiquidity = ethBalance - ethForMarketing - ethForMaintenance;
        }

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForMaintenance = 0;

        (bool sentForMarketing, ) = address(marketingWallet).call{
            value: ethForMarketing
        }("");
        (bool sentForMaintenance, ) = address(maintenanceWallet).call{
            value: ethForMaintenance
        }("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        require(sentForMarketing && sentForMaintenance, "send failed");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MaintenanceWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"OtherTaxWalletUpdated","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMaintenanceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"clearStuckBNBBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"clearStuckTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maintenanceWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMaintenanceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpCollector","type":"address"}],"name":"setAutoLpCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_maintenanceFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMaintenanceWallet","type":"address"}],"name":"setMaintenanceWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInEther","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInEther","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_maintenanceFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmountInWei","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMaintenance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600c805461ffff19169055601880546001600160a01b03191661dead1790553480156200003057600080fd5b506040805180820182526005808252645343414c4560d81b60208084018290528451808601909552918452908301529060036200006e8382620006fa565b5060046200007d8282620006fa565b5050506200009a620000946200039e60201b60201c565b620003a2565b73145677fc4d9b8f19b5d56d1820c48e0443049a3080620000bd816001620003f4565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000108573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012e9190620007c6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a29190620007c6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002169190620007c6565b600680546001600160a01b0319166001600160a01b0392909216918217905562000242906001620003f4565b6006546200025b906001600160a01b031660016200046e565b6101908060c88180826a084595161401484a000000612710620002808260326200080e565b6200028c91906200082e565b6009556127106200029f8260646200080e565b620002ab91906200082e565b600a55600e879055600f869055601085905584620002ca878962000851565b620002d6919062000851565b600d5560128490556013839055601482905581620002f5848662000851565b62000301919062000851565b60115560078054336001600160a01b031991821681179092556008805490911682179055683635c9adc5dea00000600b556200033f906001620004c2565b6200034c306001620004c2565b62000359336001620003f4565b62000366306001620003f4565b6200037561dead6001620003f4565b6200038360006001620003f4565b6200038f33826200056c565b50505050505050505062000867565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004435760405162461bcd60e51b81526020600482018190526024820152600080516020620032f983398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200050d5760405162461bcd60e51b81526020600482018190526024820152600080516020620032f983398151915260448201526064016200043a565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005c45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200043a565b8060026000828254620005d8919062000851565b90915550506001600160a01b038216600090815260208190526040812080548392906200060790849062000851565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200068157607f821691505b602082108103620006a257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065157600081815260208120601f850160051c81016020861015620006d15750805b601f850160051c820191505b81811015620006f257828155600101620006dd565b505050505050565b81516001600160401b0381111562000716576200071662000656565b6200072e816200072784546200066c565b84620006a8565b602080601f8311600181146200076657600084156200074d5750858301515b600019600386901b1c1916600185901b178555620006f2565b600085815260208120601f198616915b82811015620007975788860151825594840194600190910190840162000776565b5085821015620007b65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620007d957600080fd5b81516001600160a01b0381168114620007f157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008285762000828620007f8565b92915050565b6000826200084c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008285762000828620007f8565b608051612a53620008a660003960008181610478015281816121f9015281816122b2015281816122ee0152818161236801526123d00152612a536000f3fe6080604052600436106103395760003560e01c806375f0a874116101ab578063afa4f3b2116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610997578063f403d599146109b7578063f6374342146109cd578063f8b45b05146109e357600080fd5b8063e2f4560514610955578063e6fb2eb01461096b578063f11a24d31461098157600080fd5b8063c0246668116100d1578063c0246668146108c3578063c8c8ebe4146108e3578063d85ba063146108f9578063dd62ed3e1461090f57600080fd5b8063afa4f3b214610854578063b62496f514610874578063bbc0c742146108a457600080fd5b80639485b9d811610164578063a28d23dc1161013e578063a28d23dc146107d4578063a457c2d7146107f4578063a67096e214610814578063a9059cbb1461083457600080fd5b80639485b9d81461077f57806395d89b411461079f5780639a7a23d6146107b457600080fd5b806375f0a874146106e05780637bce5a04146107005780638a8c523c146107165780638da5cb5b1461072b5780639213691314610749578063924de9b71461075f57600080fd5b806323b872dd116102855780635d098b38116102235780637072152c116101fd5780637072152c1461065f57806370a0823114610675578063715018a6146106ab5780637571336a146106c057600080fd5b80635d098b381461060f5780636a486a8e1461062f5780636ddd17131461064557600080fd5b806334a4a65f1161025f57806334a4a65f14610576578063395093511461059657806349bd5a5e146105b65780634fbee193146105d657600080fd5b806323b872dd1461051a57806327a14fc21461053a578063313ce5671461055a57600080fd5b806313af4035116102f257806318160ddd116102cc57806318160ddd146104af5780631a8145bb146104ce5780631e293c10146104e45780631f3fed8f1461050457600080fd5b806313af4035146104465780631694505e1461046657806317700f011461049a57600080fd5b8063057c09db1461034557806306fdde0314610382578063095ea7b3146103a45780630d075d9c146103d45780630f683e90146103f657806310d5de531461041657600080fd5b3661034057005b600080fd5b34801561035157600080fd5b50600854610365906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038e57600080fd5b506103976109f9565b60405161037991906125e4565b3480156103b057600080fd5b506103c46103bf36600461262c565b610a8b565b6040519015158152602001610379565b3480156103e057600080fd5b506103f46103ef366004612658565b610aa2565b005b34801561040257600080fd5b506103f4610411366004612658565b610b54565b34801561042257600080fd5b506103c4610431366004612684565b601a6020526000908152604090205460ff1681565b34801561045257600080fd5b506103f4610461366004612684565b610bf8565b34801561047257600080fd5b506103657f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a657600080fd5b506103f4610c39565b3480156104bb57600080fd5b506002545b604051908152602001610379565b3480156104da57600080fd5b506104c060175481565b3480156104f057600080fd5b506103f46104ff3660046126a1565b610c70565b34801561051057600080fd5b506104c060155481565b34801561052657600080fd5b506103c46105353660046126ba565b610cb2565b34801561054657600080fd5b506103f46105553660046126a1565b610d5e565b34801561056657600080fd5b5060405160128152602001610379565b34801561058257600080fd5b506103f4610591366004612684565b610da0565b3480156105a257600080fd5b506103c46105b136600461262c565b610dec565b3480156105c257600080fd5b50600654610365906001600160a01b031681565b3480156105e257600080fd5b506103c46105f1366004612684565b6001600160a01b031660009081526019602052604090205460ff1690565b34801561061b57600080fd5b506103f461062a366004612684565b610e28565b34801561063b57600080fd5b506104c060115481565b34801561065157600080fd5b50600c546103c49060ff1681565b34801561066b57600080fd5b506104c060165481565b34801561068157600080fd5b506104c0610690366004612684565b6001600160a01b031660009081526020819052604090205490565b3480156106b757600080fd5b506103f4610eb6565b3480156106cc57600080fd5b506103f46106db366004612709565b610eec565b3480156106ec57600080fd5b50600754610365906001600160a01b031681565b34801561070c57600080fd5b506104c0600e5481565b34801561072257600080fd5b506103f4610f41565b34801561073757600080fd5b506005546001600160a01b0316610365565b34801561075557600080fd5b506104c060125481565b34801561076b57600080fd5b506103f461077a366004612742565b610f7c565b34801561078b57600080fd5b506103f461079a366004612684565b610fb9565b3480156107ab57600080fd5b50610397611047565b3480156107c057600080fd5b506103f46107cf366004612709565b611056565b3480156107e057600080fd5b506103f46107ef366004612684565b61110e565b34801561080057600080fd5b506103c461080f36600461262c565b61119c565b34801561082057600080fd5b506103f461082f36600461275f565b611235565b34801561084057600080fd5b506103c461084f36600461262c565b6112e0565b34801561086057600080fd5b506103c461086f3660046126a1565b6112ed565b34801561088057600080fd5b506103c461088f366004612684565b601b6020526000908152604090205460ff1681565b3480156108b057600080fd5b50600c546103c490610100900460ff1681565b3480156108cf57600080fd5b506103f46108de366004612709565b611323565b3480156108ef57600080fd5b506104c060095481565b34801561090557600080fd5b506104c0600d5481565b34801561091b57600080fd5b506104c061092a36600461275f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561096157600080fd5b506104c0600b5481565b34801561097757600080fd5b506104c060135481565b34801561098d57600080fd5b506104c060105481565b3480156109a357600080fd5b506103f46109b2366004612684565b6113ac565b3480156109c357600080fd5b506104c0600f5481565b3480156109d957600080fd5b506104c060145481565b3480156109ef57600080fd5b506104c0600a5481565b606060038054610a089061278d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a349061278d565b8015610a815780601f10610a5657610100808354040283529160200191610a81565b820191906000526020600020905b815481529060010190602001808311610a6457829003601f168201915b5050505050905090565b6000610a98338484611444565b5060015b92915050565b6005546001600160a01b03163314610ad55760405162461bcd60e51b8152600401610acc906127c7565b60405180910390fd5b600e839055600f829055601081905580610aef8385612812565b610af99190612812565b600d8190556103e81015610b4f5760405162461bcd60e51b815260206004820152601a60248201527f546f74616c20666565732065786365656473206d6178206665650000000000006044820152606401610acc565b505050565b6005546001600160a01b03163314610b7e5760405162461bcd60e51b8152600401610acc906127c7565b60128390556013829055601481905580610b988385612812565b610ba29190612812565b60118190556103e81015610b4f5760405162461bcd60e51b815260206004820152601a60248201527f546f74616c20666565732065786365656473206d6178206665650000000000006044820152606401610acc565b6005546001600160a01b03163314610c225760405162461bcd60e51b8152600401610acc906127c7565b610c2b816113ac565b610c36816001611323565b50565b6005546001600160a01b03163314610c635760405162461bcd60e51b8152600401610acc906127c7565b600c805461ffff19169055565b6005546001600160a01b03163314610c9a5760405162461bcd60e51b8152600401610acc906127c7565b610cac81670de0b6b3a7640000612825565b60095550565b6000610cbf848484611568565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d445760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610acc565b610d518533858403611444565b60019150505b9392505050565b6005546001600160a01b03163314610d885760405162461bcd60e51b8152600401610acc906127c7565b610d9a81670de0b6b3a7640000612825565b600a5550565b6005546001600160a01b03163314610dca5760405162461bcd60e51b8152600401610acc906127c7565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a98918590610e23908690612812565b611444565b6005546001600160a01b03163314610e525760405162461bcd60e51b8152600401610acc906127c7565b6007546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600780546001600160a01b0319166001600160a01b038316908117909155610c36906001611323565b6005546001600160a01b03163314610ee05760405162461bcd60e51b8152600401610acc906127c7565b610eea6000611c4a565b565b6005546001600160a01b03163314610f165760405162461bcd60e51b8152600401610acc906127c7565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610acc906127c7565b600c805461ffff1916610101179055565b6005546001600160a01b03163314610fa65760405162461bcd60e51b8152600401610acc906127c7565b600c805460ff1916911515919091179055565b6005546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610acc906127c7565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114611030576040519150601f19603f3d011682016040523d82523d6000602084013e611035565b606091505b505090508061104357600080fd5b5050565b606060048054610a089061278d565b6005546001600160a01b031633146110805760405162461bcd60e51b8152600401610acc906127c7565b6006546001600160a01b03908116908316036111045760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610acc565b6110438282611c9c565b6005546001600160a01b031633146111385760405162461bcd60e51b8152600401610acc906127c7565b6008546040516001600160a01b03918216918316907f2d44b5390a882ce82b45cc7b7481a8e213f611b5eda9ae36ad1e40de1450ece590600090a3600880546001600160a01b0319166001600160a01b038316908117909155610c36906001611323565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561121e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610acc565b61122b3385858403611444565b5060019392505050565b6005546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610acc906127c7565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156112a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ca919061283c565b9050610b4f6001600160a01b0383168483611cf0565b6000610a98338484611568565b6005546000906001600160a01b0316331461131a5760405162461bcd60e51b8152600401610acc906127c7565b50600b55600190565b6005546001600160a01b0316331461134d5760405162461bcd60e51b8152600401610acc906127c7565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113d65760405162461bcd60e51b8152600401610acc906127c7565b6001600160a01b03811661143b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610acc565b610c3681611c4a565b6001600160a01b0383166114a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610acc565b6001600160a01b0382166115075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610acc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661158e5760405162461bcd60e51b8152600401610acc90612855565b6001600160a01b0382166115b45760405162461bcd60e51b8152600401610acc9061289a565b806000036115c857610b4f83836000611d42565b6005546001600160a01b038481169116148015906115f457506005546001600160a01b03838116911614155b801561160857506001600160a01b03821615155b801561161f57506001600160a01b03821661dead14155b80156116355750600654600160a01b900460ff16155b1561193357600c54610100900460ff166116cd576001600160a01b03831660009081526019602052604090205460ff168061168857506001600160a01b03821660009081526019602052604090205460ff165b6116cd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610acc565b6001600160a01b0383166000908152601b602052604090205460ff16801561170e57506001600160a01b0382166000908152601a602052604090205460ff16155b156117f2576009548111156117835760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610acc565b600a546001600160a01b0383166000908152602081905260409020546117a99083612812565b11156117ed5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610acc565b611933565b6001600160a01b0382166000908152601b602052604090205460ff16801561183357506001600160a01b0383166000908152601a602052604090205460ff16155b156118a9576009548111156117ed5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610acc565b6001600160a01b0382166000908152601a602052604090205460ff1661193357600a546001600160a01b0383166000908152602081905260409020546118ef9083612812565b11156119335760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610acc565b30600090815260208190526040902054600b54811080159081906119595750600c5460ff165b801561196f5750600654600160a01b900460ff16155b801561199457506001600160a01b0385166000908152601b602052604090205460ff16155b80156119b957506001600160a01b03851660009081526019602052604090205460ff16155b80156119de57506001600160a01b03841660009081526019602052604090205460ff16155b80156119ec57506000601154115b80156119fa57506000600d54115b15611a28576006805460ff60a01b1916600160a01b179055611a1a611e97565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526019602052604090205460ff600160a01b909204821615911680611a7657506001600160a01b03851660009081526019602052604090205460ff165b15611a7f575060005b60008060008315611c34576001600160a01b0388166000908152601b602052604090205460ff168015611ab457506000601154115b15611b525761271060115488611aca9190612825565b611ad491906128dd565b925060115460125484611ae79190612825565b611af191906128dd565b915060115460145484611b049190612825565b611b0e91906128dd565b90508160156000828254611b229190612812565b925050819055508060176000828254611b3b9190612812565b909155505060168054838503839003019055611c16565b6001600160a01b0389166000908152601b602052604090205460ff168015611b7c57506000600d54115b15611c1657612710600d5488611b929190612825565b611b9c91906128dd565b9250600d54600e5484611baf9190612825565b611bb991906128dd565b9150600d5460105484611bcc9190612825565b611bd691906128dd565b90508160156000828254611bea9190612812565b925050819055508060176000828254611c039190612812565b9091555050601680548385038390030190555b8215611c2757611c27893085611d42565b611c3183886128ff565b96505b611c3f898989611d42565b505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610b4f9084906120d0565b6001600160a01b038316611d685760405162461bcd60e51b8152600401610acc90612855565b6001600160a01b038216611d8e5760405162461bcd60e51b8152600401610acc9061289a565b6001600160a01b03831660009081526020819052604090205481811015611e065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610acc565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611e3d908490612812565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e8991815260200190565b60405180910390a350505050565b3060009081526020819052604081205490506000601654601554601754611ebe9190612812565b611ec89190612812565b9050811580611ed5575080155b15611ede575050565b600060028260175485611ef19190612825565b611efb91906128dd565b611f0591906128dd565b905080830347611f14826121a2565b6000814703905060008560155483611f2c9190612825565b611f3691906128dd565b905060008660165484611f499190612825565b611f5391906128dd565b6000601781905560158190556016819055600754604051929350848603849003926001600160a01b039091169085908381818185875af1925050503d8060008114611fba576040519150601f19603f3d011682016040523d82523d6000602084013e611fbf565b606091505b50506008546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114612013576040519150601f19603f3d011682016040523d82523d6000602084013e612018565b606091505b5050905060008911801561202c5750600083115b1561207f5761203b8984612362565b601754604080518a81526020810186905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b8180156120895750805b6120c35760405162461bcd60e51b815260206004820152600b60248201526a1cd95b990819985a5b195960aa1b6044820152606401610acc565b5050505050505050505050565b6000612125826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124489092919063ffffffff16565b805190915015610b4f57808060200190518101906121439190612912565b610b4f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610acc565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121d7576121d761292f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122799190612945565b8160018151811061228c5761228c61292f565b60200260200101906001600160a01b031690816001600160a01b0316815250506122d7307f000000000000000000000000000000000000000000000000000000000000000084611444565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061232c908590600090869030904290600401612962565b600060405180830381600087803b15801561234657600080fd5b505af115801561235a573d6000803e3d6000fd5b505050505050565b61238d307f000000000000000000000000000000000000000000000000000000000000000084611444565b60185460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af115801561241c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061244191906129d3565b5050505050565b6060612457848460008561245f565b949350505050565b6060824710156124c05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610acc565b843b61250e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610acc565b600080866001600160a01b0316858760405161252a9190612a01565b60006040518083038185875af1925050503d8060008114612567576040519150601f19603f3d011682016040523d82523d6000602084013e61256c565b606091505b509150915061257c828286612587565b979650505050505050565b60608315612596575081610d57565b8251156125a65782518084602001fd5b8160405162461bcd60e51b8152600401610acc91906125e4565b60005b838110156125db5781810151838201526020016125c3565b50506000910152565b60208152600082518060208401526126038160408501602087016125c0565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610c3657600080fd5b6000806040838503121561263f57600080fd5b823561264a81612617565b946020939093013593505050565b60008060006060848603121561266d57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561269657600080fd5b8135610d5781612617565b6000602082840312156126b357600080fd5b5035919050565b6000806000606084860312156126cf57600080fd5b83356126da81612617565b925060208401356126ea81612617565b929592945050506040919091013590565b8015158114610c3657600080fd5b6000806040838503121561271c57600080fd5b823561272781612617565b91506020830135612737816126fb565b809150509250929050565b60006020828403121561275457600080fd5b8135610d57816126fb565b6000806040838503121561277257600080fd5b823561277d81612617565b9150602083013561273781612617565b600181811c908216806127a157607f821691505b6020821081036127c157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9c57610a9c6127fc565b8082028115828204841417610a9c57610a9c6127fc565b60006020828403121561284e57600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000826128fa57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610a9c57610a9c6127fc565b60006020828403121561292457600080fd5b8151610d57816126fb565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561295757600080fd5b8151610d5781612617565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129b25784516001600160a01b03168352938301939183019160010161298d565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156129e857600080fd5b8351925060208401519150604084015190509250925092565b60008251612a138184602087016125c0565b919091019291505056fea26469706673582212204cb3b5f8bac436e9ab789fb0133426d83e1e8045237958c0cb32522ca47f1f0864736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103395760003560e01c806375f0a874116101ab578063afa4f3b2116100f7578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610997578063f403d599146109b7578063f6374342146109cd578063f8b45b05146109e357600080fd5b8063e2f4560514610955578063e6fb2eb01461096b578063f11a24d31461098157600080fd5b8063c0246668116100d1578063c0246668146108c3578063c8c8ebe4146108e3578063d85ba063146108f9578063dd62ed3e1461090f57600080fd5b8063afa4f3b214610854578063b62496f514610874578063bbc0c742146108a457600080fd5b80639485b9d811610164578063a28d23dc1161013e578063a28d23dc146107d4578063a457c2d7146107f4578063a67096e214610814578063a9059cbb1461083457600080fd5b80639485b9d81461077f57806395d89b411461079f5780639a7a23d6146107b457600080fd5b806375f0a874146106e05780637bce5a04146107005780638a8c523c146107165780638da5cb5b1461072b5780639213691314610749578063924de9b71461075f57600080fd5b806323b872dd116102855780635d098b38116102235780637072152c116101fd5780637072152c1461065f57806370a0823114610675578063715018a6146106ab5780637571336a146106c057600080fd5b80635d098b381461060f5780636a486a8e1461062f5780636ddd17131461064557600080fd5b806334a4a65f1161025f57806334a4a65f14610576578063395093511461059657806349bd5a5e146105b65780634fbee193146105d657600080fd5b806323b872dd1461051a57806327a14fc21461053a578063313ce5671461055a57600080fd5b806313af4035116102f257806318160ddd116102cc57806318160ddd146104af5780631a8145bb146104ce5780631e293c10146104e45780631f3fed8f1461050457600080fd5b806313af4035146104465780631694505e1461046657806317700f011461049a57600080fd5b8063057c09db1461034557806306fdde0314610382578063095ea7b3146103a45780630d075d9c146103d45780630f683e90146103f657806310d5de531461041657600080fd5b3661034057005b600080fd5b34801561035157600080fd5b50600854610365906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038e57600080fd5b506103976109f9565b60405161037991906125e4565b3480156103b057600080fd5b506103c46103bf36600461262c565b610a8b565b6040519015158152602001610379565b3480156103e057600080fd5b506103f46103ef366004612658565b610aa2565b005b34801561040257600080fd5b506103f4610411366004612658565b610b54565b34801561042257600080fd5b506103c4610431366004612684565b601a6020526000908152604090205460ff1681565b34801561045257600080fd5b506103f4610461366004612684565b610bf8565b34801561047257600080fd5b506103657f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a3081565b3480156104a657600080fd5b506103f4610c39565b3480156104bb57600080fd5b506002545b604051908152602001610379565b3480156104da57600080fd5b506104c060175481565b3480156104f057600080fd5b506103f46104ff3660046126a1565b610c70565b34801561051057600080fd5b506104c060155481565b34801561052657600080fd5b506103c46105353660046126ba565b610cb2565b34801561054657600080fd5b506103f46105553660046126a1565b610d5e565b34801561056657600080fd5b5060405160128152602001610379565b34801561058257600080fd5b506103f4610591366004612684565b610da0565b3480156105a257600080fd5b506103c46105b136600461262c565b610dec565b3480156105c257600080fd5b50600654610365906001600160a01b031681565b3480156105e257600080fd5b506103c46105f1366004612684565b6001600160a01b031660009081526019602052604090205460ff1690565b34801561061b57600080fd5b506103f461062a366004612684565b610e28565b34801561063b57600080fd5b506104c060115481565b34801561065157600080fd5b50600c546103c49060ff1681565b34801561066b57600080fd5b506104c060165481565b34801561068157600080fd5b506104c0610690366004612684565b6001600160a01b031660009081526020819052604090205490565b3480156106b757600080fd5b506103f4610eb6565b3480156106cc57600080fd5b506103f46106db366004612709565b610eec565b3480156106ec57600080fd5b50600754610365906001600160a01b031681565b34801561070c57600080fd5b506104c0600e5481565b34801561072257600080fd5b506103f4610f41565b34801561073757600080fd5b506005546001600160a01b0316610365565b34801561075557600080fd5b506104c060125481565b34801561076b57600080fd5b506103f461077a366004612742565b610f7c565b34801561078b57600080fd5b506103f461079a366004612684565b610fb9565b3480156107ab57600080fd5b50610397611047565b3480156107c057600080fd5b506103f46107cf366004612709565b611056565b3480156107e057600080fd5b506103f46107ef366004612684565b61110e565b34801561080057600080fd5b506103c461080f36600461262c565b61119c565b34801561082057600080fd5b506103f461082f36600461275f565b611235565b34801561084057600080fd5b506103c461084f36600461262c565b6112e0565b34801561086057600080fd5b506103c461086f3660046126a1565b6112ed565b34801561088057600080fd5b506103c461088f366004612684565b601b6020526000908152604090205460ff1681565b3480156108b057600080fd5b50600c546103c490610100900460ff1681565b3480156108cf57600080fd5b506103f46108de366004612709565b611323565b3480156108ef57600080fd5b506104c060095481565b34801561090557600080fd5b506104c0600d5481565b34801561091b57600080fd5b506104c061092a36600461275f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561096157600080fd5b506104c0600b5481565b34801561097757600080fd5b506104c060135481565b34801561098d57600080fd5b506104c060105481565b3480156109a357600080fd5b506103f46109b2366004612684565b6113ac565b3480156109c357600080fd5b506104c0600f5481565b3480156109d957600080fd5b506104c060145481565b3480156109ef57600080fd5b506104c0600a5481565b606060038054610a089061278d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a349061278d565b8015610a815780601f10610a5657610100808354040283529160200191610a81565b820191906000526020600020905b815481529060010190602001808311610a6457829003601f168201915b5050505050905090565b6000610a98338484611444565b5060015b92915050565b6005546001600160a01b03163314610ad55760405162461bcd60e51b8152600401610acc906127c7565b60405180910390fd5b600e839055600f829055601081905580610aef8385612812565b610af99190612812565b600d8190556103e81015610b4f5760405162461bcd60e51b815260206004820152601a60248201527f546f74616c20666565732065786365656473206d6178206665650000000000006044820152606401610acc565b505050565b6005546001600160a01b03163314610b7e5760405162461bcd60e51b8152600401610acc906127c7565b60128390556013829055601481905580610b988385612812565b610ba29190612812565b60118190556103e81015610b4f5760405162461bcd60e51b815260206004820152601a60248201527f546f74616c20666565732065786365656473206d6178206665650000000000006044820152606401610acc565b6005546001600160a01b03163314610c225760405162461bcd60e51b8152600401610acc906127c7565b610c2b816113ac565b610c36816001611323565b50565b6005546001600160a01b03163314610c635760405162461bcd60e51b8152600401610acc906127c7565b600c805461ffff19169055565b6005546001600160a01b03163314610c9a5760405162461bcd60e51b8152600401610acc906127c7565b610cac81670de0b6b3a7640000612825565b60095550565b6000610cbf848484611568565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d445760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610acc565b610d518533858403611444565b60019150505b9392505050565b6005546001600160a01b03163314610d885760405162461bcd60e51b8152600401610acc906127c7565b610d9a81670de0b6b3a7640000612825565b600a5550565b6005546001600160a01b03163314610dca5760405162461bcd60e51b8152600401610acc906127c7565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a98918590610e23908690612812565b611444565b6005546001600160a01b03163314610e525760405162461bcd60e51b8152600401610acc906127c7565b6007546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600780546001600160a01b0319166001600160a01b038316908117909155610c36906001611323565b6005546001600160a01b03163314610ee05760405162461bcd60e51b8152600401610acc906127c7565b610eea6000611c4a565b565b6005546001600160a01b03163314610f165760405162461bcd60e51b8152600401610acc906127c7565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610acc906127c7565b600c805461ffff1916610101179055565b6005546001600160a01b03163314610fa65760405162461bcd60e51b8152600401610acc906127c7565b600c805460ff1916911515919091179055565b6005546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610acc906127c7565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114611030576040519150601f19603f3d011682016040523d82523d6000602084013e611035565b606091505b505090508061104357600080fd5b5050565b606060048054610a089061278d565b6005546001600160a01b031633146110805760405162461bcd60e51b8152600401610acc906127c7565b6006546001600160a01b03908116908316036111045760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610acc565b6110438282611c9c565b6005546001600160a01b031633146111385760405162461bcd60e51b8152600401610acc906127c7565b6008546040516001600160a01b03918216918316907f2d44b5390a882ce82b45cc7b7481a8e213f611b5eda9ae36ad1e40de1450ece590600090a3600880546001600160a01b0319166001600160a01b038316908117909155610c36906001611323565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561121e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610acc565b61122b3385858403611444565b5060019392505050565b6005546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610acc906127c7565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156112a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ca919061283c565b9050610b4f6001600160a01b0383168483611cf0565b6000610a98338484611568565b6005546000906001600160a01b0316331461131a5760405162461bcd60e51b8152600401610acc906127c7565b50600b55600190565b6005546001600160a01b0316331461134d5760405162461bcd60e51b8152600401610acc906127c7565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113d65760405162461bcd60e51b8152600401610acc906127c7565b6001600160a01b03811661143b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610acc565b610c3681611c4a565b6001600160a01b0383166114a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610acc565b6001600160a01b0382166115075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610acc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661158e5760405162461bcd60e51b8152600401610acc90612855565b6001600160a01b0382166115b45760405162461bcd60e51b8152600401610acc9061289a565b806000036115c857610b4f83836000611d42565b6005546001600160a01b038481169116148015906115f457506005546001600160a01b03838116911614155b801561160857506001600160a01b03821615155b801561161f57506001600160a01b03821661dead14155b80156116355750600654600160a01b900460ff16155b1561193357600c54610100900460ff166116cd576001600160a01b03831660009081526019602052604090205460ff168061168857506001600160a01b03821660009081526019602052604090205460ff165b6116cd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610acc565b6001600160a01b0383166000908152601b602052604090205460ff16801561170e57506001600160a01b0382166000908152601a602052604090205460ff16155b156117f2576009548111156117835760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610acc565b600a546001600160a01b0383166000908152602081905260409020546117a99083612812565b11156117ed5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610acc565b611933565b6001600160a01b0382166000908152601b602052604090205460ff16801561183357506001600160a01b0383166000908152601a602052604090205460ff16155b156118a9576009548111156117ed5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610acc565b6001600160a01b0382166000908152601a602052604090205460ff1661193357600a546001600160a01b0383166000908152602081905260409020546118ef9083612812565b11156119335760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610acc565b30600090815260208190526040902054600b54811080159081906119595750600c5460ff165b801561196f5750600654600160a01b900460ff16155b801561199457506001600160a01b0385166000908152601b602052604090205460ff16155b80156119b957506001600160a01b03851660009081526019602052604090205460ff16155b80156119de57506001600160a01b03841660009081526019602052604090205460ff16155b80156119ec57506000601154115b80156119fa57506000600d54115b15611a28576006805460ff60a01b1916600160a01b179055611a1a611e97565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526019602052604090205460ff600160a01b909204821615911680611a7657506001600160a01b03851660009081526019602052604090205460ff165b15611a7f575060005b60008060008315611c34576001600160a01b0388166000908152601b602052604090205460ff168015611ab457506000601154115b15611b525761271060115488611aca9190612825565b611ad491906128dd565b925060115460125484611ae79190612825565b611af191906128dd565b915060115460145484611b049190612825565b611b0e91906128dd565b90508160156000828254611b229190612812565b925050819055508060176000828254611b3b9190612812565b909155505060168054838503839003019055611c16565b6001600160a01b0389166000908152601b602052604090205460ff168015611b7c57506000600d54115b15611c1657612710600d5488611b929190612825565b611b9c91906128dd565b9250600d54600e5484611baf9190612825565b611bb991906128dd565b9150600d5460105484611bcc9190612825565b611bd691906128dd565b90508160156000828254611bea9190612812565b925050819055508060176000828254611c039190612812565b9091555050601680548385038390030190555b8215611c2757611c27893085611d42565b611c3183886128ff565b96505b611c3f898989611d42565b505050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610b4f9084906120d0565b6001600160a01b038316611d685760405162461bcd60e51b8152600401610acc90612855565b6001600160a01b038216611d8e5760405162461bcd60e51b8152600401610acc9061289a565b6001600160a01b03831660009081526020819052604090205481811015611e065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610acc565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611e3d908490612812565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e8991815260200190565b60405180910390a350505050565b3060009081526020819052604081205490506000601654601554601754611ebe9190612812565b611ec89190612812565b9050811580611ed5575080155b15611ede575050565b600060028260175485611ef19190612825565b611efb91906128dd565b611f0591906128dd565b905080830347611f14826121a2565b6000814703905060008560155483611f2c9190612825565b611f3691906128dd565b905060008660165484611f499190612825565b611f5391906128dd565b6000601781905560158190556016819055600754604051929350848603849003926001600160a01b039091169085908381818185875af1925050503d8060008114611fba576040519150601f19603f3d011682016040523d82523d6000602084013e611fbf565b606091505b50506008546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114612013576040519150601f19603f3d011682016040523d82523d6000602084013e612018565b606091505b5050905060008911801561202c5750600083115b1561207f5761203b8984612362565b601754604080518a81526020810186905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b8180156120895750805b6120c35760405162461bcd60e51b815260206004820152600b60248201526a1cd95b990819985a5b195960aa1b6044820152606401610acc565b5050505050505050505050565b6000612125826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124489092919063ffffffff16565b805190915015610b4f57808060200190518101906121439190612912565b610b4f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610acc565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121d7576121d761292f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a306001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122799190612945565b8160018151811061228c5761228c61292f565b60200260200101906001600160a01b031690816001600160a01b0316815250506122d7307f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a3084611444565b60405163791ac94760e01b81526001600160a01b037f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30169063791ac9479061232c908590600090869030904290600401612962565b600060405180830381600087803b15801561234657600080fd5b505af115801561235a573d6000803e3d6000fd5b505050505050565b61238d307f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a3084611444565b60185460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a309091169063f305d71990839060c40160606040518083038185885af115801561241c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061244191906129d3565b5050505050565b6060612457848460008561245f565b949350505050565b6060824710156124c05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610acc565b843b61250e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610acc565b600080866001600160a01b0316858760405161252a9190612a01565b60006040518083038185875af1925050503d8060008114612567576040519150601f19603f3d011682016040523d82523d6000602084013e61256c565b606091505b509150915061257c828286612587565b979650505050505050565b60608315612596575081610d57565b8251156125a65782518084602001fd5b8160405162461bcd60e51b8152600401610acc91906125e4565b60005b838110156125db5781810151838201526020016125c3565b50506000910152565b60208152600082518060208401526126038160408501602087016125c0565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610c3657600080fd5b6000806040838503121561263f57600080fd5b823561264a81612617565b946020939093013593505050565b60008060006060848603121561266d57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561269657600080fd5b8135610d5781612617565b6000602082840312156126b357600080fd5b5035919050565b6000806000606084860312156126cf57600080fd5b83356126da81612617565b925060208401356126ea81612617565b929592945050506040919091013590565b8015158114610c3657600080fd5b6000806040838503121561271c57600080fd5b823561272781612617565b91506020830135612737816126fb565b809150509250929050565b60006020828403121561275457600080fd5b8135610d57816126fb565b6000806040838503121561277257600080fd5b823561277d81612617565b9150602083013561273781612617565b600181811c908216806127a157607f821691505b6020821081036127c157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9c57610a9c6127fc565b8082028115828204841417610a9c57610a9c6127fc565b60006020828403121561284e57600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000826128fa57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610a9c57610a9c6127fc565b60006020828403121561292457600080fd5b8151610d57816126fb565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561295757600080fd5b8151610d5781612617565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129b25784516001600160a01b03168352938301939183019160010161298d565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156129e857600080fd5b8351925060208401519150604084015190509250925092565b60008251612a138184602087016125c0565b919091019291505056fea26469706673582212204cb3b5f8bac436e9ab789fb0133426d83e1e8045237958c0cb32522ca47f1f0864736f6c63430008130033

Deployed Bytecode Sourcemap

20573:16167:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20934:32;;;;;;;;;;-1:-1:-1;20934:32:0;;;;-1:-1:-1;;;;;20934:32:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;20934:32:0;;;;;;;;6746:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7726:194::-;;;;;;;;;;-1:-1:-1;7726:194:0;;;;;:::i;:::-;;:::i;:::-;;;1499:14:1;;1492:22;1474:41;;1462:2;1447:18;7726:194:0;1334:187:1;26325:446:0;;;;;;;;;;-1:-1:-1;26325:446:0;;;;;:::i;:::-;;:::i;:::-;;26779:492;;;;;;;;;;-1:-1:-1;26779:492:0;;;;;:::i;:::-;;:::i;21814:63::-;;;;;;;;;;-1:-1:-1;21814:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28719:146;;;;;;;;;;-1:-1:-1;28719:146:0;;;;;:::i;:::-;;:::i;20772:51::-;;;;;;;;;;;;;;;25229:115;;;;;;;;;;;;;:::i;7067:108::-;;;;;;;;;;-1:-1:-1;7155:12:0;;7067:108;;;2480:25:1;;;2468:2;2453:18;7067:108:0;2334:177:1;21583:33:0;;;;;;;;;;;;;;;;25352:143;;;;;;;;;;-1:-1:-1;25352:143:0;;;;;:::i;:::-;;:::i;21501:33::-;;;;;;;;;;;;;;;;7928:529;;;;;;;;;;-1:-1:-1;7928:529:0;;;;;:::i;:::-;;:::i;25628:127::-;;;;;;;;;;-1:-1:-1;25628:127:0;;;;;:::i;:::-;;:::i;6966:93::-;;;;;;;;;;-1:-1:-1;6966:93:0;;7049:2;3304:36:1;;3292:2;3277:18;6966:93:0;3162:184:1;25503:117:0;;;;;;;;;;-1:-1:-1;25503:117:0;;;;;:::i;:::-;;:::i;8465:290::-;;;;;;;;;;-1:-1:-1;8465:290:0;;;;;:::i;:::-;;:::i;20830:28::-;;;;;;;;;;-1:-1:-1;20830:28:0;;;;-1:-1:-1;;;;;20830:28:0;;;29128:126;;;;;;;;;;-1:-1:-1;29128:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;29218:28:0;29194:4;29218:28;;;:19;:28;;;;;;;;;29128:126;27979:254;;;;;;;;;;-1:-1:-1;27979:254:0;;;;;:::i;:::-;;:::i;21348:28::-;;;;;;;;;;;;;;;;21088:31;;;;;;;;;;-1:-1:-1;21088:31:0;;;;;;;;21541:35;;;;;;;;;;;;;;;;7183:143;;;;;;;;;;-1:-1:-1;7183:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;7300:18:0;7273:7;7300:18;;;;;;;;;;;;7183:143;786:94;;;;;;;;;;;;;:::i;25952:169::-;;;;;;;;;;-1:-1:-1;25952:169:0;;;;;:::i;:::-;;:::i;20897:30::-;;;;;;;;;;-1:-1:-1;20897:30:0;;;;-1:-1:-1;;;;;20897:30:0;;;21233;;;;;;;;;;;;;;;;25085:112;;;;;;;;;;;;;:::i;563:87::-;;;;;;;;;;-1:-1:-1;636:6:0;;-1:-1:-1;;;;;636:6:0;563:87;;21383:31;;;;;;;;;;;;;;;;26217:100;;;;;;;;;;-1:-1:-1;26217:100:0;;;;;:::i;:::-;;:::i;28535:176::-;;;;;;;;;;-1:-1:-1;28535:176:0;;;;;:::i;:::-;;:::i;6854:104::-;;;;;;;;;;;;;:::i;27469:306::-;;;;;;;;;;-1:-1:-1;27469:306:0;;;;;:::i;:::-;;:::i;28241:286::-;;;;;;;;;;-1:-1:-1;28241:286:0;;;;;:::i;:::-;;:::i;8763:475::-;;;;;;;;;;-1:-1:-1;8763:475:0;;;;;:::i;:::-;;:::i;28873:247::-;;;;;;;;;;-1:-1:-1;28873:247:0;;;;;:::i;:::-;;:::i;7334:200::-;;;;;;;;;;-1:-1:-1;7334:200:0;;;;;:::i;:::-;;:::i;25763:181::-;;;;;;;;;;-1:-1:-1;25763:181:0;;;;;:::i;:::-;;:::i;22035:57::-;;;;;;;;;;-1:-1:-1;22035:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21126:33;;;;;;;;;;-1:-1:-1;21126:33:0;;;;;;;;;;;27279:182;;;;;;;;;;-1:-1:-1;27279:182:0;;;;;:::i;:::-;;:::i;20973:35::-;;;;;;;;;;;;;;;;21199:27;;;;;;;;;;;;;;;;7542:176;;;;;;;;;;-1:-1:-1;7542:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;7683:18:0;;;7656:7;7683:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7542:176;21046:33;;;;;;;;;;;;;;;;21421;;;;;;;;;;;;;;;;21309:30;;;;;;;;;;;;;;;;888:229;;;;;;;;;;-1:-1:-1;888:229:0;;;;;:::i;:::-;;:::i;21270:32::-;;;;;;;;;;;;;;;;21461:31;;;;;;;;;;;;;;;;21015:24;;;;;;;;;;;;;;;;6746:100;6800:13;6833:5;6826:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6746:100;:::o;7726:194::-;7834:4;7851:39;173:10;7874:7;7883:6;7851:8;:39::i;:::-;-1:-1:-1;7908:4:0;7726:194;;;;;:::o;26325:446::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;;;;;;;;;26480:15:::1;:31:::0;;;26522:17:::1;:35:::0;;;26568:15:::1;:31:::0;;;26586:13;26625:35:::1;26542:15:::0;26498:13;26625:35:::1;:::i;:::-;:53;;;;:::i;:::-;26610:12;:68:::0;;;20761:4:::1;-1:-1:-1::0;26699:33:0::1;26691:72;;;::::0;-1:-1:-1;;;26691:72:0;;5710:2:1;26691:72:0::1;::::0;::::1;5692:21:1::0;5749:2;5729:18;;;5722:30;5788:28;5768:18;;;5761:56;5834:18;;26691:72:0::1;5508:350:1::0;26691:72:0::1;26325:446:::0;;;:::o;26779:492::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;26935:16:::1;:32:::0;;;26978:18:::1;:36:::0;;;27025:16:::1;:32:::0;;;27044:13;27097:50:::1;26999:15:::0;26954:13;27097:50:::1;:::i;:::-;:82;;;;:::i;:::-;27068:13;:111:::0;;;20761:4:::1;-1:-1:-1::0;27198:34:0::1;27190:73;;;::::0;-1:-1:-1;;;27190:73:0;;5710:2:1;27190:73:0::1;::::0;::::1;5692:21:1::0;5749:2;5729:18;;;5722:30;5788:28;5768:18;;;5761:56;5834:18;;27190:73:0::1;5508:350:1::0;28719:146:0;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;28786:28:::1;28804:9;28786:17;:28::i;:::-;28825:32;28841:9;28852:4;28825:15;:32::i;:::-;28719:146:::0;:::o;25229:115::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;25285:13:::1;:21:::0;;-1:-1:-1;;25317:19:0;;;25229:115::o;25352:143::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;25461:26:::1;:13:::0;25478:8:::1;25461:26;:::i;:::-;25438:20;:49:::0;-1:-1:-1;25352:143:0:o;7928:529::-;8068:4;8085:36;8095:6;8103:9;8114:6;8085:9;:36::i;:::-;-1:-1:-1;;;;;8161:19:0;;8134:24;8161:19;;;:11;:19;;;;;;;;173:10;8161:33;;;;;;;;8227:26;;;;8205:116;;;;-1:-1:-1;;;8205:116:0;;6238:2:1;8205:116:0;;;6220:21:1;6277:2;6257:18;;;6250:30;6316:34;6296:18;;;6289:62;-1:-1:-1;;;6367:18:1;;;6360:38;6415:19;;8205:116:0;6036:404:1;8205:116:0;8357:57;8366:6;173:10;8407:6;8388:16;:25;8357:8;:57::i;:::-;8445:4;8438:11;;;7928:529;;;;;;:::o;25628:127::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;25721:26:::1;:13:::0;25738:8:::1;25721:26;:::i;:::-;25709:9;:38:::0;-1:-1:-1;25628:127:0:o;25503:117::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;25582:16:::1;:30:::0;;-1:-1:-1;;;;;;25582:30:0::1;-1:-1:-1::0;;;;;25582:30:0;;;::::1;::::0;;;::::1;::::0;;25503:117::o;8465:290::-;173:10;8578:4;8667:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8667:34:0;;;;;;;;;;8578:4;;8595:130;;8645:7;;8667:47;;8704:10;;8667:47;:::i;:::-;8595:8;:130::i;27979:254::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;28113:15:::1;::::0;28070:59:::1;::::0;-1:-1:-1;;;;;28113:15:0;;::::1;::::0;28070:59;::::1;::::0;::::1;::::0;28113:15:::1;::::0;28070:59:::1;28140:15;:36:::0;;-1:-1:-1;;;;;;28140:36:0::1;-1:-1:-1::0;;;;;28140:36:0;::::1;::::0;;::::1;::::0;;;28187:38:::1;::::0;-1:-1:-1;28187:15:0::1;:38::i;786:94::-:0;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;851:21:::1;869:1;851:9;:21::i;:::-;786:94::o:0;25952:169::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26067:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;26067:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25952:169::o;25085:112::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;25140:13:::1;:20:::0;;-1:-1:-1;;25171:18:0;;;;;25085:112::o;26217:100::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;26288:11:::1;:21:::0;;-1:-1:-1;;26288:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26217:100::o;28535:176::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;28610:9:::1;28633:4;-1:-1:-1::0;;;;;28625:18:0::1;28652:21;28625:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28609:70;;;28698:4;28690:13;;;::::0;::::1;;28598:113;28535:176:::0;:::o;6854:104::-;6910:13;6943:7;6936:14;;;;;:::i;27469:306::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;27615:13:::1;::::0;-1:-1:-1;;;;;27615:13:0;;::::1;27607:21:::0;;::::1;::::0;27585:128:::1;;;::::0;-1:-1:-1;;;27585:128:0;;6857:2:1;27585:128:0::1;::::0;::::1;6839:21:1::0;6896:2;6876:18;;;6869:30;6935:34;6915:18;;;6908:62;7006:27;6986:18;;;6979:55;7051:19;;27585:128:0::1;6655:421:1::0;27585:128:0::1;27726:41;27755:4;27761:5;27726:28;:41::i;28241:286::-:0;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;28399:17:::1;::::0;28352:65:::1;::::0;-1:-1:-1;;;;;28399:17:0;;::::1;::::0;28352:65;::::1;::::0;::::1;::::0;28399:17:::1;::::0;28352:65:::1;28428:17;:40:::0;;-1:-1:-1;;;;;;28428:40:0::1;-1:-1:-1::0;;;;;28428:40:0;::::1;::::0;;::::1;::::0;;;28479::::1;::::0;-1:-1:-1;28479:15:0::1;:40::i;8763:475::-:0;173:10;8881:4;8925:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8925:34:0;;;;;;;;;;8992:35;;;;8970:122;;;;-1:-1:-1;;;8970:122:0;;7283:2:1;8970:122:0;;;7265:21:1;7322:2;7302:18;;;7295:30;7361:34;7341:18;;;7334:62;-1:-1:-1;;;7412:18:1;;;7405:35;7457:19;;8970:122:0;7081:401:1;8970:122:0;9128:67;173:10;9151:7;9179:15;9160:16;:34;9128:8;:67::i;:::-;-1:-1:-1;9226:4:0;;8763:475;-1:-1:-1;;;8763:475:0:o;28873:247::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;29011:45:::1;::::0;-1:-1:-1;;;29011:45:0;;29050:4:::1;29011:45;::::0;::::1;160:51:1::0;28996:12:0::1;::::0;-1:-1:-1;;;;;29011:30:0;::::1;::::0;::::1;::::0;133:18:1;;29011:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28996:60:::0;-1:-1:-1;29067:45:0::1;-1:-1:-1::0;;;;;29067:33:0;::::1;29101:4:::0;28996:60;29067:33:::1;:45::i;7334:200::-:0;7445:4;7462:42;173:10;7486:9;7497:6;7462:9;:42::i;25763:181::-;636:6;;25862:4;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;-1:-1:-1;25879:18:0::1;:35:::0;25932:4:::1;::::0;25763:181::o;27279:182::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27364:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;27364:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27419:34;;1474:41:1;;;27419:34:0::1;::::0;1447:18:1;27419:34:0::1;;;;;;;27279:182:::0;;:::o;888:229::-;636:6;;-1:-1:-1;;;;;636:6:0;173:10;698:23;690:68;;;;-1:-1:-1;;;690:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;991:22:0;::::1;969:110;;;::::0;-1:-1:-1;;;969:110:0;;7878:2:1;969:110:0::1;::::0;::::1;7860:21:1::0;7917:2;7897:18;;;7890:30;7956:34;7936:18;;;7929:62;-1:-1:-1;;;8007:18:1;;;8000:36;8053:19;;969:110:0::1;7676:402:1::0;969:110:0::1;1090:19;1100:8;1090:9;:19::i;11030:380::-:0;-1:-1:-1;;;;;11166:19:0;;11158:68;;;;-1:-1:-1;;;11158:68:0;;8285:2:1;11158:68:0;;;8267:21:1;8324:2;8304:18;;;8297:30;8363:34;8343:18;;;8336:62;-1:-1:-1;;;8414:18:1;;;8407:34;8458:19;;11158:68:0;8083:400:1;11158:68:0;-1:-1:-1;;;;;11245:21:0;;11237:68;;;;-1:-1:-1;;;11237:68:0;;8690:2:1;11237:68:0;;;8672:21:1;8729:2;8709:18;;;8702:30;8768:34;8748:18;;;8741:62;-1:-1:-1;;;8819:18:1;;;8812:32;8861:19;;11237:68:0;8488:398:1;11237:68:0;-1:-1:-1;;;;;11318:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11370:32;;2480:25:1;;;11370:32:0;;2453:18:1;11370:32:0;;;;;;;11030:380;;;:::o;29312:4319::-;-1:-1:-1;;;;;29444:18:0;;29436:68;;;;-1:-1:-1;;;29436:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29523:16:0;;29515:64;;;;-1:-1:-1;;;29515:64:0;;;;;;;:::i;:::-;29596:6;29606:1;29596:11;29592:93;;29624:28;29640:4;29646:2;29650:1;29624:15;:28::i;29592:93::-;636:6;;-1:-1:-1;;;;;29715:15:0;;;636:6;;29715:15;;;;:45;;-1:-1:-1;636:6:0;;-1:-1:-1;;;;;29747:13:0;;;636:6;;29747:13;;29715:45;:78;;;;-1:-1:-1;;;;;;29777:16:0;;;;29715:78;:116;;;;-1:-1:-1;;;;;;29810:21:0;;29824:6;29810:21;;29715:116;:142;;;;-1:-1:-1;29849:8:0;;-1:-1:-1;;;29849:8:0;;;;29848:9;29715:142;29697:1534;;;29889:13;;;;;;;29884:203;;-1:-1:-1;;;;;29953:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;29982:23:0;;;;;;:19;:23;;;;;;;;29953:52;29923:148;;;;-1:-1:-1;;;29923:148:0;;9903:2:1;29923:148:0;;;9885:21:1;9942:2;9922:18;;;9915:30;-1:-1:-1;;;9961:18:1;;;9954:52;10023:18;;29923:148:0;9701:346:1;29923:148:0;-1:-1:-1;;;;;30149:31:0;;;;;;:25;:31;;;;;;;;:88;;;;-1:-1:-1;;;;;;30202:35:0;;;;;;:31;:35;;;;;;;;30201:36;30149:88;30127:1093;;;30312:20;;30302:6;:30;;30272:157;;;;-1:-1:-1;;;30272:157:0;;10254:2:1;30272:157:0;;;10236:21:1;10293:2;10273:18;;;10266:30;10332:34;10312:18;;;10305:62;-1:-1:-1;;;10383:18:1;;;10376:51;10444:19;;30272:157:0;10052:417:1;30272:157:0;30504:9;;-1:-1:-1;;;;;7300:18:0;;7273:7;7300:18;;;;;;;;;;;30478:22;;:6;:22;:::i;:::-;:35;;30448:128;;;;-1:-1:-1;;;30448:128:0;;10676:2:1;30448:128:0;;;10658:21:1;10715:2;10695:18;;;10688:30;-1:-1:-1;;;10734:18:1;;;10727:49;10793:18;;30448:128:0;10474:343:1;30448:128:0;30127:1093;;;-1:-1:-1;;;;;30658:29:0;;;;;;:25;:29;;;;;;;;:88;;;;-1:-1:-1;;;;;;30709:37:0;;;;;;:31;:37;;;;;;;;30708:38;30658:88;30636:584;;;30821:20;;30811:6;:30;;30781:158;;;;-1:-1:-1;;;30781:158:0;;11024:2:1;30781:158:0;;;11006:21:1;11063:2;11043:18;;;11036:30;11102:34;11082:18;;;11075:62;-1:-1:-1;;;11153:18:1;;;11146:52;11215:19;;30781:158:0;10822:418:1;30636:584:0;-1:-1:-1;;;;;30985:35:0;;;;;;:31;:35;;;;;;;;30980:225;;31105:9;;-1:-1:-1;;;;;7300:18:0;;7273:7;7300:18;;;;;;;;;;;31079:22;;:6;:22;:::i;:::-;:35;;31045:140;;;;-1:-1:-1;;;31045:140:0;;10676:2:1;31045:140:0;;;10658:21:1;10715:2;10695:18;;;10688:30;-1:-1:-1;;;10734:18:1;;;10727:49;10793:18;;31045:140:0;10474:343:1;31045:140:0;31292:4;31243:28;7300:18;;;;;;;;;;;31350;;31326:42;;;;;;;31399:35;;-1:-1:-1;31423:11:0;;;;31399:35;:61;;;;-1:-1:-1;31452:8:0;;-1:-1:-1;;;31452:8:0;;;;31451:9;31399:61;:110;;;;-1:-1:-1;;;;;;31478:31:0;;;;;;:25;:31;;;;;;;;31477:32;31399:110;:153;;;;-1:-1:-1;;;;;;31527:25:0;;;;;;:19;:25;;;;;;;;31526:26;31399:153;:194;;;;-1:-1:-1;;;;;;31570:23:0;;;;;;:19;:23;;;;;;;;31569:24;31399:194;:228;;;;;31626:1;31610:13;;:17;31399:228;:261;;;;;31659:1;31644:12;;:16;31399:261;31381:393;;;31687:8;:15;;-1:-1:-1;;;;31687:15:0;-1:-1:-1;;;31687:15:0;;;31719:10;:8;:10::i;:::-;31746:8;:16;;-1:-1:-1;;;;31746:16:0;;;31381:393;31802:8;;-1:-1:-1;;;;;31912:25:0;;31786:12;31912:25;;;:19;:25;;;;;;31802:8;-1:-1:-1;;;31802:8:0;;;;;31801:9;;31912:25;;:52;;-1:-1:-1;;;;;;31941:23:0;;;;;;:19;:23;;;;;;;;31912:52;31908:100;;;-1:-1:-1;31991:5:0;31908:100;32020:12;32047:20;32082;32195:7;32191:1387;;;-1:-1:-1;;;;;32247:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;32296:1;32280:13;;:17;32247:50;32243:1186;;;20712:5;32335:13;;32326:6;:22;;;;:::i;:::-;32325:39;;;;:::i;:::-;32318:46;;32426:13;;32406:16;;32399:4;:23;;;;:::i;:::-;32398:41;;;;:::i;:::-;32383:56;;32501:13;;32481:16;;32474:4;:23;;;;:::i;:::-;32473:41;;;;:::i;:::-;32458:56;;32555:12;32533:18;;:34;;;;;;;:::i;:::-;;;;;;;;32608:12;32586:18;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;32672:20:0;:110;;32697:44;;;:84;;;32672:110;;;32243:1186;;;-1:-1:-1;;;;;32863:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;32913:1;32898:12;;:16;32863:51;32859:570;;;20712:5;32952:12;;32943:6;:21;;;;:::i;:::-;32942:38;;;;:::i;:::-;32935:45;;33041:12;;33022:15;;33015:4;:22;;;;:::i;:::-;33014:39;;;;:::i;:::-;32999:54;;33114:12;;33095:15;;33088:4;:22;;;;:::i;:::-;33087:39;;;;:::i;:::-;33072:54;;33167:12;33145:18;;:34;;;;;;;:::i;:::-;;;;;;;;33220:12;33198:18;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;33284:20:0;:110;;33309:44;;;:84;;;33284:110;;;32859:570;33449:8;;33445:91;;33478:42;33494:4;33508;33515;33478:15;:42::i;:::-;33552:14;33562:4;33552:14;;:::i;:::-;;;32191:1387;33590:33;33606:4;33612:2;33616:6;33590:15;:33::i;:::-;29425:4206;;;;;;29312:4319;;;:::o;1125:173::-;1200:6;;;-1:-1:-1;;;;;1217:17:0;;;-1:-1:-1;;;;;;1217:17:0;;;;;;;1250:40;;1200:6;;;1217:17;1200:6;;1250:40;;1181:16;;1250:40;1170:128;1125:173;:::o;27783:188::-;-1:-1:-1;;;;;27866:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;27866:39:0;;;;;;;;;;27923:40;;27866:39;;:31;27923:40;;;27783:188;;:::o;11741:214::-;11878:58;;;-1:-1:-1;;;;;11792:32:1;;11878:58:0;;;11774:51:1;11841:18;;;;11834:34;;;11878:58:0;;;;;;;;;;11747:18:1;;;;11878:58:0;;;;;;;;-1:-1:-1;;;;;11878:58:0;-1:-1:-1;;;11878:58:0;;;11824:123;;11858:5;;11824:19;:123::i;9246:770::-;-1:-1:-1;;;;;9386:20:0;;9378:70;;;;-1:-1:-1;;;9378:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9467:23:0;;9459:71;;;;-1:-1:-1;;;9459:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9627:17:0;;9603:21;9627:17;;;;;;;;;;;9677:23;;;;9655:111;;;;-1:-1:-1;;;9655:111:0;;12081:2:1;9655:111:0;;;12063:21:1;12120:2;12100:18;;;12093:30;12159:34;12139:18;;;12132:62;-1:-1:-1;;;12210:18:1;;;12203:36;12256:19;;9655:111:0;11879:402:1;9655:111:0;-1:-1:-1;;;;;9802:17:0;;;:9;:17;;;;;;;;;;;9822:22;;;9802:42;;9866:20;;;;;;;;:30;;9838:6;;9802:9;9866:30;;9838:6;;9866:30;:::i;:::-;;;;;;;;9931:9;-1:-1:-1;;;;;9914:35:0;9923:6;-1:-1:-1;;;;;9914:35:0;;9942:6;9914:35;;;;2480:25:1;;2468:2;2453:18;;2334:177;9914:35:0;;;;;;;;9367:649;9246:770;;;:::o;34766:1971::-;34849:4;34805:23;7300:18;;;;;;;;;;;34805:50;;34866:25;34962:20;;34928:18;;34894;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;34866:116;-1:-1:-1;34999:20:0;;;:46;;-1:-1:-1;35023:22:0;;34999:46;34995:85;;;35062:7;;34766:1971::o;34995:85::-;35141:23;35254:1;35221:17;35186:18;;35168:15;:36;;;;:::i;:::-;35167:71;;;;:::i;:::-;:88;;;;:::i;:::-;35141:114;-1:-1:-1;35355:33:0;;;35440:21;35474:36;35355:33;35474:16;:36::i;:::-;35523:18;35620:17;35596:21;:41;35583:54;;35661:23;35736:17;35701:18;;35688:10;:31;;;;:::i;:::-;35687:66;;;;:::i;:::-;35661:92;;35764:25;35843:17;35806:20;;35793:10;:33;;;;:::i;:::-;35792:68;;;;:::i;:::-;35873:23;36028:18;:22;;;36061:18;:22;;;36094:20;:24;;;36167:15;;36159:81;;35764:96;;-1:-1:-1;35956:28:0;;;:48;;;;-1:-1:-1;;;;;36167:15:0;;;;35956:28;;35873:23;36159:81;35873:23;36159:81;35956:28;36167:15;36159:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36289:17:0;;36281:85;;36131:109;;-1:-1:-1;36252:23:0;;-1:-1:-1;;;;;36289:17:0;;;;36334;;36252:23;36281:85;36252:23;36281:85;36334:17;36289;36281:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36251:115;;;36401:1;36383:15;:19;:42;;;;;36424:1;36406:15;:19;36383:42;36379:278;;;36442:46;36455:15;36472;36442:12;:46::i;:::-;36612:18;;36508:137;;;12488:25:1;;;12544:2;12529:18;;12522:34;;;12572:18;;;12565:34;;;;36508:137:0;;;;;;12476:2:1;36508:137:0;;;36379:278;36675:16;:38;;;;;36695:18;36675:38;36667:62;;;;-1:-1:-1;;;36667:62:0;;12812:2:1;36667:62:0;;;12794:21:1;12851:2;12831:18;;;12824:30;-1:-1:-1;;;12870:18:1;;;12863:41;12921:18;;36667:62:0;12610:335:1;36667:62:0;34794:1943;;;;;;;;;;;34766:1971::o;13810:459::-;13891:23;13917:106;13959:4;13917:106;;;;;;;;;;;;;;;;;13925:5;-1:-1:-1;;;;;13917:27:0;;;:106;;;;;:::i;:::-;14038:17;;13891:132;;-1:-1:-1;14038:21:0;14034:228;;14153:10;14142:30;;;;;;;;;;;;:::i;:::-;14116:134;;;;-1:-1:-1;;;14116:134:0;;13402:2:1;14116:134:0;;;13384:21:1;13441:2;13421:18;;;13414:30;13480:34;13460:18;;;13453:62;-1:-1:-1;;;13531:18:1;;;13524:40;13581:19;;14116:134:0;13200:406:1;33639:589:0;33789:16;;;33803:1;33789:16;;;;;;;;33765:21;;33789:16;;;;;;;;;;-1:-1:-1;33789:16:0;33765:40;;33834:4;33816;33821:1;33816:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;33816:23:0;;;-1:-1:-1;;;;;33816:23:0;;;;;33860:15;-1:-1:-1;;;;;33860:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33850:4;33855:1;33850:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;33850:32:0;;;-1:-1:-1;;;;;33850:32:0;;;;;33895:62;33912:4;33927:15;33945:11;33895:8;:62::i;:::-;33996:224;;-1:-1:-1;;;33996:224:0;;-1:-1:-1;;;;;33996:15:0;:66;;;;:224;;34077:11;;34103:1;;34147:4;;34174;;34194:15;;33996:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33694:534;33639:589;:::o;34236:522::-;34384:62;34401:4;34416:15;34434:11;34384:8;:62::i;:::-;34693:16;;34489:261;;-1:-1:-1;;;34489:261:0;;34561:4;34489:261;;;15457:34:1;15507:18;;;15500:34;;;34607:1:0;15550:18:1;;;15543:34;;;15593:18;;;15586:34;-1:-1:-1;;;;;34693:16:0;;;15636:19:1;;;15629:44;34724:15:0;15689:19:1;;;15682:35;34489:15:0;:31;;;;;;34528:9;;15391:19:1;;34489:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34236:522;;:::o;2948:229::-;3085:12;3117:52;3139:6;3147:4;3153:1;3156:12;3117:21;:52::i;:::-;3110:59;2948:229;-1:-1:-1;;;;2948:229:0:o;3549:571::-;3719:12;3791:5;3766:21;:30;;3744:118;;;;-1:-1:-1;;;3744:118:0;;16241:2:1;3744:118:0;;;16223:21:1;16280:2;16260:18;;;16253:30;16319:34;16299:18;;;16292:62;-1:-1:-1;;;16370:18:1;;;16363:36;16416:19;;3744:118:0;16039:402:1;3744:118:0;2269:20;;3873:60;;;;-1:-1:-1;;;3873:60:0;;16648:2:1;3873:60:0;;;16630:21:1;16687:2;16667:18;;;16660:30;16726:31;16706:18;;;16699:59;16775:18;;3873:60:0;16446:353:1;3873:60:0;3947:12;3961:23;3988:6;-1:-1:-1;;;;;3988:11:0;4007:5;4028:4;3988:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3946:97;;;;4061:51;4078:7;4087:10;4099:12;4061:16;:51::i;:::-;4054:58;3549:571;-1:-1:-1;;;;;;;3549:571:0:o;5558:550::-;5708:12;5737:7;5733:368;;;-1:-1:-1;5768:10:0;5761:17;;5733:368;5815:17;;:21;5811:279;;5918:10;5912:17;5979:15;5966:10;5962:2;5958:19;5951:44;5811:279;6061:12;6054:20;;-1:-1:-1;;;6054:20:0;;;;;;;;:::i;222:250:1:-;307:1;317:113;331:6;328:1;325:13;317:113;;;407:11;;;401:18;388:11;;;381:39;353:2;346:10;317:113;;;-1:-1:-1;;464:1:1;446:16;;439:27;222:250::o;477:396::-;626:2;615:9;608:21;589:4;658:6;652:13;701:6;696:2;685:9;681:18;674:34;717:79;789:6;784:2;773:9;769:18;764:2;756:6;752:15;717:79;:::i;:::-;857:2;836:15;-1:-1:-1;;832:29:1;817:45;;;;864:2;813:54;;477:396;-1:-1:-1;;477:396:1:o;878:131::-;-1:-1:-1;;;;;953:31:1;;943:42;;933:70;;999:1;996;989:12;1014:315;1082:6;1090;1143:2;1131:9;1122:7;1118:23;1114:32;1111:52;;;1159:1;1156;1149:12;1111:52;1198:9;1185:23;1217:31;1242:5;1217:31;:::i;:::-;1267:5;1319:2;1304:18;;;;1291:32;;-1:-1:-1;;;1014:315:1:o;1526:316::-;1603:6;1611;1619;1672:2;1660:9;1651:7;1647:23;1643:32;1640:52;;;1688:1;1685;1678:12;1640:52;-1:-1:-1;;1711:23:1;;;1781:2;1766:18;;1753:32;;-1:-1:-1;1832:2:1;1817:18;;;1804:32;;1526:316;-1:-1:-1;1526:316:1:o;1847:247::-;1906:6;1959:2;1947:9;1938:7;1934:23;1930:32;1927:52;;;1975:1;1972;1965:12;1927:52;2014:9;2001:23;2033:31;2058:5;2033:31;:::i;2516:180::-;2575:6;2628:2;2616:9;2607:7;2603:23;2599:32;2596:52;;;2644:1;2641;2634:12;2596:52;-1:-1:-1;2667:23:1;;2516:180;-1:-1:-1;2516:180:1:o;2701:456::-;2778:6;2786;2794;2847:2;2835:9;2826:7;2822:23;2818:32;2815:52;;;2863:1;2860;2853:12;2815:52;2902:9;2889:23;2921:31;2946:5;2921:31;:::i;:::-;2971:5;-1:-1:-1;3028:2:1;3013:18;;3000:32;3041:33;3000:32;3041:33;:::i;:::-;2701:456;;3093:7;;-1:-1:-1;;;3147:2:1;3132:18;;;;3119:32;;2701:456::o;3351:118::-;3437:5;3430:13;3423:21;3416:5;3413:32;3403:60;;3459:1;3456;3449:12;3474:382;3539:6;3547;3600:2;3588:9;3579:7;3575:23;3571:32;3568:52;;;3616:1;3613;3606:12;3568:52;3655:9;3642:23;3674:31;3699:5;3674:31;:::i;:::-;3724:5;-1:-1:-1;3781:2:1;3766:18;;3753:32;3794:30;3753:32;3794:30;:::i;:::-;3843:7;3833:17;;;3474:382;;;;;:::o;3861:241::-;3917:6;3970:2;3958:9;3949:7;3945:23;3941:32;3938:52;;;3986:1;3983;3976:12;3938:52;4025:9;4012:23;4044:28;4066:5;4044:28;:::i;4107:388::-;4175:6;4183;4236:2;4224:9;4215:7;4211:23;4207:32;4204:52;;;4252:1;4249;4242:12;4204:52;4291:9;4278:23;4310:31;4335:5;4310:31;:::i;:::-;4360:5;-1:-1:-1;4417:2:1;4402:18;;4389:32;4430:33;4389:32;4430:33;:::i;4500:380::-;4579:1;4575:12;;;;4622;;;4643:61;;4697:4;4689:6;4685:17;4675:27;;4643:61;4750:2;4742:6;4739:14;4719:18;4716:38;4713:161;;4796:10;4791:3;4787:20;4784:1;4777:31;4831:4;4828:1;4821:15;4859:4;4856:1;4849:15;4713:161;;4500:380;;;:::o;4885:356::-;5087:2;5069:21;;;5106:18;;;5099:30;5165:34;5160:2;5145:18;;5138:62;5232:2;5217:18;;4885:356::o;5246:127::-;5307:10;5302:3;5298:20;5295:1;5288:31;5338:4;5335:1;5328:15;5362:4;5359:1;5352:15;5378:125;5443:9;;;5464:10;;;5461:36;;;5477:18;;:::i;5863:168::-;5936:9;;;5967;;5984:15;;;5978:22;;5964:37;5954:71;;6005:18;;:::i;7487:184::-;7557:6;7610:2;7598:9;7589:7;7585:23;7581:32;7578:52;;;7626:1;7623;7616:12;7578:52;-1:-1:-1;7649:16:1;;7487:184;-1:-1:-1;7487:184:1:o;8891:401::-;9093:2;9075:21;;;9132:2;9112:18;;;9105:30;9171:34;9166:2;9151:18;;9144:62;-1:-1:-1;;;9237:2:1;9222:18;;9215:35;9282:3;9267:19;;8891:401::o;9297:399::-;9499:2;9481:21;;;9538:2;9518:18;;;9511:30;9577:34;9572:2;9557:18;;9550:62;-1:-1:-1;;;9643:2:1;9628:18;;9621:33;9686:3;9671:19;;9297:399::o;11245:217::-;11285:1;11311;11301:132;;11355:10;11350:3;11346:20;11343:1;11336:31;11390:4;11387:1;11380:15;11418:4;11415:1;11408:15;11301:132;-1:-1:-1;11447:9:1;;11245:217::o;11467:128::-;11534:9;;;11555:11;;;11552:37;;;11569:18;;:::i;12950:245::-;13017:6;13070:2;13058:9;13049:7;13045:23;13041:32;13038:52;;;13086:1;13083;13076:12;13038:52;13118:9;13112:16;13137:28;13159:5;13137:28;:::i;13743:127::-;13804:10;13799:3;13795:20;13792:1;13785:31;13835:4;13832:1;13825:15;13859:4;13856:1;13849:15;13875:251;13945:6;13998:2;13986:9;13977:7;13973:23;13969:32;13966:52;;;14014:1;14011;14004:12;13966:52;14046:9;14040:16;14065:31;14090:5;14065:31;:::i;14131:980::-;14393:4;14441:3;14430:9;14426:19;14472:6;14461:9;14454:25;14498:2;14536:6;14531:2;14520:9;14516:18;14509:34;14579:3;14574:2;14563:9;14559:18;14552:31;14603:6;14638;14632:13;14669:6;14661;14654:22;14707:3;14696:9;14692:19;14685:26;;14746:2;14738:6;14734:15;14720:29;;14767:1;14777:195;14791:6;14788:1;14785:13;14777:195;;;14856:13;;-1:-1:-1;;;;;14852:39:1;14840:52;;14947:15;;;;14912:12;;;;14888:1;14806:9;14777:195;;;-1:-1:-1;;;;;;;15028:32:1;;;;15023:2;15008:18;;15001:60;-1:-1:-1;;;15092:3:1;15077:19;15070:35;14989:3;14131:980;-1:-1:-1;;;14131:980:1:o;15728:306::-;15816:6;15824;15832;15885:2;15873:9;15864:7;15860:23;15856:32;15853:52;;;15901:1;15898;15891:12;15853:52;15930:9;15924:16;15914:26;;15980:2;15969:9;15965:18;15959:25;15949:35;;16024:2;16013:9;16009:18;16003:25;15993:35;;15728:306;;;;;:::o;16804:287::-;16933:3;16971:6;16965:13;16987:66;17046:6;17041:3;17034:4;17026:6;17022:17;16987:66;:::i;:::-;17069:16;;;;;16804:287;-1:-1:-1;;16804:287:1:o

Swarm Source

ipfs://4cb3b5f8bac436e9ab789fb0133426d83e1e8045237958c0cb32522ca47f1f08
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.