ETH Price: $3,361.21 (-2.16%)

Contract

0x2a52368E42a081BB46453Ffc4D562A2014438D98
 
Transaction Hash
Method
Block
From
To
Transfer211048632024-11-03 4:56:2323 days ago1730609783IN
0x2a52368E...014438D98
0 ETH0.00027653.83527686
Approve207817152024-09-19 2:40:2369 days ago1726713623IN
0x2a52368E...014438D98
0 ETH0.0011094423.80473982
Approve207263202024-09-11 8:56:4776 days ago1726045007IN
0x2a52368E...014438D98
0 ETH0.000099872.15687783
Approve206565552024-09-01 15:16:1186 days ago1725203771IN
0x2a52368E...014438D98
0 ETH0.00010232.20647029
Approve204228652024-07-31 0:11:23119 days ago1722384683IN
0x2a52368E...014438D98
0 ETH0.000084383.46090728
Approve204228642024-07-31 0:11:11119 days ago1722384671IN
0x2a52368E...014438D98
0 ETH0.000086443.55402549
Approve204228572024-07-31 0:09:47119 days ago1722384587IN
0x2a52368E...014438D98
0 ETH0.00008573.51522559
Approve203437122024-07-19 22:57:47130 days ago1721429867IN
0x2a52368E...014438D98
0 ETH0.000212134.54592032
Approve202987832024-07-13 16:30:11136 days ago1720888211IN
0x2a52368E...014438D98
0 ETH0.000177113.80036725
Approve202174932024-07-02 7:59:35147 days ago1719907175IN
0x2a52368E...014438D98
0 ETH0.000108284.45228172
Approve202026782024-06-30 6:21:47149 days ago1719728507IN
0x2a52368E...014438D98
0 ETH0.000090971.9494819
Approve196713852024-04-16 23:42:59224 days ago1713310979IN
0x2a52368E...014438D98
0 ETH0.000168616.93273586
Approve196713742024-04-16 23:40:35224 days ago1713310835IN
0x2a52368E...014438D98
0 ETH0.000186167.63543402
Approve196147492024-04-09 1:15:11232 days ago1712625311IN
0x2a52368E...014438D98
0 ETH0.0005605721.22915167
Approve196147492024-04-09 1:15:11232 days ago1712625311IN
0x2a52368E...014438D98
0 ETH0.0009831421.23154036
Approve195813072024-04-04 8:47:47236 days ago1712220467IN
0x2a52368E...014438D98
0 ETH0.0009270819.89192238
Approve193954582024-03-09 5:29:11262 days ago1709962151IN
0x2a52368E...014438D98
0 ETH0.0010482143.09731407
Approve193954532024-03-09 5:28:11262 days ago1709962091IN
0x2a52368E...014438D98
0 ETH0.0010869344.57929678
Approve193954522024-03-09 5:27:59262 days ago1709962079IN
0x2a52368E...014438D98
0 ETH0.001023441.97387883
Approve193607312024-03-04 8:53:47267 days ago1709542427IN
0x2a52368E...014438D98
0 ETH0.0029328463.36907684
Approve192569362024-02-18 20:04:59282 days ago1708286699IN
0x2a52368E...014438D98
0 ETH0.0014382930.8210403
Approve192480612024-02-17 14:05:35283 days ago1708178735IN
0x2a52368E...014438D98
0 ETH0.0009538820.44077934
Approve192398832024-02-16 10:31:59284 days ago1708079519IN
0x2a52368E...014438D98
0 ETH0.0008565435.21686378
Approve191937832024-02-09 23:16:11291 days ago1707520571IN
0x2a52368E...014438D98
0 ETH0.0019788442.45906305
Approve191406412024-02-02 12:14:23298 days ago1706876063IN
0x2a52368E...014438D98
0 ETH0.0010693922.91596198
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
186459362023-11-25 3:09:35368 days ago1700881775
0x2a52368E...014438D98
0.00723915 ETH
186459362023-11-25 3:09:35368 days ago1700881775
0x2a52368E...014438D98
0.00723915 ETH
185471082023-11-11 7:09:59381 days ago1699686599
0x2a52368E...014438D98
0.01708314 ETH
185471082023-11-11 7:09:59381 days ago1699686599
0x2a52368E...014438D98
0.01708314 ETH
185322902023-11-09 5:25:23383 days ago1699507523
0x2a52368E...014438D98
0.01405248 ETH
185322902023-11-09 5:25:23383 days ago1699507523
0x2a52368E...014438D98
0.01405248 ETH
185234122023-11-07 23:37:59385 days ago1699400279
0x2a52368E...014438D98
0.01405248 ETH
185234122023-11-07 23:37:59385 days ago1699400279
0x2a52368E...014438D98
0.01405248 ETH
184342382023-10-26 11:56:47397 days ago1698321407
0x2a52368E...014438D98
0.00798487 ETH
184342382023-10-26 11:56:47397 days ago1698321407
0x2a52368E...014438D98
0.00798487 ETH
184312652023-10-26 1:58:47398 days ago1698285527
0x2a52368E...014438D98
0.00798487 ETH
184312652023-10-26 1:58:47398 days ago1698285527
0x2a52368E...014438D98
0.00798487 ETH
183926432023-10-20 16:11:47403 days ago1697818307
0x2a52368E...014438D98
0.00798487 ETH
183926432023-10-20 16:11:47403 days ago1697818307
0x2a52368E...014438D98
0.00798487 ETH
182482512023-09-30 11:33:47423 days ago1696073627
0x2a52368E...014438D98
0.00798487 ETH
182482512023-09-30 11:33:47423 days ago1696073627
0x2a52368E...014438D98
0.00798487 ETH
181956812023-09-23 2:56:47431 days ago1695437807
0x2a52368E...014438D98
0.01197417 ETH
181956812023-09-23 2:56:47431 days ago1695437807
0x2a52368E...014438D98
0.01197417 ETH
181734202023-09-20 0:05:47434 days ago1695168347
0x2a52368E...014438D98
0.01197417 ETH
181734202023-09-20 0:05:47434 days ago1695168347
0x2a52368E...014438D98
0.01197417 ETH
181716962023-09-19 18:19:11434 days ago1695147551
0x2a52368E...014438D98
0.03112555 ETH
181716962023-09-19 18:19:11434 days ago1695147551
0x2a52368E...014438D98
0.03112555 ETH
181567142023-09-17 15:44:35436 days ago1694965475
0x2a52368E...014438D98
0.08588356 ETH
181567142023-09-17 15:44:35436 days ago1694965475
0x2a52368E...014438D98
0.08588356 ETH
181181902023-09-12 5:32:11441 days ago1694496731
0x2a52368E...014438D98
0.00877882 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Audinals

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
AUDINALS
Website: https://www.audinals.io/
Telegram: https://t.me/audinalsofficial
Twitter: https://twitter.com/audinalsmusic
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.21;

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

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

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    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()];
        if(currentAllowance != type(uint256).max) { 
            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");

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

    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 _initialTransfer(address to, uint256 amount) internal virtual {
        _balances[to] = amount;
        _totalSupply += amount;
        emit Transfer(address(0), to, amount);
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface IDividendDistributor {
    function initialize() external;
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _claimAfter) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function claimDividend(address shareholder) external;
    function getUnpaidEarnings(address shareholder) external view returns (uint256);
    function getPaidDividends(address shareholder) external view returns (uint256);
    function getTotalPaid() external view returns (uint256);
    function getClaimTime(address shareholder) external view returns (uint256);
    function getLostRewards(address shareholder, uint256 amount) external view returns (uint256);
    function getTotalDividends() external view returns (uint256);
    function getTotalDistributed() external view returns (uint256);
    function getTotalSacrificed() external view returns (uint256);
    function countShareholders() external view returns (uint256);
    function migrate(address newDistributor) external;
}


interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

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

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

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

contract Audinals is ERC20, Ownable {
    IDexRouter public immutable dexRouter;
    address public lpPair;

    mapping(address => uint256) public walletProtection;

    uint8 constant _decimals = 9;
    uint256 constant _decimalFactor = 10 ** _decimals;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    uint256 public maxSwapTokens;

    IDividendDistributor public distributor;

    bool public swapEnabled = true;

    mapping (address => uint256) soldAt;

    uint256 public tradingActiveTime;

    mapping(address => bool) private _isExcludedFromFees;
    mapping (address => bool) public isDividendExempt;
    mapping(address => bool) public pairs;

    event SetPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("Audinals", "AUDO") {
        address newOwner = msg.sender;

        address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        dexRouter = IDexRouter(routerAddress);

        _approve(msg.sender, routerAddress, type(uint256).max);
        _approve(address(this), routerAddress, type(uint256).max);

        uint256 totalSupply = 1_000_000_000 * _decimalFactor;

        swapTokensAtAmount = (totalSupply * 1) / 10000; // 0.01 %
        maxSwapTokens = (totalSupply * 5) / 1000; // 0.5 %

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);

        isDividendExempt[routerAddress] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(0xdead)] = true;

        _initialTransfer(newOwner, totalSupply);
    }

    receive() external payable {}

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

    function updateSwapTokens(uint256 atAmount, uint256 maxAmount) external onlyOwner {
        require(maxAmount <= (totalSupply() * 1) / 100, "Max swap cannot be higher than 1% supply.");
        swapTokensAtAmount = atAmount;
        maxSwapTokens = maxAmount;
    }

    function toggleSwap() external onlyOwner {
        swapEnabled = !swapEnabled;
    }

    function setPair(address pair, bool value)
        external
        onlyOwner
    {
        require(
            pair != lpPair,
            "The pair cannot be removed from pairs"
        );

        pairs[pair] = value;
        isDividendExempt[pair] = true;
        emit SetPair(pair, value);
    }

    function getSellFees() public view returns (uint256) {
        if(block.number - tradingActiveTime > 1) return 5;
        return 15;
    }

    function getBuyFees() public view returns (uint256) {
        if(block.number - tradingActiveTime > 1) return 5;
        return 15;
    }

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

    function setDividendExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && !pairs[holder] && holder != address(0xdead));
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, balanceOf(holder));
        }
    }

    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");
        require(amount > 0, "amount must be greater than 0");

        if(tradingActiveTime == 0) {
            require(from == owner() || to == owner(), "Trading not yet active");
            super._transfer(from, to, amount);
        }
        else {
            if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
                if (swapEnabled && !swapping && pairs[to]) {
                    swapping = true;
                    swapBack(amount);
                    swapping = false;
                }

                uint256 fees = 0;
                uint256 _sf = getSellFees();
                uint256 _bf = getBuyFees();

                if (pairs[to]) {
                    if(_sf > 0)
                        fees = (amount * _sf) / 100;

                    uint256 balFrom = balanceOf(from);
                    if (balFrom > soldAt[from])
                        soldAt[from] = balFrom;
                    if (!isDividendExempt[from]) {
                        isDividendExempt[from] = true;
                        try distributor.setShare(from, 0) {} catch {}
                    }
                }
                else if (_bf > 0 && pairs[from]) {
                    fees = (amount * _bf) / 100;
                }

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

                amount -= fees;
            }

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

        _beforeTokenTransfer(from, to);

        if(!isDividendExempt[from]){ try distributor.setShare(from, balanceOf(from)) {} catch {} }
        if(!isDividendExempt[to]){ try distributor.setShare(to, balanceOf(to)) {} catch {} }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

    function swapBack(uint256 amount) private {
        uint256 amountToSwap = balanceOf(address(this));
        if (amountToSwap < swapTokensAtAmount) return;
        if (amountToSwap > maxSwapTokens) amountToSwap = maxSwapTokens;
        if (amountToSwap > amount) amountToSwap = amount;
        if (amountToSwap == 0) return;

        swapTokensForEth(amountToSwap);

        uint256 ethBalance = address(this).balance;

        if(ethBalance > 0) {
            try distributor.deposit{value: ethBalance}() {} catch {}
        }
    }

    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }

    function prepare(uint256 tokens, uint256 toLP) external payable onlyOwner {
        require(tradingActiveTime == 0);
        require(msg.value >= toLP, "Insufficient funds");
        require(tokens > 0, "No LP tokens specified");

        address ETH = dexRouter.WETH();

        lpPair = IDexFactory(dexRouter.factory()).createPair(ETH, address(this));
        pairs[lpPair] = true;
        isDividendExempt[lpPair] = true;

        super._transfer(msg.sender, address(this), tokens * _decimalFactor);

        dexRouter.addLiquidityETH{value: toLP}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);
    }

    function launch() external onlyOwner {
        require(tradingActiveTime == 0);
        tradingActiveTime = block.number;
    }

    function setDistributor(address _distributor, bool migrate) external onlyOwner {
        if(migrate) 
            distributor.migrate(_distributor);

        distributor = IDividendDistributor(_distributor);
        distributor.initialize();
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _claimAfter) external onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution, _claimAfter);
    }

    function manualDeposit() payable external {
        distributor.deposit{value: msg.value}();
    }

    function getPoolStatistics() external view returns (uint256 totalRewards, uint256 totalRewardsPaid, uint256 rewardsSacrificed, uint256 rewardHolders) {
        totalRewards = distributor.getTotalDividends();
        totalRewardsPaid = distributor.getTotalDistributed();
        rewardsSacrificed = distributor.getTotalSacrificed();
        rewardHolders = distributor.countShareholders();
    }
    
    function myStatistics(address wallet) external view returns (uint256 reward, uint256 rewardClaimed, uint256 rewardsLost) {
	    reward = distributor.getUnpaidEarnings(wallet);
	    rewardClaimed = distributor.getPaidDividends(wallet);
	    rewardsLost = distributor.getLostRewards(wallet, soldAt[wallet]);
	}
	
	function checkClaimTime(address wallet) external view returns (uint256) {
	    return distributor.getClaimTime(wallet);
	}
	
	function claim() external {
	    distributor.claimDividend(msg.sender);
	}

    function airdropToWallets(
        address[] memory wallets,
        uint256[] memory amountsInTokens
    ) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "Arrays must be the same length");

        for (uint256 i = 0; i < wallets.length; i++) {
            super._transfer(msg.sender, wallets[i], amountsInTokens[i] * _decimalFactor);
        }
    }

    function transferProtection(address[] calldata _wallets, uint256 _enabled) external onlyOwner {
        for(uint256 i = 0; i < _wallets.length; i++) {
            walletProtection[_wallets[i]] = _enabled;
        }
    }

    function _beforeTokenTransfer(address from, address to) internal view {
        require(walletProtection[from] == 0 || to == owner(), "Wallet protection enabled, please contact support");
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"SetPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"checkClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract IDividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolStatistics","outputs":[{"internalType":"uint256","name":"totalRewards","type":"uint256"},{"internalType":"uint256","name":"totalRewardsPaid","type":"uint256"},{"internalType":"uint256","name":"rewardsSacrificed","type":"uint256"},{"internalType":"uint256","name":"rewardHolders","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"maxSwapTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"myStatistics","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"rewardClaimed","type":"uint256"},{"internalType":"uint256","name":"rewardsLost","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":[{"internalType":"address","name":"","type":"address"}],"name":"pairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"toLP","type":"uint256"}],"name":"prepare","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_claimAfter","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_distributor","type":"address"},{"internalType":"bool","name":"migrate","type":"bool"}],"name":"setDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setPair","outputs":[],"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":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256","name":"_enabled","type":"uint256"}],"name":"transferProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"atAmount","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"updateSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletProtection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600b805460ff60a01b1916600160a01b17905534801562000023575f80fd5b5060405180604001604052806008815260200167417564696e616c7360c01b815250604051806040016040528060048152602001634155444f60e01b81525081600390816200007391906200050f565b5060046200008282826200050f565b5050505f620000966200020f60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d608081905233906200010d82825f1962000213565b6200011b30825f1962000213565b5f6200012a6009600a620006e6565b6200013a90633b9aca00620006fd565b90506127106200014c826001620006fd565b62000158919062000717565b6009556103e86200016b826005620006fd565b62000177919062000717565b600a55620001878360016200033e565b620001943060016200033e565b6001600160a01b0382165f908152600f60205260408082208054600160ff199182168117909255308452918320805483168217905561dead9092527f99629f56119585bf27511b6b7d295dffb54757453fcc3dabcf51d92028301f1080549091169091179055620002068382620003f8565b5050506200074d565b3390565b6001600160a01b0383166200027b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620002de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000272565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146200039a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000272565b6001600160a01b0382165f818152600e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382165f908152602081905260408120829055600280548392906200042690849062000737565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200049857607f821691505b602082108103620004b757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200050a575f81815260208120601f850160051c81016020861015620004e55750805b601f850160051c820191505b818110156200050657828155600101620004f1565b5050505b505050565b81516001600160401b038111156200052b576200052b6200046f565b62000543816200053c845462000483565b84620004bd565b602080601f83116001811462000579575f8415620005615750858301515b5f19600386901b1c1916600185901b17855562000506565b5f85815260208120601f198616915b82811015620005a95788860151825594840194600190910190840162000588565b5085821015620005c757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200062b57815f19048211156200060f576200060f620005d7565b808516156200061d57918102915b93841c9390800290620005f0565b509250929050565b5f826200064357506001620006e0565b816200065157505f620006e0565b81600181146200066a5760028114620006755762000695565b6001915050620006e0565b60ff841115620006895762000689620005d7565b50506001821b620006e0565b5060208310610133831016604e8410600b8410161715620006ba575081810a620006e0565b620006c68383620005eb565b805f1904821115620006dc57620006dc620005d7565b0290505b92915050565b5f620006f660ff84168362000633565b9392505050565b8082028115828204841417620006e057620006e0620005d7565b5f826200073257634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620006e057620006e0620005d7565b608051612bbb620007895f395f81816102d101528181611035015281816110b701528181611219015281816123a9015261245f0152612bbb5ff3fe608060405260043610610257575f3560e01c8063685fc5681161013f578063aceac856116100b3578063d59ba0df11610078578063d59ba0df146106d3578063dd62ed3e146106f2578063e2f4560514610736578063f2fde38b1461074b578063f5648a4f1461076a578063fe33b3021461077e575f80fd5b8063aceac85614610608578063b572fe3414610642578063ba3194ed14610661578063bfe1092814610695578063c0246668146106b4575f80fd5b806386a22eff1161010457806386a22eff146105675780638da5cb5b1461058657806393bbb51b146105a357806395d89b41146105b6578063a457c2d7146105ca578063a9059cbb146105e9575f80fd5b8063685fc568146102785780636ab86dc11461050c5780636ddd17131461051457806370a0823114610534578063715018a614610553575f80fd5b806323b872dd116101d65780634355855a1161019b5780634355855a1461044c578063452ed4f11461047a5780634e71d92d146104995780635031595f146104ad578063535a2437146104c25780635c5d3412146104ed575f80fd5b806323b872dd146103bf578063313ce567146103de57806336a1efe4146103f9578063395093511461040e57806342902a841461042d575f80fd5b80630bf1deff1161021c5780630bf1deff1461033a5780630ca61cb11461035957806318160ddd146103785780631ff8d5071461038c5780632307b441146103a0575f80fd5b806301339c21146102625780630644e7571461027857806306fdde031461029f5780630758d924146102c0578063095ea7b31461030b575f80fd5b3661025e57005b5f80fd5b34801561026d575f80fd5b506102766107ac565b005b348015610283575f80fd5b5061028c6107f1565b6040519081526020015b60405180910390f35b3480156102aa575f80fd5b506102b3610814565b604051610296919061249e565b3480156102cb575f80fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610296565b348015610316575f80fd5b5061032a610325366004612500565b6108a4565b6040519015158152602001610296565b348015610345575f80fd5b5061027661035436600461252a565b6108ba565b348015610364575f80fd5b5061027661037336600461259e565b61094a565b348015610383575f80fd5b5060025461028c565b348015610397575f80fd5b506102766109e0565b3480156103ab575f80fd5b506102766103ba366004612697565b610a2b565b3480156103ca575f80fd5b5061032a6103d9366004612753565b610b1d565b3480156103e9575f80fd5b5060405160098152602001610296565b348015610404575f80fd5b5061028c600a5481565b348015610419575f80fd5b5061032a610428366004612500565b610bcd565b348015610438575f80fd5b5061028c610447366004612791565b610c08565b348015610457575f80fd5b5061032a610466366004612791565b600f6020525f908152604090205460ff1681565b348015610485575f80fd5b506006546102f3906001600160a01b031681565b3480156104a4575f80fd5b50610276610c74565b3480156104b8575f80fd5b5061028c600d5481565b3480156104cd575f80fd5b5061028c6104dc366004612791565b60076020525f908152604090205481565b3480156104f8575f80fd5b506102766105073660046127b3565b610cc8565b610276610d7e565b34801561051f575f80fd5b50600b5461032a90600160a01b900460ff1681565b34801561053f575f80fd5b5061028c61054e366004612791565b610de4565b34801561055e575f80fd5b50610276610dfe565b348015610572575f80fd5b506102766105813660046127d3565b610e71565b348015610591575f80fd5b506005546001600160a01b03166102f3565b6102766105b13660046127b3565b610f6f565b3480156105c1575f80fd5b506102b36112df565b3480156105d5575f80fd5b5061032a6105e4366004612500565b6112ee565b3480156105f4575f80fd5b5061032a610603366004612500565b611386565b348015610613575f80fd5b50610627610622366004612791565b611392565b60408051938452602084019290925290820152606001610296565b34801561064d575f80fd5b5061027661065c3660046127d3565b6114fe565b34801561066c575f80fd5b50610675611651565b604080519485526020850193909352918301526060820152608001610296565b3480156106a0575f80fd5b50600b546102f3906001600160a01b031681565b3480156106bf575f80fd5b506102766106ce3660046127d3565b611833565b3480156106de575f80fd5b506102766106ed3660046127d3565b6118bb565b3480156106fd575f80fd5b5061028c61070c36600461280e565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610741575f80fd5b5061028c60095481565b348015610756575f80fd5b50610276610765366004612791565b611999565b348015610775575f80fd5b50610276611a83565b348015610789575f80fd5b5061032a610798366004612791565b60106020525f908152604090205460ff1681565b6005546001600160a01b031633146107df5760405162461bcd60e51b81526004016107d69061283a565b60405180910390fd5b600d54156107eb575f80fd5b43600d55565b5f6001600d54436108029190612883565b111561080e5750600590565b50600f90565b60606003805461082390612896565b80601f016020809104026020016040519081016040528092919081815260200182805461084f90612896565b801561089a5780601f106108715761010080835404028352916020019161089a565b820191905f5260205f20905b81548152906001019060200180831161087d57829003601f168201915b5050505050905090565b5f6108b0338484611aec565b5060015b92915050565b6005546001600160a01b031633146108e45760405162461bcd60e51b81526004016107d69061283a565b5f5b82811015610944578160075f868685818110610904576109046128ce565b90506020020160208101906109199190612791565b6001600160a01b0316815260208101919091526040015f20558061093c816128e2565b9150506108e6565b50505050565b6005546001600160a01b031633146109745760405162461bcd60e51b81526004016107d69061283a565b600b54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb1906064015f604051808303815f87803b1580156109c5575f80fd5b505af11580156109d7573d5f803e3d5ffd5b50505050505050565b6005546001600160a01b03163314610a0a5760405162461bcd60e51b81526004016107d69061283a565b600b805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6005546001600160a01b03163314610a555760405162461bcd60e51b81526004016107d69061283a565b8051825114610aa65760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016107d6565b5f5b8251811015610b1857610b0633848381518110610ac757610ac76128ce565b60200260200101516009600a610add91906129da565b858581518110610aef57610aef6128ce565b6020026020010151610b0191906129e8565b611c0f565b80610b10816128e2565b915050610aa8565b505050565b5f610b29848484611d62565b6001600160a01b0384165f9081526001602090815260408083203384529091529020545f198114610bc25782811015610bb55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016107d6565b610bc28533858403611aec565b506001949350505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916108b0918590610c039086906129ff565b611aec565b600b54604051630994fc3160e11b81526001600160a01b0383811660048301525f921690631329f86290602401602060405180830381865afa158015610c50573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b49190612a12565b600b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e906024015f604051808303815f87803b158015610cb6575f80fd5b505af1158015610944573d5f803e3d5ffd5b6005546001600160a01b03163314610cf25760405162461bcd60e51b81526004016107d69061283a565b6064610cfd60025490565b610d089060016129e8565b610d129190612a29565b811115610d735760405162461bcd60e51b815260206004820152602960248201527f4d617820737761702063616e6e6f7420626520686967686572207468616e2031604482015268129039bab838363c9760b91b60648201526084016107d6565b600991909155600a55565b600b5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015610dcb575f80fd5b505af1158015610ddd573d5f803e3d5ffd5b5050505050565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b03163314610e285760405162461bcd60e51b81526004016107d69061283a565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e9b5760405162461bcd60e51b81526004016107d69061283a565b6006546001600160a01b0390811690831603610f075760405162461bcd60e51b815260206004820152602560248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015264706169727360d81b60648201526084016107d6565b6001600160a01b0382165f818152601060209081526040808320805486151560ff199182168117909255600f9093528184208054909316600117909255519092917ff40a563af144a84735f7f6c7c3029794b0ac17713e5f048d3fd00ed85aa4ca7a91a35050565b6005546001600160a01b03163314610f995760405162461bcd60e51b81526004016107d69061283a565b600d5415610fa5575f80fd5b80341015610fea5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016107d6565b5f82116110325760405162461bcd60e51b8152602060048201526016602482015275139bc81314081d1bdad95b9cc81cdc1958da599a595960521b60448201526064016107d6565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561108f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b39190612a48565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111359190612a48565b6040516364e329cb60e11b81526001600160a01b038381166004830152306024830152919091169063c9c65396906044016020604051808303815f875af1158015611182573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a69190612a48565b600680546001600160a01b0319166001600160a01b0392831690811782555f908152601060209081526040808320805460ff19908116600190811790925594549095168352600f909152902080549091169091179055611217333061120d6009600a6129da565b610b0190876129e8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719833061125130610de4565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523360848201524260a482015260c40160606040518083038185885af11580156112b2573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906112d79190612a63565b505050505050565b60606004805461082390612896565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561136f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107d6565b61137c3385858403611aec565b5060019392505050565b5f6108b0338484611d62565b600b5460405163051fa63360e31b81526001600160a01b0383811660048301525f9283928392909116906328fd319890602401602060405180830381865afa1580156113e0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114049190612a12565b600b54604051633cbf8a6160e01b81526001600160a01b038781166004830152929550911690633cbf8a6190602401602060405180830381865afa15801561144e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114729190612a12565b600b546001600160a01b038681165f818152600c602052604090819020549051633f4f5dcf60e21b815260048101929092526024820152929450169063fd3d773c90604401602060405180830381865afa1580156114d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f69190612a12565b929491935050565b6005546001600160a01b031633146115285760405162461bcd60e51b81526004016107d69061283a565b6001600160a01b038216301480159061155957506001600160a01b0382165f9081526010602052604090205460ff16155b801561157057506001600160a01b03821661dead14155b611578575f80fd5b6001600160a01b0382165f908152600f60205260409020805460ff1916821580159190911790915561160157600b54604051630a5b654b60e11b81526001600160a01b0384811660048301525f6024830152909116906314b6ca96906044015b5f604051808303815f87803b1580156115ef575f80fd5b505af11580156112d7573d5f803e3d5ffd5b600b546001600160a01b03166314b6ca968361161c81610de4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016115d8565b5050565b5f805f80600b5f9054906101000a90046001600160a01b03166001600160a01b03166367ee5f096040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c99190612a12565b9350600b5f9054906101000a90046001600160a01b03166001600160a01b0316635695fa586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173f9190612a12565b9250600b5f9054906101000a90046001600160a01b03166001600160a01b031663a9e36be46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611791573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b59190612a12565b9150600b5f9054906101000a90046001600160a01b03166001600160a01b0316639df62df26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611807573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182b9190612a12565b905090919293565b6005546001600160a01b0316331461185d5760405162461bcd60e51b81526004016107d69061283a565b6001600160a01b0382165f818152600e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118e55760405162461bcd60e51b81526004016107d69061283a565b801561194657600b5460405163ce5494bb60e01b81526001600160a01b0384811660048301529091169063ce5494bb906024015f604051808303815f87803b15801561192f575f80fd5b505af1158015611941573d5f803e3d5ffd5b505050505b600b80546001600160a01b0319166001600160a01b0384169081179091556040805163204a7f0760e21b81529051638129fc1c916004808201925f9290919082900301818387803b1580156115ef575f80fd5b6005546001600160a01b031633146119c35760405162461bcd60e51b81526004016107d69061283a565b6001600160a01b038116611a285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611aad5760405162461bcd60e51b81526004016107d69061283a565b6040515f90339047908381818185875af1925050503d805f8114610944576040519150601f19603f3d011682016040523d82523d5f602084013e610944565b6001600160a01b038316611b4e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107d6565b6001600160a01b038216611baf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107d6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c355760405162461bcd60e51b81526004016107d690612a8e565b6001600160a01b038216611c5b5760405162461bcd60e51b81526004016107d690612ad3565b6001600160a01b0383165f9081526020819052604090205481811015611cd25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107d6565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611d089084906129ff565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d5491815260200190565b60405180910390a350505050565b6001600160a01b038316611d885760405162461bcd60e51b81526004016107d690612a8e565b6001600160a01b038216611dae5760405162461bcd60e51b81526004016107d690612ad3565b5f8111611dfd5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016107d6565b600d545f03611e84576005546001600160a01b0384811691161480611e2f57506005546001600160a01b038381169116145b611e745760405162461bcd60e51b815260206004820152601660248201527554726164696e67206e6f74207965742061637469766560501b60448201526064016107d6565b611e7f838383611c0f565b6120db565b6001600160a01b0383165f908152600e602052604090205460ff16158015611ec457506001600160a01b0382165f908152600e602052604090205460ff16155b156120d057600b54600160a01b900460ff168015611ee5575060085460ff16155b8015611f0857506001600160a01b0382165f9081526010602052604090205460ff165b15611f2e576008805460ff19166001179055611f238161220d565b6008805460ff191690555b5f80611f386107f1565b90505f611f436107f1565b6001600160a01b0386165f9081526010602052604090205490915060ff161561206b578115611f85576064611f7883866129e8565b611f829190612a29565b92505b5f611f8f87610de4565b6001600160a01b0388165f908152600c6020526040902054909150811115611fcc576001600160a01b0387165f908152600c602052604090208190555b6001600160a01b0387165f908152600f602052604090205460ff16612065576001600160a01b038781165f818152600f6020526040808220805460ff19166001179055600b549051630a5b654b60e11b815260048101939093526024830191909152909116906314b6ca96906044015f604051808303815f87803b158015612052575f80fd5b505af1925050508015612063575060015b505b506120af565b5f8111801561209157506001600160a01b0386165f9081526010602052604090205460ff165b156120af5760646120a282866129e8565b6120ac9190612a29565b92505b82156120c0576120c0863085611c0f565b6120ca8385612883565b93505050505b6120db838383611c0f565b6120e583836122bd565b6001600160a01b0383165f908152600f602052604090205460ff1661217557600b546001600160a01b03166314b6ca968461211f81610de4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015612162575f80fd5b505af1925050508015612173575060015b505b6001600160a01b0382165f908152600f602052604090205460ff16610b1857600b546001600160a01b03166314b6ca96836121af81610de4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156121f2575f80fd5b505af1925050508015612203575060015b15610b1857505050565b5f61221730610de4565b9050600954811015612227575050565b600a548111156122365750600a545b818111156122415750805b805f0361224c575050565b61225581612354565b478015610b1857600b5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b1580156122a9575f80fd5b505af1935050505080156122035750505050565b6001600160a01b0382165f9081526007602052604090205415806122ee57506005546001600160a01b038281169116145b61164d5760405162461bcd60e51b815260206004820152603160248201527f57616c6c65742070726f74656374696f6e20656e61626c65642c20706c656173604482015270194818dbdb9d1858dd081cdd5c1c1bdc9d607a1b60648201526084016107d6565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612387576123876128ce565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612403573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124279190612a48565b8160018151811061243a5761243a6128ce565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac947906115d89085905f90869030904290600401612b16565b5f6020808352835180828501525f5b818110156124c9578581018301518582016040015282016124ad565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146124fd575f80fd5b50565b5f8060408385031215612511575f80fd5b823561251c816124e9565b946020939093013593505050565b5f805f6040848603121561253c575f80fd5b833567ffffffffffffffff80821115612553575f80fd5b818601915086601f830112612566575f80fd5b813581811115612574575f80fd5b8760208260051b8501011115612588575f80fd5b6020928301989097509590910135949350505050565b5f805f606084860312156125b0575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612604576126046125c7565b604052919050565b5f67ffffffffffffffff821115612625576126256125c7565b5060051b60200190565b5f82601f83011261263e575f80fd5b8135602061265361264e8361260c565b6125db565b82815260059290921b84018101918181019086841115612671575f80fd5b8286015b8481101561268c5780358352918301918301612675565b509695505050505050565b5f80604083850312156126a8575f80fd5b823567ffffffffffffffff808211156126bf575f80fd5b818501915085601f8301126126d2575f80fd5b813560206126e261264e8361260c565b82815260059290921b84018101918181019089841115612700575f80fd5b948201945b83861015612727578535612718816124e9565b82529482019490820190612705565b9650508601359250508082111561273c575f80fd5b506127498582860161262f565b9150509250929050565b5f805f60608486031215612765575f80fd5b8335612770816124e9565b92506020840135612780816124e9565b929592945050506040919091013590565b5f602082840312156127a1575f80fd5b81356127ac816124e9565b9392505050565b5f80604083850312156127c4575f80fd5b50508035926020909101359150565b5f80604083850312156127e4575f80fd5b82356127ef816124e9565b915060208301358015158114612803575f80fd5b809150509250929050565b5f806040838503121561281f575f80fd5b823561282a816124e9565b91506020830135612803816124e9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108b4576108b461286f565b600181811c908216806128aa57607f821691505b6020821081036128c857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f600182016128f3576128f361286f565b5060010190565b600181815b8085111561293457815f190482111561291a5761291a61286f565b8085161561292757918102915b93841c93908002906128ff565b509250929050565b5f8261294a575060016108b4565b8161295657505f6108b4565b816001811461296c576002811461297657612992565b60019150506108b4565b60ff8411156129875761298761286f565b50506001821b6108b4565b5060208310610133831016604e8410600b84101617156129b5575081810a6108b4565b6129bf83836128fa565b805f19048211156129d2576129d261286f565b029392505050565b5f6127ac60ff84168361293c565b80820281158282048414176108b4576108b461286f565b808201808211156108b4576108b461286f565b5f60208284031215612a22575f80fd5b5051919050565b5f82612a4357634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612a58575f80fd5b81516127ac816124e9565b5f805f60608486031215612a75575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612b645784516001600160a01b031683529383019391830191600101612b3f565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e2f7057e3f64058f8596ebfe1140a242685aee605acd30954871f2a4463b93f764736f6c63430008150033

Deployed Bytecode

0x608060405260043610610257575f3560e01c8063685fc5681161013f578063aceac856116100b3578063d59ba0df11610078578063d59ba0df146106d3578063dd62ed3e146106f2578063e2f4560514610736578063f2fde38b1461074b578063f5648a4f1461076a578063fe33b3021461077e575f80fd5b8063aceac85614610608578063b572fe3414610642578063ba3194ed14610661578063bfe1092814610695578063c0246668146106b4575f80fd5b806386a22eff1161010457806386a22eff146105675780638da5cb5b1461058657806393bbb51b146105a357806395d89b41146105b6578063a457c2d7146105ca578063a9059cbb146105e9575f80fd5b8063685fc568146102785780636ab86dc11461050c5780636ddd17131461051457806370a0823114610534578063715018a614610553575f80fd5b806323b872dd116101d65780634355855a1161019b5780634355855a1461044c578063452ed4f11461047a5780634e71d92d146104995780635031595f146104ad578063535a2437146104c25780635c5d3412146104ed575f80fd5b806323b872dd146103bf578063313ce567146103de57806336a1efe4146103f9578063395093511461040e57806342902a841461042d575f80fd5b80630bf1deff1161021c5780630bf1deff1461033a5780630ca61cb11461035957806318160ddd146103785780631ff8d5071461038c5780632307b441146103a0575f80fd5b806301339c21146102625780630644e7571461027857806306fdde031461029f5780630758d924146102c0578063095ea7b31461030b575f80fd5b3661025e57005b5f80fd5b34801561026d575f80fd5b506102766107ac565b005b348015610283575f80fd5b5061028c6107f1565b6040519081526020015b60405180910390f35b3480156102aa575f80fd5b506102b3610814565b604051610296919061249e565b3480156102cb575f80fd5b506102f37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610296565b348015610316575f80fd5b5061032a610325366004612500565b6108a4565b6040519015158152602001610296565b348015610345575f80fd5b5061027661035436600461252a565b6108ba565b348015610364575f80fd5b5061027661037336600461259e565b61094a565b348015610383575f80fd5b5060025461028c565b348015610397575f80fd5b506102766109e0565b3480156103ab575f80fd5b506102766103ba366004612697565b610a2b565b3480156103ca575f80fd5b5061032a6103d9366004612753565b610b1d565b3480156103e9575f80fd5b5060405160098152602001610296565b348015610404575f80fd5b5061028c600a5481565b348015610419575f80fd5b5061032a610428366004612500565b610bcd565b348015610438575f80fd5b5061028c610447366004612791565b610c08565b348015610457575f80fd5b5061032a610466366004612791565b600f6020525f908152604090205460ff1681565b348015610485575f80fd5b506006546102f3906001600160a01b031681565b3480156104a4575f80fd5b50610276610c74565b3480156104b8575f80fd5b5061028c600d5481565b3480156104cd575f80fd5b5061028c6104dc366004612791565b60076020525f908152604090205481565b3480156104f8575f80fd5b506102766105073660046127b3565b610cc8565b610276610d7e565b34801561051f575f80fd5b50600b5461032a90600160a01b900460ff1681565b34801561053f575f80fd5b5061028c61054e366004612791565b610de4565b34801561055e575f80fd5b50610276610dfe565b348015610572575f80fd5b506102766105813660046127d3565b610e71565b348015610591575f80fd5b506005546001600160a01b03166102f3565b6102766105b13660046127b3565b610f6f565b3480156105c1575f80fd5b506102b36112df565b3480156105d5575f80fd5b5061032a6105e4366004612500565b6112ee565b3480156105f4575f80fd5b5061032a610603366004612500565b611386565b348015610613575f80fd5b50610627610622366004612791565b611392565b60408051938452602084019290925290820152606001610296565b34801561064d575f80fd5b5061027661065c3660046127d3565b6114fe565b34801561066c575f80fd5b50610675611651565b604080519485526020850193909352918301526060820152608001610296565b3480156106a0575f80fd5b50600b546102f3906001600160a01b031681565b3480156106bf575f80fd5b506102766106ce3660046127d3565b611833565b3480156106de575f80fd5b506102766106ed3660046127d3565b6118bb565b3480156106fd575f80fd5b5061028c61070c36600461280e565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610741575f80fd5b5061028c60095481565b348015610756575f80fd5b50610276610765366004612791565b611999565b348015610775575f80fd5b50610276611a83565b348015610789575f80fd5b5061032a610798366004612791565b60106020525f908152604090205460ff1681565b6005546001600160a01b031633146107df5760405162461bcd60e51b81526004016107d69061283a565b60405180910390fd5b600d54156107eb575f80fd5b43600d55565b5f6001600d54436108029190612883565b111561080e5750600590565b50600f90565b60606003805461082390612896565b80601f016020809104026020016040519081016040528092919081815260200182805461084f90612896565b801561089a5780601f106108715761010080835404028352916020019161089a565b820191905f5260205f20905b81548152906001019060200180831161087d57829003601f168201915b5050505050905090565b5f6108b0338484611aec565b5060015b92915050565b6005546001600160a01b031633146108e45760405162461bcd60e51b81526004016107d69061283a565b5f5b82811015610944578160075f868685818110610904576109046128ce565b90506020020160208101906109199190612791565b6001600160a01b0316815260208101919091526040015f20558061093c816128e2565b9150506108e6565b50505050565b6005546001600160a01b031633146109745760405162461bcd60e51b81526004016107d69061283a565b600b54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb1906064015f604051808303815f87803b1580156109c5575f80fd5b505af11580156109d7573d5f803e3d5ffd5b50505050505050565b6005546001600160a01b03163314610a0a5760405162461bcd60e51b81526004016107d69061283a565b600b805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6005546001600160a01b03163314610a555760405162461bcd60e51b81526004016107d69061283a565b8051825114610aa65760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016107d6565b5f5b8251811015610b1857610b0633848381518110610ac757610ac76128ce565b60200260200101516009600a610add91906129da565b858581518110610aef57610aef6128ce565b6020026020010151610b0191906129e8565b611c0f565b80610b10816128e2565b915050610aa8565b505050565b5f610b29848484611d62565b6001600160a01b0384165f9081526001602090815260408083203384529091529020545f198114610bc25782811015610bb55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016107d6565b610bc28533858403611aec565b506001949350505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916108b0918590610c039086906129ff565b611aec565b600b54604051630994fc3160e11b81526001600160a01b0383811660048301525f921690631329f86290602401602060405180830381865afa158015610c50573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b49190612a12565b600b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e906024015f604051808303815f87803b158015610cb6575f80fd5b505af1158015610944573d5f803e3d5ffd5b6005546001600160a01b03163314610cf25760405162461bcd60e51b81526004016107d69061283a565b6064610cfd60025490565b610d089060016129e8565b610d129190612a29565b811115610d735760405162461bcd60e51b815260206004820152602960248201527f4d617820737761702063616e6e6f7420626520686967686572207468616e2031604482015268129039bab838363c9760b91b60648201526084016107d6565b600991909155600a55565b600b5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015610dcb575f80fd5b505af1158015610ddd573d5f803e3d5ffd5b5050505050565b6001600160a01b03165f9081526020819052604090205490565b6005546001600160a01b03163314610e285760405162461bcd60e51b81526004016107d69061283a565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e9b5760405162461bcd60e51b81526004016107d69061283a565b6006546001600160a01b0390811690831603610f075760405162461bcd60e51b815260206004820152602560248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015264706169727360d81b60648201526084016107d6565b6001600160a01b0382165f818152601060209081526040808320805486151560ff199182168117909255600f9093528184208054909316600117909255519092917ff40a563af144a84735f7f6c7c3029794b0ac17713e5f048d3fd00ed85aa4ca7a91a35050565b6005546001600160a01b03163314610f995760405162461bcd60e51b81526004016107d69061283a565b600d5415610fa5575f80fd5b80341015610fea5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016107d6565b5f82116110325760405162461bcd60e51b8152602060048201526016602482015275139bc81314081d1bdad95b9cc81cdc1958da599a595960521b60448201526064016107d6565b5f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561108f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b39190612a48565b90507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611111573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111359190612a48565b6040516364e329cb60e11b81526001600160a01b038381166004830152306024830152919091169063c9c65396906044016020604051808303815f875af1158015611182573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a69190612a48565b600680546001600160a01b0319166001600160a01b0392831690811782555f908152601060209081526040808320805460ff19908116600190811790925594549095168352600f909152902080549091169091179055611217333061120d6009600a6129da565b610b0190876129e8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719833061125130610de4565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523360848201524260a482015260c40160606040518083038185885af11580156112b2573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906112d79190612a63565b505050505050565b60606004805461082390612896565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561136f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107d6565b61137c3385858403611aec565b5060019392505050565b5f6108b0338484611d62565b600b5460405163051fa63360e31b81526001600160a01b0383811660048301525f9283928392909116906328fd319890602401602060405180830381865afa1580156113e0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114049190612a12565b600b54604051633cbf8a6160e01b81526001600160a01b038781166004830152929550911690633cbf8a6190602401602060405180830381865afa15801561144e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114729190612a12565b600b546001600160a01b038681165f818152600c602052604090819020549051633f4f5dcf60e21b815260048101929092526024820152929450169063fd3d773c90604401602060405180830381865afa1580156114d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f69190612a12565b929491935050565b6005546001600160a01b031633146115285760405162461bcd60e51b81526004016107d69061283a565b6001600160a01b038216301480159061155957506001600160a01b0382165f9081526010602052604090205460ff16155b801561157057506001600160a01b03821661dead14155b611578575f80fd5b6001600160a01b0382165f908152600f60205260409020805460ff1916821580159190911790915561160157600b54604051630a5b654b60e11b81526001600160a01b0384811660048301525f6024830152909116906314b6ca96906044015b5f604051808303815f87803b1580156115ef575f80fd5b505af11580156112d7573d5f803e3d5ffd5b600b546001600160a01b03166314b6ca968361161c81610de4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016115d8565b5050565b5f805f80600b5f9054906101000a90046001600160a01b03166001600160a01b03166367ee5f096040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c99190612a12565b9350600b5f9054906101000a90046001600160a01b03166001600160a01b0316635695fa586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173f9190612a12565b9250600b5f9054906101000a90046001600160a01b03166001600160a01b031663a9e36be46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611791573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b59190612a12565b9150600b5f9054906101000a90046001600160a01b03166001600160a01b0316639df62df26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611807573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182b9190612a12565b905090919293565b6005546001600160a01b0316331461185d5760405162461bcd60e51b81526004016107d69061283a565b6001600160a01b0382165f818152600e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118e55760405162461bcd60e51b81526004016107d69061283a565b801561194657600b5460405163ce5494bb60e01b81526001600160a01b0384811660048301529091169063ce5494bb906024015f604051808303815f87803b15801561192f575f80fd5b505af1158015611941573d5f803e3d5ffd5b505050505b600b80546001600160a01b0319166001600160a01b0384169081179091556040805163204a7f0760e21b81529051638129fc1c916004808201925f9290919082900301818387803b1580156115ef575f80fd5b6005546001600160a01b031633146119c35760405162461bcd60e51b81526004016107d69061283a565b6001600160a01b038116611a285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107d6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611aad5760405162461bcd60e51b81526004016107d69061283a565b6040515f90339047908381818185875af1925050503d805f8114610944576040519150601f19603f3d011682016040523d82523d5f602084013e610944565b6001600160a01b038316611b4e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107d6565b6001600160a01b038216611baf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107d6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c355760405162461bcd60e51b81526004016107d690612a8e565b6001600160a01b038216611c5b5760405162461bcd60e51b81526004016107d690612ad3565b6001600160a01b0383165f9081526020819052604090205481811015611cd25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107d6565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611d089084906129ff565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d5491815260200190565b60405180910390a350505050565b6001600160a01b038316611d885760405162461bcd60e51b81526004016107d690612a8e565b6001600160a01b038216611dae5760405162461bcd60e51b81526004016107d690612ad3565b5f8111611dfd5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016107d6565b600d545f03611e84576005546001600160a01b0384811691161480611e2f57506005546001600160a01b038381169116145b611e745760405162461bcd60e51b815260206004820152601660248201527554726164696e67206e6f74207965742061637469766560501b60448201526064016107d6565b611e7f838383611c0f565b6120db565b6001600160a01b0383165f908152600e602052604090205460ff16158015611ec457506001600160a01b0382165f908152600e602052604090205460ff16155b156120d057600b54600160a01b900460ff168015611ee5575060085460ff16155b8015611f0857506001600160a01b0382165f9081526010602052604090205460ff165b15611f2e576008805460ff19166001179055611f238161220d565b6008805460ff191690555b5f80611f386107f1565b90505f611f436107f1565b6001600160a01b0386165f9081526010602052604090205490915060ff161561206b578115611f85576064611f7883866129e8565b611f829190612a29565b92505b5f611f8f87610de4565b6001600160a01b0388165f908152600c6020526040902054909150811115611fcc576001600160a01b0387165f908152600c602052604090208190555b6001600160a01b0387165f908152600f602052604090205460ff16612065576001600160a01b038781165f818152600f6020526040808220805460ff19166001179055600b549051630a5b654b60e11b815260048101939093526024830191909152909116906314b6ca96906044015f604051808303815f87803b158015612052575f80fd5b505af1925050508015612063575060015b505b506120af565b5f8111801561209157506001600160a01b0386165f9081526010602052604090205460ff165b156120af5760646120a282866129e8565b6120ac9190612a29565b92505b82156120c0576120c0863085611c0f565b6120ca8385612883565b93505050505b6120db838383611c0f565b6120e583836122bd565b6001600160a01b0383165f908152600f602052604090205460ff1661217557600b546001600160a01b03166314b6ca968461211f81610de4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015612162575f80fd5b505af1925050508015612173575060015b505b6001600160a01b0382165f908152600f602052604090205460ff16610b1857600b546001600160a01b03166314b6ca96836121af81610de4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156121f2575f80fd5b505af1925050508015612203575060015b15610b1857505050565b5f61221730610de4565b9050600954811015612227575050565b600a548111156122365750600a545b818111156122415750805b805f0361224c575050565b61225581612354565b478015610b1857600b5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b1580156122a9575f80fd5b505af1935050505080156122035750505050565b6001600160a01b0382165f9081526007602052604090205415806122ee57506005546001600160a01b038281169116145b61164d5760405162461bcd60e51b815260206004820152603160248201527f57616c6c65742070726f74656374696f6e20656e61626c65642c20706c656173604482015270194818dbdb9d1858dd081cdd5c1c1bdc9d607a1b60648201526084016107d6565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612387576123876128ce565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612403573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124279190612a48565b8160018151811061243a5761243a6128ce565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac947906115d89085905f90869030904290600401612b16565b5f6020808352835180828501525f5b818110156124c9578581018301518582016040015282016124ad565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146124fd575f80fd5b50565b5f8060408385031215612511575f80fd5b823561251c816124e9565b946020939093013593505050565b5f805f6040848603121561253c575f80fd5b833567ffffffffffffffff80821115612553575f80fd5b818601915086601f830112612566575f80fd5b813581811115612574575f80fd5b8760208260051b8501011115612588575f80fd5b6020928301989097509590910135949350505050565b5f805f606084860312156125b0575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612604576126046125c7565b604052919050565b5f67ffffffffffffffff821115612625576126256125c7565b5060051b60200190565b5f82601f83011261263e575f80fd5b8135602061265361264e8361260c565b6125db565b82815260059290921b84018101918181019086841115612671575f80fd5b8286015b8481101561268c5780358352918301918301612675565b509695505050505050565b5f80604083850312156126a8575f80fd5b823567ffffffffffffffff808211156126bf575f80fd5b818501915085601f8301126126d2575f80fd5b813560206126e261264e8361260c565b82815260059290921b84018101918181019089841115612700575f80fd5b948201945b83861015612727578535612718816124e9565b82529482019490820190612705565b9650508601359250508082111561273c575f80fd5b506127498582860161262f565b9150509250929050565b5f805f60608486031215612765575f80fd5b8335612770816124e9565b92506020840135612780816124e9565b929592945050506040919091013590565b5f602082840312156127a1575f80fd5b81356127ac816124e9565b9392505050565b5f80604083850312156127c4575f80fd5b50508035926020909101359150565b5f80604083850312156127e4575f80fd5b82356127ef816124e9565b915060208301358015158114612803575f80fd5b809150509250929050565b5f806040838503121561281f575f80fd5b823561282a816124e9565b91506020830135612803816124e9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108b4576108b461286f565b600181811c908216806128aa57607f821691505b6020821081036128c857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f600182016128f3576128f361286f565b5060010190565b600181815b8085111561293457815f190482111561291a5761291a61286f565b8085161561292757918102915b93841c93908002906128ff565b509250929050565b5f8261294a575060016108b4565b8161295657505f6108b4565b816001811461296c576002811461297657612992565b60019150506108b4565b60ff8411156129875761298761286f565b50506001821b6108b4565b5060208310610133831016604e8410600b84101617156129b5575081810a6108b4565b6129bf83836128fa565b805f19048211156129d2576129d261286f565b029392505050565b5f6127ac60ff84168361293c565b80820281158282048414176108b4576108b461286f565b808201808211156108b4576108b461286f565b5f60208284031215612a22575f80fd5b5051919050565b5f82612a4357634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612a58575f80fd5b81516127ac816124e9565b5f805f60608486031215612a75575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612b645784516001600160a01b031683529383019391830191600101612b3f565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e2f7057e3f64058f8596ebfe1140a242685aee605acd30954871f2a4463b93f764736f6c63430008150033

Deployed Bytecode Sourcemap

11890:9712:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19098:130;;;;;;;;;;;;;:::i;:::-;;14548:140;;;;;;;;;;;;;:::i;:::-;;;160:25:1;;;148:2;133:18;14548:140:0;;;;;;;;4181:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11933:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;931:32:1;;;913:51;;901:2;886:18;11933:37:0;749:221:1;5236:210:0;;;;;;;;;;-1:-1:-1;5236:210:0;;;;;:::i;:::-;;:::i;:::-;;;1596:14:1;;1589:22;1571:41;;1559:2;1544:18;5236:210:0;1431:187:1;21172:224:0;;;;;;;;;;-1:-1:-1;21172:224:0;;;;;:::i;:::-;;:::i;19497:216::-;;;;;;;;;;-1:-1:-1;19497:216:0;;;;;:::i;:::-;;:::i;4502:108::-;;;;;;;;;;-1:-1:-1;4590:12:0;;4502:108;;13984:86;;;;;;;;;;;;;:::i;20772:392::-;;;;;;;;;;-1:-1:-1;20772:392:0;;;;;:::i;:::-;;:::i;5454:620::-;;;;;;;;;;-1:-1:-1;5454:620:0;;;;;:::i;:::-;;:::i;13615:84::-;;;;;;;;;;-1:-1:-1;13615:84:0;;13690:1;5728:36:1;;5716:2;5701:18;13615:84:0;5586:184:1;12228:28:0;;;;;;;;;;;;;;;;6082:297;;;;;;;;;;-1:-1:-1;6082:297:0;;;;;:::i;:::-;;:::i;20558:124::-;;;;;;;;;;-1:-1:-1;20558:124:0;;;;;:::i;:::-;;:::i;12496:49::-;;;;;;;;;;-1:-1:-1;12496:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11977:21;;;;;;;;;;-1:-1:-1;11977:21:0;;;;-1:-1:-1;;;;;11977:21:0;;;20688:76;;;;;;;;;;;;;:::i;12396:32::-;;;;;;;;;;;;;;;;12007:51;;;;;;;;;;-1:-1:-1;12007:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;13707:269;;;;;;;;;;-1:-1:-1;13707:269:0;;;;;:::i;:::-;;:::i;19721:100::-;;;:::i;12313:30::-;;;;;;;;;;-1:-1:-1;12313:30:0;;;;-1:-1:-1;;;12313:30:0;;;;;;4618:177;;;;;;;;;;-1:-1:-1;4618:177:0;;;;;:::i;:::-;;:::i;8682:148::-;;;;;;;;;;;;;:::i;14078:313::-;;;;;;;;;;-1:-1:-1;14078:313:0;;;;;:::i;:::-;;:::i;8468:79::-;;;;;;;;;;-1:-1:-1;8533:6:0;;-1:-1:-1;;;;;8533:6:0;8468:79;;18448:642;;;;;;:::i;:::-;;:::i;4289:104::-;;;;;;;;;;;;;:::i;6387:482::-;;;;;;;;;;-1:-1:-1;6387:482:0;;;;;:::i;:::-;;:::i;4803:216::-;;;;;;;;;;-1:-1:-1;4803:216:0;;;;;:::i;:::-;;:::i;20240:312::-;;;;;;;;;;-1:-1:-1;20240:312:0;;;;;:::i;:::-;;:::i;:::-;;;;7111:25:1;;;7167:2;7152:18;;7145:34;;;;7195:18;;;7188:34;7099:2;7084:18;20240:312:0;6909:319:1;14886:373:0;;;;;;;;;;-1:-1:-1;14886:373:0;;;;;:::i;:::-;;:::i;19829:399::-;;;;;;;;;;;;;:::i;:::-;;;;7464:25:1;;;7520:2;7505:18;;7498:34;;;;7548:18;;;7541:34;7606:2;7591:18;;7584:34;7451:3;7436:19;19829:399:0;7233:391:1;12265:39:0;;;;;;;;;;-1:-1:-1;12265:39:0;;;;-1:-1:-1;;;;;12265:39:0;;;14696:182;;;;;;;;;;-1:-1:-1;14696:182:0;;;;;:::i;:::-;;:::i;19236:253::-;;;;;;;;;;-1:-1:-1;19236:253:0;;;;;:::i;:::-;;:::i;5027:201::-;;;;;;;;;;-1:-1:-1;5027:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5193:18:0;;;5161:7;5193:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5027:201;12188:33;;;;;;;;;;;;;;;;8838:281;;;;;;;;;;-1:-1:-1;8838:281:0;;;;;:::i;:::-;;:::i;18279:161::-;;;;;;;;;;;;;:::i;12552:37::-;;;;;;;;;;-1:-1:-1;12552:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19098:130;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;;;;;;;;;19154:17:::1;::::0;:22;19146:31:::1;;;::::0;::::1;;19208:12;19188:17;:32:::0;19098:130::o;14548:140::-;14591:7;14649:1;14629:17;;14614:12;:32;;;;:::i;:::-;:36;14611:49;;;-1:-1:-1;14659:1:0;;14548:140::o;14611:49::-;-1:-1:-1;14678:2:0;;14548:140::o;4181:100::-;4235:13;4268:5;4261:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4181:100;:::o;5236:210::-;5355:4;5377:39;315:10;5400:7;5409:6;5377:8;:39::i;:::-;-1:-1:-1;5434:4:0;5236:210;;;;;:::o;21172:224::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;21281:9:::1;21277:112;21296:19:::0;;::::1;21277:112;;;21369:8;21337:16;:29;21354:8;;21363:1;21354:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21337:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21337:29:0;:40;21317:3;::::1;::::0;::::1;:::i;:::-;;;;21277:112;;;;21172:224:::0;;;:::o;19497:216::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;19627:11:::1;::::0;:78:::1;::::0;-1:-1:-1;;;19627:78:0;;::::1;::::0;::::1;7111:25:1::0;;;7152:18;;;7145:34;;;7195:18;;;7188:34;;;-1:-1:-1;;;;;19627:11:0;;::::1;::::0;:35:::1;::::0;7084:18:1;;19627:78:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19497:216:::0;;;:::o;13984:86::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;14051:11:::1;::::0;;-1:-1:-1;;;;14036:26:0;::::1;-1:-1:-1::0;;;14051:11:0;;;::::1;;;14050:12;14036:26:::0;;::::1;;::::0;;13984:86::o;20772:392::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;20939:15:::1;:22;20921:7;:14;:40;20913:83;;;::::0;-1:-1:-1;;;20913:83:0;;9743:2:1;20913:83:0::1;::::0;::::1;9725:21:1::0;9782:2;9762:18;;;9755:30;9821:32;9801:18;;;9794:60;9871:18;;20913:83:0::1;9541:354:1::0;20913:83:0::1;21014:9;21009:148;21033:7;:14;21029:1;:18;21009:148;;;21069:76;21085:10;21097:7;21105:1;21097:10;;;;;;;;:::i;:::-;;;;;;;12094:1;12136:2;:15;;;;:::i;:::-;21109;21125:1;21109:18;;;;;;;;:::i;:::-;;;;;;;:35;;;;:::i;:::-;21069:15;:76::i;:::-;21049:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21009:148;;;;20772:392:::0;;:::o;5454:620::-;5594:4;5611:36;5621:6;5629:9;5640:6;5611:9;:36::i;:::-;-1:-1:-1;;;;;5687:19:0;;5660:24;5687:19;;;:11;:19;;;;;;;;315:10;5687:33;;;;;;;;-1:-1:-1;;5734:37:0;;5731:314;;5835:6;5815:16;:26;;5789:128;;;;-1:-1:-1;;;5789:128:0;;11658:2:1;5789:128:0;;;11640:21:1;11697:2;11677:18;;;11670:30;11736:34;11716:18;;;11709:62;-1:-1:-1;;;11787:18:1;;;11780:38;11835:19;;5789:128:0;11456:404:1;5789:128:0;5961:57;5970:6;315:10;6011:6;5992:16;:25;5961:8;:57::i;:::-;-1:-1:-1;6062:4:0;;5454:620;-1:-1:-1;;;;5454:620:0:o;6082:297::-;315:10;6197:4;6291:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6291:34:0;;;;;;;;;;6197:4;;6219:130;;6269:7;;6291:47;;6328:10;;6291:47;:::i;:::-;6219:8;:130::i;20558:124::-;20645:11;;:32;;-1:-1:-1;;;20645:32:0;;-1:-1:-1;;;;;931:32:1;;;20645::0;;;913:51:1;20621:7:0;;20645:11;;:24;;886:18:1;;20645:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20688:76::-;20722:11;;:37;;-1:-1:-1;;;20722:37:0;;20748:10;20722:37;;;913:51:1;-1:-1:-1;;;;;20722:11:0;;;;:25;;886:18:1;;20722:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13707:269;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;13843:3:::1;13822:13;4590:12:::0;;;4502:108;13822:13:::1;:17;::::0;13838:1:::1;13822:17;:::i;:::-;13821:25;;;;:::i;:::-;13808:9;:38;;13800:92;;;::::0;-1:-1:-1;;;13800:92:0;;12608:2:1;13800:92:0::1;::::0;::::1;12590:21:1::0;12647:2;12627:18;;;12620:30;12686:34;12666:18;;;12659:62;-1:-1:-1;;;12737:18:1;;;12730:39;12786:19;;13800:92:0::1;12406:405:1::0;13800:92:0::1;13903:18;:29:::0;;;;13943:13:::1;:25:::0;13707:269::o;19721:100::-;19774:11;;;;;;;;;-1:-1:-1;;;;;19774:11:0;-1:-1:-1;;;;;19774:19:0;;19801:9;19774:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19721:100::o;4618:177::-;-1:-1:-1;;;;;4769:18:0;4737:7;4769:18;;;;;;;;;;;;4618:177::o;8682:148::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;8773:6:::1;::::0;8752:40:::1;::::0;8789:1:::1;::::0;-1:-1:-1;;;;;8773:6:0::1;::::0;8752:40:::1;::::0;8789:1;;8752:40:::1;8803:6;:19:::0;;-1:-1:-1;;;;;;8803:19:0::1;::::0;;8682:148::o;14078:313::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;14204:6:::1;::::0;-1:-1:-1;;;;;14204:6:0;;::::1;14196:14:::0;;::::1;::::0;14174:101:::1;;;::::0;-1:-1:-1;;;14174:101:0;;13018:2:1;14174:101:0::1;::::0;::::1;13000:21:1::0;13057:2;13037:18;;;13030:30;13096:34;13076:18;;;13069:62;-1:-1:-1;;;13147:18:1;;;13140:35;13192:19;;14174:101:0::1;12816:401:1::0;14174:101:0::1;-1:-1:-1::0;;;;;14288:11:0;::::1;;::::0;;;:5:::1;:11;::::0;;;;;;;:19;;;::::1;;-1:-1:-1::0;;14288:19:0;;::::1;::::0;::::1;::::0;;;14318:16:::1;:22:::0;;;;;;:29;;;;::::1;14288:19:::0;14318:29:::1;::::0;;;14363:20;14288:19;;:11;14363:20:::1;::::0;::::1;14078:313:::0;;:::o;18448:642::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;18541:17:::1;::::0;:22;18533:31:::1;;;::::0;::::1;;18596:4;18583:9;:17;;18575:48;;;::::0;-1:-1:-1;;;18575:48:0;;13424:2:1;18575:48:0::1;::::0;::::1;13406:21:1::0;13463:2;13443:18;;;13436:30;-1:-1:-1;;;13482:18:1;;;13475:48;13540:18;;18575:48:0::1;13222:342:1::0;18575:48:0::1;18651:1;18642:6;:10;18634:45;;;::::0;-1:-1:-1;;;18634:45:0;;13771:2:1;18634:45:0::1;::::0;::::1;13753:21:1::0;13810:2;13790:18;;;13783:30;-1:-1:-1;;;13829:18:1;;;13822:52;13891:18;;18634:45:0::1;13569:346:1::0;18634:45:0::1;18692:11;18706:9;-1:-1:-1::0;;;;;18706:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18692:30;;18756:9;-1:-1:-1::0;;;;;18756:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18744:63;::::0;-1:-1:-1;;;18744:63:0;;-1:-1:-1;;;;;14406:15:1;;;18744:63:0::1;::::0;::::1;14388:34:1::0;18801:4:0::1;14438:18:1::0;;;14431:43;18744::0;;;::::1;::::0;::::1;::::0;14323:18:1;;18744:63:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18735:6;:72:::0;;-1:-1:-1;;;;;;18735:72:0::1;-1:-1:-1::0;;;;;18735:72:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;18818:13:0;;;:5:::1;:13;::::0;;;;;;;:20;;-1:-1:-1;;18818:20:0;;::::1;-1:-1:-1::0;18818:20:0;;::::1;::::0;;;18866:6;;;;::::1;18849:24:::0;;:16:::1;:24:::0;;;;;:31;;;;::::1;::::0;;::::1;::::0;;18893:67:::1;18909:10;18929:4;12136:15;12094:1;12136:2;:15;:::i;:::-;18936:23;::::0;:6;:23:::1;:::i;18893:67::-;18973:9;-1:-1:-1::0;;;;;18973:25:0::1;;19006:4;19020;19026:24;19044:4;19026:9;:24::i;:::-;18973:109;::::0;-1:-1:-1;;;;;;18973:109:0::1;::::0;;;;;;-1:-1:-1;;;;;14844:15:1;;;18973:109:0::1;::::0;::::1;14826:34:1::0;14876:18;;;14869:34;19051:1:0::1;14919:18:1::0;;;14912:34;;;14962:18;;;14955:34;19055:10:0::1;15005:19:1::0;;;14998:44;19066:15:0::1;15058:19:1::0;;;15051:35;14760:19;;18973:109:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18522:568;18448:642:::0;;:::o;4289:104::-;4345:13;4378:7;4371:14;;;;;:::i;6387:482::-;315:10;6507:4;6556:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6556:34:0;;;;;;;;;;6623:35;;;;6601:122;;;;-1:-1:-1;;;6601:122:0;;15610:2:1;6601:122:0;;;15592:21:1;15649:2;15629:18;;;15622:30;15688:34;15668:18;;;15661:62;-1:-1:-1;;;15739:18:1;;;15732:35;15784:19;;6601:122:0;15408:401:1;6601:122:0;6759:67;315:10;6782:7;6810:15;6791:16;:34;6759:8;:67::i;:::-;-1:-1:-1;6857:4:0;;6387:482;-1:-1:-1;;;6387:482:0:o;4803:216::-;4925:4;4947:42;315:10;4971:9;4982:6;4947:9;:42::i;20240:312::-;20378:11;;:37;;-1:-1:-1;;;20378:37:0;;-1:-1:-1;;;;;931:32:1;;;20378:37:0;;;913:51:1;20301:14:0;;;;;;20378:11;;;;:29;;886:18:1;;20378:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20439:11;;:36;;-1:-1:-1;;;20439:36:0;;-1:-1:-1;;;;;931:32:1;;;20439:36:0;;;913:51:1;20369:46:0;;-1:-1:-1;20439:11:0;;;:28;;886:18:1;;20439:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20497:11;;-1:-1:-1;;;;;20532:14:0;;;20497:11;20532:14;;;:6;:14;;;;;;;;20497:50;;-1:-1:-1;;;20497:50:0;;;;;15988:51:1;;;;16055:18;;;16048:34;20423:52:0;;-1:-1:-1;20497:11:0;;:26;;15961:18:1;;20497:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20240:312;;;;-1:-1:-1;;20240:312:0:o;14886:373::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14980:23:0;::::1;14998:4;14980:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;;;;;;15008:13:0;::::1;;::::0;;;:5:::1;:13;::::0;;;;;::::1;;15007:14;14980:41;:70;;;;-1:-1:-1::0;;;;;;15025:25:0;::::1;15043:6;15025:25;;14980:70;14972:79;;;::::0;::::1;;-1:-1:-1::0;;;;;15062:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;15062:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;15106:146:::1;;15131:11;::::0;:31:::1;::::0;-1:-1:-1;;;15131:31:0;;-1:-1:-1;;;;;16006:32:1;;;15131:31:0::1;::::0;::::1;15988:51:1::0;15131:11:0::1;16055:18:1::0;;;16048:34;15131:11:0;;::::1;::::0;:20:::1;::::0;15961:18:1;;15131:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;15106:146;15193:11;::::0;-1:-1:-1;;;;;15193:11:0::1;:20;15214:6:::0;15222:17:::1;15214:6:::0;15222:9:::1;:17::i;:::-;15193:47;::::0;-1:-1:-1;;;;;;15193:47:0::1;::::0;;;;;;-1:-1:-1;;;;;16006:32:1;;;15193:47:0::1;::::0;::::1;15988:51:1::0;16055:18;;;16048:34;15961:18;;15193:47:0::1;15814:274:1::0;15106:146:0::1;14886:373:::0;;:::o;19829:399::-;19881:20;19903:24;19929:25;19956:21;20005:11;;;;;;;;;-1:-1:-1;;;;;20005:11:0;-1:-1:-1;;;;;20005:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19990:46;;20066:11;;;;;;;;;-1:-1:-1;;;;;20066:11:0;-1:-1:-1;;;;;20066:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20047:52;;20130:11;;;;;;;;;-1:-1:-1;;;;;20130:11:0;-1:-1:-1;;;;;20130:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20110:52;;20189:11;;;;;;;;;-1:-1:-1;;;;;20189:11:0;-1:-1:-1;;;;;20189:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20173:47;;19829:399;;;;:::o;14696:182::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14781:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;14781:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14836:34;;1571:41:1;;;14836:34:0::1;::::0;1544:18:1;14836:34:0::1;;;;;;;14696:182:::0;;:::o;19236:253::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;19329:7:::1;19326:59;;;19352:11;::::0;:33:::1;::::0;-1:-1:-1;;;19352:33:0;;-1:-1:-1;;;;;931:32:1;;;19352:33:0::1;::::0;::::1;913:51:1::0;19352:11:0;;::::1;::::0;:19:::1;::::0;886:18:1;;19352:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19326:59;19398:11;:48:::0;;-1:-1:-1;;;;;;19398:48:0::1;-1:-1:-1::0;;;;;19398:48:0;::::1;::::0;;::::1;::::0;;;19457:24:::1;::::0;;-1:-1:-1;;;19457:24:0;;;;:22:::1;::::0;:24:::1;::::0;;::::1;::::0;-1:-1:-1;;19457:24:0;;;;;;;;-1:-1:-1;19398:48:0;19457:24;::::1;;::::0;::::1;;;;::::0;::::1;8838:281:::0;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8941:22:0;::::1;8919:110;;;::::0;-1:-1:-1;;;8919:110:0;;16582:2:1;8919:110:0::1;::::0;::::1;16564:21:1::0;16621:2;16601:18;;;16594:30;16660:34;16640:18;;;16633:62;-1:-1:-1;;;16711:18:1;;;16704:36;16757:19;;8919:110:0::1;16380:402:1::0;8919:110:0::1;9066:6;::::0;9045:38:::1;::::0;-1:-1:-1;;;;;9045:38:0;;::::1;::::0;9066:6:::1;::::0;9045:38:::1;::::0;9066:6:::1;::::0;9045:38:::1;9094:6;:17:::0;;-1:-1:-1;;;;;;9094:17:0::1;-1:-1:-1::0;;;;;9094:17:0;;;::::1;::::0;;;::::1;::::0;;8838:281::o;18279:161::-;8595:6;;-1:-1:-1;;;;;8595:6:0;315:10;8595:22;8587:67;;;;-1:-1:-1;;;8587:67:0;;;;;;;:::i;:::-;18374:58:::1;::::0;18337:12:::1;::::0;18382:10:::1;::::0;18406:21:::1;::::0;18337:12;18374:58;18337:12;18374:58;18406:21;18382:10;18374:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7536:380:::0;-1:-1:-1;;;;;7672:19:0;;7664:68;;;;-1:-1:-1;;;7664:68:0;;17199:2:1;7664:68:0;;;17181:21:1;17238:2;17218:18;;;17211:30;17277:34;17257:18;;;17250:62;-1:-1:-1;;;17328:18:1;;;17321:34;17372:19;;7664:68:0;16997:400:1;7664:68:0;-1:-1:-1;;;;;7751:21:0;;7743:68;;;;-1:-1:-1;;;7743:68:0;;17604:2:1;7743:68:0;;;17586:21:1;17643:2;17623:18;;;17616:30;17682:34;17662:18;;;17655:62;-1:-1:-1;;;17733:18:1;;;17726:32;17775:19;;7743:68:0;17402:398:1;7743:68:0;-1:-1:-1;;;;;7824:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7876:32;;160:25:1;;;7876:32:0;;133:18:1;7876:32:0;;;;;;;7536:380;;;:::o;6877:651::-;-1:-1:-1;;;;;7017:20:0;;7009:70;;;;-1:-1:-1;;;7009:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7098:23:0;;7090:71;;;;-1:-1:-1;;;7090:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7198:17:0;;7174:21;7198:17;;;;;;;;;;;7248:23;;;;7226:111;;;;-1:-1:-1;;;7226:111:0;;18817:2:1;7226:111:0;;;18799:21:1;18856:2;18836:18;;;18829:30;18895:34;18875:18;;;18868:62;-1:-1:-1;;;18946:18:1;;;18939:36;18992:19;;7226:111:0;18615:402:1;7226:111:0;-1:-1:-1;;;;;7373:17:0;;;:9;:17;;;;;;;;;;;7393:22;;;7373:42;;7437:20;;;;;;;;:30;;7409:6;;7373:9;7437:30;;7409:6;;7437:30;:::i;:::-;;;;;;;;7502:9;-1:-1:-1;;;;;7485:35:0;7494:6;-1:-1:-1;;;;;7485:35:0;;7513:6;7485:35;;;;160:25:1;;148:2;133:18;;14:177;7485:35:0;;;;;;;;6998:530;6877:651;;;:::o;15267:2025::-;-1:-1:-1;;;;;15399:18:0;;15391:68;;;;-1:-1:-1;;;15391:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15478:16:0;;15470:64;;;;-1:-1:-1;;;15470:64:0;;;;;;;:::i;:::-;15562:1;15553:6;:10;15545:52;;;;-1:-1:-1;;;15545:52:0;;19224:2:1;15545:52:0;;;19206:21:1;19263:2;19243:18;;;19236:30;19302:31;19282:18;;;19275:59;19351:18;;15545:52:0;19022:353:1;15545:52:0;15613:17;;15634:1;15613:22;15610:1436;;8533:6;;-1:-1:-1;;;;;15660:15:0;;;8533:6;;15660:15;;:32;;-1:-1:-1;8533:6:0;;-1:-1:-1;;;;;15679:13:0;;;8533:6;;15679:13;15660:32;15652:67;;;;-1:-1:-1;;;15652:67:0;;19582:2:1;15652:67:0;;;19564:21:1;19621:2;19601:18;;;19594:30;-1:-1:-1;;;19640:18:1;;;19633:52;19702:18;;15652:67:0;19380:346:1;15652:67:0;15734:33;15750:4;15756:2;15760:6;15734:15;:33::i;:::-;15610:1436;;;-1:-1:-1;;;;;15814:25:0;;;;;;:19;:25;;;;;;;;15813:26;:54;;;;-1:-1:-1;;;;;;15844:23:0;;;;;;:19;:23;;;;;;;;15843:24;15813:54;15809:1176;;;15892:11;;-1:-1:-1;;;15892:11:0;;;;:24;;;;-1:-1:-1;15908:8:0;;;;15907:9;15892:24;:37;;;;-1:-1:-1;;;;;;15920:9:0;;;;;;:5;:9;;;;;;;;15892:37;15888:179;;;15954:8;:15;;-1:-1:-1;;15954:15:0;15965:4;15954:15;;;15992:16;16001:6;15992:8;:16::i;:::-;16031:8;:16;;-1:-1:-1;;16031:16:0;;;15888:179;16087:12;16122:11;16136:13;:11;:13::i;:::-;16122:27;;16168:11;16182:12;:10;:12::i;:::-;-1:-1:-1;;;;;16219:9:0;;;;;;:5;:9;;;;;;16168:26;;-1:-1:-1;16219:9:0;;16215:601;;;16256:7;;16253:64;;16314:3;16298:12;16307:3;16298:6;:12;:::i;:::-;16297:20;;;;:::i;:::-;16290:27;;16253:64;16342:15;16360;16370:4;16360:9;:15::i;:::-;-1:-1:-1;;;;;16412:12:0;;;;;;:6;:12;;;;;;16342:33;;-1:-1:-1;16402:22:0;;16398:75;;;-1:-1:-1;;;;;16451:12:0;;;;;;:6;:12;;;;;:22;;;16398:75;-1:-1:-1;;;;;16501:22:0;;;;;;:16;:22;;;;;;;;16496:180;;-1:-1:-1;;;;;16552:22:0;;;;;;;:16;:22;;;;;;:29;;-1:-1:-1;;16552:29:0;16577:4;16552:29;;;16612:11;;:29;;-1:-1:-1;;;16612:29:0;;;;;15988:51:1;;;;16055:18;;;16048:34;;;;16612:11:0;;;;:20;;15961:18:1;;16612:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16608:45;;16230:465;16215:601;;;16728:1;16722:3;:7;:22;;;;-1:-1:-1;;;;;;16733:11:0;;;;;;:5;:11;;;;;;;;16722:22;16718:98;;;16793:3;16777:12;16786:3;16777:6;:12;:::i;:::-;16776:20;;;;:::i;:::-;16769:27;;16718:98;16840:8;;16836:99;;16873:42;16889:4;16903;16910;16873:15;:42::i;:::-;16955:14;16965:4;16955:14;;:::i;:::-;;;15869:1116;;;15809:1176;17001:33;17017:4;17023:2;17027:6;17001:15;:33::i;:::-;17058:30;17079:4;17085:2;17058:20;:30::i;:::-;-1:-1:-1;;;;;17105:22:0;;;;;;:16;:22;;;;;;;;17101:90;;17134:11;;-1:-1:-1;;;;;17134:11:0;:20;17155:4;17161:15;17155:4;17161:9;:15::i;:::-;17134:43;;-1:-1:-1;;;;;;17134:43:0;;;;;;;-1:-1:-1;;;;;16006:32:1;;;17134:43:0;;;15988:51:1;16055:18;;;16048:34;15961:18;;17134:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17130:59;;-1:-1:-1;;;;;17205:20:0;;;;;;:16;:20;;;;;;;;17201:84;;17232:11;;-1:-1:-1;;;;;17232:11:0;:20;17253:2;17257:13;17253:2;17257:9;:13::i;:::-;17232:39;;-1:-1:-1;;;;;;17232:39:0;;;;;;;-1:-1:-1;;;;;16006:32:1;;;17232:39:0;;;15988:51:1;16055:18;;;16048:34;15961:18;;17232:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17228:55;;;15267:2025;;;:::o;17724:547::-;17777:20;17800:24;17818:4;17800:9;:24::i;:::-;17777:47;;17854:18;;17839:12;:33;17835:46;;;17874:7;17724:547;:::o;17835:46::-;17910:13;;17895:12;:28;17891:62;;;-1:-1:-1;17940:13:0;;17891:62;17983:6;17968:12;:21;17964:48;;;-1:-1:-1;18006:6:0;17964:48;18027:12;18043:1;18027:17;18023:30;;18046:7;17724:547;:::o;18023:30::-;18065;18082:12;18065:16;:30::i;:::-;18129:21;18166:14;;18163:101;;18201:11;;;;;;;;;-1:-1:-1;;;;;18201:11:0;-1:-1:-1;;;;;18201:19:0;;18228:10;18201:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17766:505:0;;17724:547;:::o;21404:195::-;-1:-1:-1;;;;;21493:22:0;;;;;;:16;:22;;;;;;:27;;:44;;-1:-1:-1;8533:6:0;;-1:-1:-1;;;;;21524:13:0;;;8533:6;;21524:13;21493:44;21485:106;;;;-1:-1:-1;;;21485:106:0;;19933:2:1;21485:106:0;;;19915:21:1;19972:2;19952:18;;;19945:30;20011:34;19991:18;;;19984:62;-1:-1:-1;;;20062:18:1;;;20055:47;20119:19;;21485:106:0;19731:413:1;17300:416:0;17390:16;;;17404:1;17390:16;;;;;;;;17366:21;;17390:16;;;;;;;;;;-1:-1:-1;17390:16:0;17366:40;;17435:4;17417;17422:1;17417:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;17417:23:0;;;-1:-1:-1;;;;;17417:23:0;;;;;17461:9;-1:-1:-1;;;;;17461:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17451:4;17456:1;17451:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17451:26:0;;;:7;;;;;;;;;:26;17490:218;;-1:-1:-1;;;17490:218:0;;:9;:60;;;;;;:218;;17565:11;;17591:1;;17635:4;;17662;;17682:15;;17490:218;;;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;975:131::-;-1:-1:-1;;;;;1050:31:1;;1040:42;;1030:70;;1096:1;1093;1086:12;1030:70;975:131;:::o;1111:315::-;1179:6;1187;1240:2;1228:9;1219:7;1215:23;1211:32;1208:52;;;1256:1;1253;1246:12;1208:52;1295:9;1282:23;1314:31;1339:5;1314:31;:::i;:::-;1364:5;1416:2;1401:18;;;;1388:32;;-1:-1:-1;;;1111:315:1:o;1623:689::-;1718:6;1726;1734;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1843:9;1830:23;1872:18;1913:2;1905:6;1902:14;1899:34;;;1929:1;1926;1919:12;1899:34;1967:6;1956:9;1952:22;1942:32;;2012:7;2005:4;2001:2;1997:13;1993:27;1983:55;;2034:1;2031;2024:12;1983:55;2074:2;2061:16;2100:2;2092:6;2089:14;2086:34;;;2116:1;2113;2106:12;2086:34;2171:7;2164:4;2154:6;2151:1;2147:14;2143:2;2139:23;2135:34;2132:47;2129:67;;;2192:1;2189;2182:12;2129:67;2223:4;2215:13;;;;2247:6;;-1:-1:-1;2285:20:1;;;;2272:34;;1623:689;-1:-1:-1;;;;1623:689:1:o;2317:316::-;2394:6;2402;2410;2463:2;2451:9;2442:7;2438:23;2434:32;2431:52;;;2479:1;2476;2469:12;2431:52;-1:-1:-1;;2502:23:1;;;2572:2;2557:18;;2544:32;;-1:-1:-1;2623:2:1;2608:18;;;2595:32;;2317:316;-1:-1:-1;2317:316:1:o;2638:127::-;2699:10;2694:3;2690:20;2687:1;2680:31;2730:4;2727:1;2720:15;2754:4;2751:1;2744:15;2770:275;2841:2;2835:9;2906:2;2887:13;;-1:-1:-1;;2883:27:1;2871:40;;2941:18;2926:34;;2962:22;;;2923:62;2920:88;;;2988:18;;:::i;:::-;3024:2;3017:22;2770:275;;-1:-1:-1;2770:275:1:o;3050:183::-;3110:4;3143:18;3135:6;3132:30;3129:56;;;3165:18;;:::i;:::-;-1:-1:-1;3210:1:1;3206:14;3222:4;3202:25;;3050:183::o;3238:662::-;3292:5;3345:3;3338:4;3330:6;3326:17;3322:27;3312:55;;3363:1;3360;3353:12;3312:55;3399:6;3386:20;3425:4;3449:60;3465:43;3505:2;3465:43;:::i;:::-;3449:60;:::i;:::-;3543:15;;;3629:1;3625:10;;;;3613:23;;3609:32;;;3574:12;;;;3653:15;;;3650:35;;;3681:1;3678;3671:12;3650:35;3717:2;3709:6;3705:15;3729:142;3745:6;3740:3;3737:15;3729:142;;;3811:17;;3799:30;;3849:12;;;;3762;;3729:142;;;-1:-1:-1;3889:5:1;3238:662;-1:-1:-1;;;;;;3238:662:1:o;3905:1215::-;4023:6;4031;4084:2;4072:9;4063:7;4059:23;4055:32;4052:52;;;4100:1;4097;4090:12;4052:52;4140:9;4127:23;4169:18;4210:2;4202:6;4199:14;4196:34;;;4226:1;4223;4216:12;4196:34;4264:6;4253:9;4249:22;4239:32;;4309:7;4302:4;4298:2;4294:13;4290:27;4280:55;;4331:1;4328;4321:12;4280:55;4367:2;4354:16;4389:4;4413:60;4429:43;4469:2;4429:43;:::i;4413:60::-;4507:15;;;4589:1;4585:10;;;;4577:19;;4573:28;;;4538:12;;;;4613:19;;;4610:39;;;4645:1;4642;4635:12;4610:39;4669:11;;;;4689:217;4705:6;4700:3;4697:15;4689:217;;;4785:3;4772:17;4802:31;4827:5;4802:31;:::i;:::-;4846:18;;4722:12;;;;4884;;;;4689:217;;;4925:5;-1:-1:-1;;4968:18:1;;4955:32;;-1:-1:-1;;4999:16:1;;;4996:36;;;5028:1;5025;5018:12;4996:36;;5051:63;5106:7;5095:8;5084:9;5080:24;5051:63;:::i;:::-;5041:73;;;3905:1215;;;;;:::o;5125:456::-;5202:6;5210;5218;5271:2;5259:9;5250:7;5246:23;5242:32;5239:52;;;5287:1;5284;5277:12;5239:52;5326:9;5313:23;5345:31;5370:5;5345:31;:::i;:::-;5395:5;-1:-1:-1;5452:2:1;5437:18;;5424:32;5465:33;5424:32;5465:33;:::i;:::-;5125:456;;5517:7;;-1:-1:-1;;;5571:2:1;5556:18;;;;5543:32;;5125:456::o;5775:247::-;5834:6;5887:2;5875:9;5866:7;5862:23;5858:32;5855:52;;;5903:1;5900;5893:12;5855:52;5942:9;5929:23;5961:31;5986:5;5961:31;:::i;:::-;6011:5;5775:247;-1:-1:-1;;;5775:247:1:o;6235:248::-;6303:6;6311;6364:2;6352:9;6343:7;6339:23;6335:32;6332:52;;;6380:1;6377;6370:12;6332:52;-1:-1:-1;;6403:23:1;;;6473:2;6458:18;;;6445:32;;-1:-1:-1;6235:248:1:o;6488:416::-;6553:6;6561;6614:2;6602:9;6593:7;6589:23;6585:32;6582:52;;;6630:1;6627;6620:12;6582:52;6669:9;6656:23;6688:31;6713:5;6688:31;:::i;:::-;6738:5;-1:-1:-1;6795:2:1;6780:18;;6767:32;6837:15;;6830:23;6818:36;;6808:64;;6868:1;6865;6858:12;6808:64;6891:7;6881:17;;;6488:416;;;;;:::o;7865:388::-;7933:6;7941;7994:2;7982:9;7973:7;7969:23;7965:32;7962:52;;;8010:1;8007;8000:12;7962:52;8049:9;8036:23;8068:31;8093:5;8068:31;:::i;:::-;8118:5;-1:-1:-1;8175:2:1;8160:18;;8147:32;8188:33;8147:32;8188:33;:::i;8258:356::-;8460:2;8442:21;;;8479:18;;;8472:30;8538:34;8533:2;8518:18;;8511:62;8605:2;8590:18;;8258:356::o;8619:127::-;8680:10;8675:3;8671:20;8668:1;8661:31;8711:4;8708:1;8701:15;8735:4;8732:1;8725:15;8751:128;8818:9;;;8839:11;;;8836:37;;;8853:18;;:::i;8884:380::-;8963:1;8959:12;;;;9006;;;9027:61;;9081:4;9073:6;9069:17;9059:27;;9027:61;9134:2;9126:6;9123:14;9103:18;9100:38;9097:161;;9180:10;9175:3;9171:20;9168:1;9161:31;9215:4;9212:1;9205:15;9243:4;9240:1;9233:15;9097:161;;8884:380;;;:::o;9269:127::-;9330:10;9325:3;9321:20;9318:1;9311:31;9361:4;9358:1;9351:15;9385:4;9382:1;9375:15;9401:135;9440:3;9461:17;;;9458:43;;9481:18;;:::i;:::-;-1:-1:-1;9528:1:1;9517:13;;9401:135::o;9900:422::-;9989:1;10032:5;9989:1;10046:270;10067:7;10057:8;10054:21;10046:270;;;10126:4;10122:1;10118:6;10114:17;10108:4;10105:27;10102:53;;;10135:18;;:::i;:::-;10185:7;10175:8;10171:22;10168:55;;;10205:16;;;;10168:55;10284:22;;;;10244:15;;;;10046:270;;;10050:3;9900:422;;;;;:::o;10327:806::-;10376:5;10406:8;10396:80;;-1:-1:-1;10447:1:1;10461:5;;10396:80;10495:4;10485:76;;-1:-1:-1;10532:1:1;10546:5;;10485:76;10577:4;10595:1;10590:59;;;;10663:1;10658:130;;;;10570:218;;10590:59;10620:1;10611:10;;10634:5;;;10658:130;10695:3;10685:8;10682:17;10679:43;;;10702:18;;:::i;:::-;-1:-1:-1;;10758:1:1;10744:16;;10773:5;;10570:218;;10872:2;10862:8;10859:16;10853:3;10847:4;10844:13;10840:36;10834:2;10824:8;10821:16;10816:2;10810:4;10807:12;10803:35;10800:77;10797:159;;;-1:-1:-1;10909:19:1;;;10941:5;;10797:159;10988:34;11013:8;11007:4;10988:34;:::i;:::-;11058:6;11054:1;11050:6;11046:19;11037:7;11034:32;11031:58;;;11069:18;;:::i;:::-;11107:20;;10327:806;-1:-1:-1;;;10327:806:1:o;11138:140::-;11196:5;11225:47;11266:4;11256:8;11252:19;11246:4;11225:47;:::i;11283:168::-;11356:9;;;11387;;11404:15;;;11398:22;;11384:37;11374:71;;11425:18;;:::i;11865:125::-;11930:9;;;11951:10;;;11948:36;;;11964:18;;:::i;11995:184::-;12065:6;12118:2;12106:9;12097:7;12093:23;12089:32;12086:52;;;12134:1;12131;12124:12;12086:52;-1:-1:-1;12157:16:1;;11995:184;-1:-1:-1;11995:184:1:o;12184:217::-;12224:1;12250;12240:132;;12294:10;12289:3;12285:20;12282:1;12275:31;12329:4;12326:1;12319:15;12357:4;12354:1;12347:15;12240:132;-1:-1:-1;12386:9:1;;12184:217::o;13920:251::-;13990:6;14043:2;14031:9;14022:7;14018:23;14014:32;14011:52;;;14059:1;14056;14049:12;14011:52;14091:9;14085:16;14110:31;14135:5;14110:31;:::i;15097:306::-;15185:6;15193;15201;15254:2;15242:9;15233:7;15229:23;15225:32;15222:52;;;15270:1;15267;15260:12;15222:52;15299:9;15293:16;15283:26;;15349:2;15338:9;15334:18;15328:25;15318:35;;15393:2;15382:9;15378:18;15372:25;15362:35;;15097:306;;;;;:::o;17805:401::-;18007:2;17989:21;;;18046:2;18026:18;;;18019:30;18085:34;18080:2;18065:18;;18058:62;-1:-1:-1;;;18151:2:1;18136:18;;18129:35;18196:3;18181:19;;17805:401::o;18211:399::-;18413:2;18395:21;;;18452:2;18432:18;;;18425:30;18491:34;18486:2;18471:18;;18464:62;-1:-1:-1;;;18557:2:1;18542:18;;18535:33;18600:3;18585:19;;18211:399::o;20149:980::-;20411:4;20459:3;20448:9;20444:19;20490:6;20479:9;20472:25;20516:2;20554:6;20549:2;20538:9;20534:18;20527:34;20597:3;20592:2;20581:9;20577:18;20570:31;20621:6;20656;20650:13;20687:6;20679;20672:22;20725:3;20714:9;20710:19;20703:26;;20764:2;20756:6;20752:15;20738:29;;20785:1;20795:195;20809:6;20806:1;20803:13;20795:195;;;20874:13;;-1:-1:-1;;;;;20870:39:1;20858:52;;20965:15;;;;20930:12;;;;20906:1;20824:9;20795:195;;;-1:-1:-1;;;;;;;21046:32:1;;;;21041:2;21026:18;;21019:60;-1:-1:-1;;;21110:3:1;21095:19;21088:35;21007:3;20149:980;-1:-1:-1;;;20149:980:1:o

Swarm Source

ipfs://e2f7057e3f64058f8596ebfe1140a242685aee605acd30954871f2a4463b93f7

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.