ETH Price: $3,870.52 (+5.62%)

Contract

0xB219F4dDBc76546B33Df44DF0364Bb1186d1b400
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve183403742023-10-13 8:47:23418 days ago1697186843IN
0xB219F4dD...186d1b400
0 ETH0.000137015.62373629
Approve183403742023-10-13 8:47:23418 days ago1697186843IN
0xB219F4dD...186d1b400
0 ETH0.000137015.62373629
Approve157395582022-10-13 13:41:23783 days ago1665668483IN
0xB219F4dD...186d1b400
0 ETH0.0004463718.32126215
Approve155313432022-09-14 6:01:27812 days ago1663135287IN
0xB219F4dD...186d1b400
0 ETH0.000201018.25031801
Approve155103952022-09-10 18:51:55816 days ago1662835915IN
0xB219F4dD...186d1b400
0 ETH0.000433779.29899982
Approve154708242022-09-04 9:25:21822 days ago1662283521IN
0xB219F4dD...186d1b400
0 ETH0.000316766.79056563
Approve154670242022-09-03 18:46:28823 days ago1662230788IN
0xB219F4dD...186d1b400
0 ETH0.000297416.3758031
Approve154556712022-09-01 23:16:02825 days ago1662074162IN
0xB219F4dD...186d1b400
0 ETH0.0010380122.25201643
Approve154556612022-09-01 23:13:08825 days ago1662073988IN
0xB219F4dD...186d1b400
0 ETH0.00120125.74622163
Approve154498872022-09-01 1:02:25826 days ago1661994145IN
0xB219F4dD...186d1b400
0 ETH0.0011408224.45606061
Approve154413052022-08-30 16:06:27827 days ago1661875587IN
0xB219F4dD...186d1b400
0 ETH0.0019278441.32750566
Approve154267532022-08-28 8:28:19829 days ago1661675299IN
0xB219F4dD...186d1b400
0 ETH0.000232684.98804204
Approve154244802022-08-27 23:34:09830 days ago1661643249IN
0xB219F4dD...186d1b400
0 ETH0.000173383.71682638
Approve154200182022-08-27 6:28:31830 days ago1661581711IN
0xB219F4dD...186d1b400
0 ETH0.000312086.69021916
Approve154185442022-08-27 0:41:39831 days ago1661560899IN
0xB219F4dD...186d1b400
0 ETH0.000366837.86395514
Approve154136112022-08-26 5:51:06831 days ago1661493066IN
0xB219F4dD...186d1b400
0 ETH0.0005478111.74365481
Approve153990462022-08-23 21:34:14834 days ago1661290454IN
0xB219F4dD...186d1b400
0 ETH0.0009684420.76078778
Approve153949692022-08-23 6:14:15834 days ago1661235255IN
0xB219F4dD...186d1b400
0 ETH0.000317786.81248623
Approve153908482022-08-22 14:45:07835 days ago1661179507IN
0xB219F4dD...186d1b400
0 ETH0.0004707410.09150908
Approve153852652022-08-21 17:34:20836 days ago1661103260IN
0xB219F4dD...186d1b400
0 ETH0.000357197.65733396
Approve153851952022-08-21 17:18:22836 days ago1661102302IN
0xB219F4dD...186d1b400
0 ETH0.0005817612.47132411
Approve153836062022-08-21 11:01:09836 days ago1661079669IN
0xB219F4dD...186d1b400
0 ETH0.0007586516.26340353
Approve153835932022-08-21 10:57:05836 days ago1661079425IN
0xB219F4dD...186d1b400
0 ETH0.0008782318.82689118
Approve153811902022-08-21 1:55:37837 days ago1661046937IN
0xB219F4dD...186d1b400
0 ETH0.000424869.10795406
Approve153801152022-08-20 21:57:35837 days ago1661032655IN
0xB219F4dD...186d1b400
0 ETH0.000295516.33494385
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
154724502022-09-04 15:40:59822 days ago1662306059
0xB219F4dD...186d1b400
0.00341321 ETH
154724502022-09-04 15:40:59822 days ago1662306059
0xB219F4dD...186d1b400
0.00056886 ETH
154724502022-09-04 15:40:59822 days ago1662306059
0xB219F4dD...186d1b400
0.00113773 ETH
154724502022-09-04 15:40:59822 days ago1662306059
0xB219F4dD...186d1b400
0.00026946 ETH
154724502022-09-04 15:40:59822 days ago1662306059
0xB219F4dD...186d1b400
0.00538928 ETH
154556912022-09-01 23:19:47825 days ago1662074387
0xB219F4dD...186d1b400
0.01003513 ETH
154556912022-09-01 23:19:47825 days ago1662074387
0xB219F4dD...186d1b400
0.00167252 ETH
154556912022-09-01 23:19:47825 days ago1662074387
0xB219F4dD...186d1b400
0.00334504 ETH
154556912022-09-01 23:19:47825 days ago1662074387
0xB219F4dD...186d1b400
0.00079224 ETH
154556912022-09-01 23:19:47825 days ago1662074387
0xB219F4dD...186d1b400
0.01584494 ETH
154244862022-08-27 23:35:00830 days ago1661643300
0xB219F4dD...186d1b400
0.004901 ETH
154244862022-08-27 23:35:00830 days ago1661643300
0xB219F4dD...186d1b400
0.00081683 ETH
154244862022-08-27 23:35:00830 days ago1661643300
0xB219F4dD...186d1b400
0.00163366 ETH
154244862022-08-27 23:35:00830 days ago1661643300
0xB219F4dD...186d1b400
0.00038692 ETH
154244862022-08-27 23:35:00830 days ago1661643300
0xB219F4dD...186d1b400
0.00773842 ETH
154136122022-08-26 5:51:10831 days ago1661493070
0xB219F4dD...186d1b400
0.00619848 ETH
154136122022-08-26 5:51:10831 days ago1661493070
0xB219F4dD...186d1b400
0.00103308 ETH
154136122022-08-26 5:51:10831 days ago1661493070
0xB219F4dD...186d1b400
0.00206616 ETH
154136122022-08-26 5:51:10831 days ago1661493070
0xB219F4dD...186d1b400
0.00048935 ETH
154136122022-08-26 5:51:10831 days ago1661493070
0xB219F4dD...186d1b400
0.00978708 ETH
153914932022-08-22 17:00:14835 days ago1661187614
0xB219F4dD...186d1b400
0.00774003 ETH
153914932022-08-22 17:00:14835 days ago1661187614
0xB219F4dD...186d1b400
0.00129 ETH
153914932022-08-22 17:00:14835 days ago1661187614
0xB219F4dD...186d1b400
0.00258001 ETH
153914932022-08-22 17:00:14835 days ago1661187614
0xB219F4dD...186d1b400
0.00061105 ETH
153914932022-08-22 17:00:14835 days ago1661187614
0xB219F4dD...186d1b400
0.01222111 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ERC20Contract

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

https://mspaintdao.com

*/

// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.14;

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

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

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

contract ERC20Contract is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address public _owner;

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public isExcludedFromMaxWalletRestrictions;
    mapping (address => bool) private _isblacklisted;


    bool private sameBlockActive = false;
    mapping (address => uint256) private lastTrade;   

    bool private isInitialized = false;
    
    mapping (address => uint256) firstBuy;
    
    uint256 private startingSupply;

    string private _name;
    string private _symbol;
//==========================
    // FEES
    struct taxes {
    uint buyFee;
    uint sellFee;
    uint transferFee;
    }

    taxes public Fees = taxes(
    {buyFee: 1000, sellFee: 1000, transferFee: 500});
//==========================
    // Max Limits

    struct MaxLimits {
    uint maxBuy;
    uint maxSell;
    uint maxTransfer;
    }

    MaxLimits public maxFees = MaxLimits(
    {maxBuy: 1000, maxSell: 1000, maxTransfer: 1000});
//==========================    
    //Proportions of Taxes
    struct feeProportions {
    uint liquidity;
    uint developer;
    uint treasury;
    uint marketing;
    }

    feeProportions public Ratios = feeProportions(
    { liquidity: 10, developer: 60, treasury: 10, marketing: 20});

    uint256 private constant masterTaxDivisor = 10000;
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
 
    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;


    address constant private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD; // Receives tokens, deflates supply, increases price floor.
    
    address public _devWallet;
    address public _marketingWallet;
    address public _treasuryWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent;
    uint256 private maxTxDivisor;
    uint256 private _maxTxAmount;
    
    uint256 private maxWalletPercent;
    uint256 private maxWalletDivisor;
    uint256 private _maxWalletSize;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool public _hasLiqBeenAdded = false;
    
    uint256 private _liqAddStatus = 0;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private _initialLiquidityAmount = 0; // make constant

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller != owner.");
        _;
    }
    
    constructor () {
        _owner = msg.sender;
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_devWallet == payable(_owner))
            _devWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

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

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function getFirstBuy(address account) public view returns (uint256) {
        return firstBuy[account];
    }

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

        return _transfer(sender, recipient, amount);
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "One week cooldown.");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

    function setupComplete(uint256 rInitializer) private  {
        require (_liqAddStatus == 0, "Error.");
        _liqAddStatus = rInitializer;
    }


    function intializeContract(string memory initName, string memory initSymbol, uint256 initSupply) external onlyOwner payable {
        require(!isInitialized, "Contract already initialized.");
        require(_liqAddStatus == 0);
        
        _name = initName;
        _symbol = initSymbol;

        startingSupply = initSupply;
        _decimals = 18;
        _tTotal = startingSupply * 10**_decimals;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        _devWallet = address(0x8f7c8187855D1b06A64DDD0fd49b08FE6Cebacf5);
        _marketingWallet = address(0xf871C103A534BAE2C273d9A39400D6C79E3867F4);
        _treasuryWallet = address(0x73cCeb81F18c9217D874D0387D44Ee6bBB85A04C);

        maxTxPercent = 97; // Max Transaction Amount: 100 = 1%
        maxTxDivisor = 10000;
        _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
        
        maxWalletPercent = 98; //Max Wallet 100: 1%
        maxWalletDivisor = 10000;
        _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
        
        swapThreshold = (_tTotal * 5) / 10_000;
        swapAmount = (_tTotal * 5) / 1_000;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[_devWallet] = true;
        _isExcludedFromFees[_marketingWallet] = true;
        _isExcludedFromFees[_treasuryWallet] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;


        approve(_routerAddress, type(uint256).max);
        approve(owner(), type(uint256).max);


        isInitialized = true;
        _tOwned[owner()] = _tTotal;
        _approve(owner(), _routerAddress, _tTotal);
        emit Transfer(address(0), owner(), _tTotal);
 
        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

    
        _transfer(_owner, address(this), balanceOf(_owner));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        setupComplete(1);
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }


    function excludeFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = true;
    }

    function revokeExcludedFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = false;
    }
    

    function setRatios(uint _liquidity, uint _developer, uint _treasury, uint _marketing) external onlyOwner {
        require ( (_liquidity+_developer) == 1100, "limit taxes");
        Ratios.liquidity = _liquidity;
        Ratios.developer = _developer;
        Ratios.marketing = _marketing;
        Ratios.treasury = _treasury;
        }


    function setTaxes(uint _buyFee, uint _sellFee, uint _transferFee) external onlyOwner {
        require(_buyFee <= maxFees.maxBuy
                && _sellFee <= maxFees.maxSell
                && _transferFee <= maxFees.maxTransfer,
                "Cannot exceed maximums.");
         Fees.buyFee = _buyFee;
         Fees.sellFee = _sellFee;
         Fees.transferFee = _transferFee;

    }

    function removeLimits() external onlyOwner {
        _maxTxAmount = _tTotal;
        _maxWalletSize = _tTotal;
    }

    function setMaxTxPercent(uint percent, uint divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 300), "Must be above 0.33~% of total supply.");
        _maxTxAmount = check;
    }

    function setMaxWalletSize(uint percent, uint divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 300), "Must be above 0.33~% of total supply.");
        _maxWalletSize = check;

    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable developerWallet, address payable marketingWallet, address payable treasuryWallet) external onlyOwner {
        _devWallet = payable(developerWallet);
        _treasuryWallet = payable(treasuryWallet);
        _marketingWallet = payable(marketingWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
     
    function updateBots(address[] memory blacklisted_, bool status_) public onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            if (!lpPairs[blacklisted_[i]] && blacklisted_[i] != address(_routerAddress)) {
                _isblacklisted[blacklisted_[i]] = status_;
            }
        }
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: Zero address.");
        require(to != address(0), "ERC20: Zero address.");
        require(amount > 0, "Must >0.");
        require(!_isblacklisted[to] && !_isblacklisted[from],"unable to trade");
        if(_hasLimits(from, to)) {
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                    } 
                else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                    }
            }
            if(!(isExcludedFromMaxWalletRestrictions[from] || isExcludedFromMaxWalletRestrictions[to])) {
                if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
                }
                if(to != _routerAddress && !lpPairs[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                }

            }
            
        }

        if (_tOwned[to] == 0) {
            firstBuy[to] = block.timestamp;
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        if (Ratios.liquidity + Ratios.developer == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * Ratios.liquidity) / (Ratios.liquidity + Ratios.developer + Ratios.marketing + Ratios.treasury) ) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

        uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((currentBalance * Ratios.liquidity) / (Ratios.liquidity + Ratios.developer + Ratios.marketing + Ratios.treasury) ) / 2;


        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (address(this).balance > 0) {
            bool success = true;
            uint256 ethBalance = address(this).balance;
            uint256 ethForMarketing = ((ethBalance * Ratios.marketing) / (Ratios.developer + Ratios.marketing + Ratios.treasury));
            uint256 ethForTreasury = ((ethBalance * Ratios.treasury) / (Ratios.developer + Ratios.marketing + Ratios.treasury));
            (success,) = address(_marketingWallet).call{value: ethForMarketing}("");
            (success,) = address(_treasuryWallet).call{value: ethForTreasury}("");
            (success,) = address(_devWallet).call{value: address(this).balance}("");
        }
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
                _liqAddBlock = block.number;

            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        } 
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount; //A
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;

        if (to == lpPair) {
            currentFee=Fees.sellFee;
            } 

        else if (from == lpPair) {currentFee = Fees.buyFee;} 

        else {currentFee = Fees.transferFee;}

        if (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != (1)) {
                revert();
            }
        }
        uint256 feeAmount = (amount * currentFee / masterTaxDivisor);
        _tOwned[address(this)] += (feeAmount);
        emit Transfer(from, address(this), feeAmount);
        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Fees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ratios","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"developer","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"excludeFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFirstBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"string","name":"initName","type":"string"},{"internalType":"string","name":"initSymbol","type":"string"},{"internalType":"uint256","name":"initSupply","type":"uint256"}],"name":"intializeContract","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxWalletRestrictions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFees","outputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxTransfer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"revokeExcludedFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_developer","type":"uint256"},{"internalType":"uint256","name":"_treasury","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"developerWallet","type":"address"},{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"treasuryWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"},{"internalType":"bool","name":"status_","type":"bool"}],"name":"updateBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006003556009805460ff19908116909155600b805490911690556103e8608081905260a08190526101f460c08190526010829055601182905560125560e0819052610100819052610120819052601381905560148181556015919091556101c0604052600a610140819052603c6101608190526101808290526101a083905260168290556017556018819055601991909155601a54620000a69160ff909116906200021e565b600d54620000b5919062000236565b601b556021805460ff60a81b19169055602a805460ff191690556000602b819055602c819055602d819055602e55348015620000f057600080fd5b50600080546001600160a01b0319163317905562000258565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200016057816000190482111562000144576200014462000109565b808516156200015257918102915b93841c939080029062000124565b509250929050565b600082620001795750600162000218565b81620001885750600062000218565b8160018114620001a15760028114620001ac57620001cc565b600191505062000218565b60ff841115620001c057620001c062000109565b50506001821b62000218565b5060208310610133831016604e8410600b8410161715620001f1575081810a62000218565b620001fd83836200011f565b806000190482111562000214576200021462000109565b0290505b92915050565b60006200022f60ff84168362000168565b9392505050565b600081600019048311821515161562000253576200025362000109565b500290565b6134cc80620002686000396000f3fe6080604052600436106102815760003560e01c8063751039fc1161014f578063aeb96704116100c1578063d3e5a6371161007a578063d3e5a637146107e9578063dd62ed3e146107fc578063e83e34b114610842578063e9dae5ed14610861578063eafb5a3c14610881578063fb78680d146108a157600080fd5b8063aeb9670414610706578063b2bdfa7b14610726578063b5f7bfa214610746578063bc1323e814610789578063c49b9a80146107a9578063ce8b79c9146107c957600080fd5b80638da5cb5b116101135780638da5cb5b1461060d57806395d89b411461065b578063962dfc7514610670578063a13ce2c614610690578063a457c2d7146106c6578063a9059cbb146106e657600080fd5b8063751039fc146105b857806375cb1bd1146105cd57806380c581d1146105ed578063893d20e81461060d5780638c7321ad1461062b57600080fd5b806339509351116101f35780634fbee193116101ac5780634fbee193146104f057806350a8e01614610529578063571ac8b014610543578063590ffdce1461056357806370a0823114610583578063715018a6146105a357600080fd5b806339509351146104155780633aaa36e6146104355780633f3cf56c1461046f578063452ed4f11461048f5780634a74bb02146104af5780634fb2e45d146104d057600080fd5b80631793fe4e116102455780631793fe4e1461035257806318160ddd1461037457806323b872dd1461039357806326003957146103b3578063269d1faa146103d3578063313ce567146103f357600080fd5b806303fd2a451461028d57806306fdde03146102c05780630758d924146102e2578063095ea7b31461030257806311a63e171461033257600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a361dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102cc57600080fd5b506102d56108c1565b6040516102b79190612ca9565b3480156102ee57600080fd5b50601d546102a3906001600160a01b031681565b34801561030e57600080fd5b5061032261031d366004612d16565b610953565b60405190151581526020016102b7565b34801561033e57600080fd5b50601f546102a3906001600160a01b031681565b34801561035e57600080fd5b5061037261036d366004612d42565b61096a565b005b34801561038057600080fd5b50601b545b6040519081526020016102b7565b34801561039f57600080fd5b506103226103ae366004612d74565b6109fc565b3480156103bf57600080fd5b506103726103ce366004612db5565b610a74565b3480156103df57600080fd5b506021546102a3906001600160a01b031681565b3480156103ff57600080fd5b50601a5460405160ff90911681526020016102b7565b34801561042157600080fd5b50610322610430366004612d16565b610af1565b34801561044157600080fd5b5060105460115460125461045492919083565b604080519384526020840192909252908201526060016102b7565b34801561047b57600080fd5b5061037261048a366004612db5565b610b2d565b34801561049b57600080fd5b50601e546102a3906001600160a01b031681565b3480156104bb57600080fd5b5060215461032290600160a81b900460ff1681565b3480156104dc57600080fd5b506103726104eb366004612dd7565b610baa565b3480156104fc57600080fd5b5061032261050b366004612dd7565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561053557600080fd5b50602a546103229060ff1681565b34801561054f57600080fd5b5061032261055e366004612dd7565b610d3d565b34801561056f57600080fd5b5061037261057e366004612e09565b610d4b565b34801561058f57600080fd5b5061038561059e366004612dd7565b610da0565b3480156105af57600080fd5b50610372610dbb565b3480156105c457600080fd5b50610372610e3a565b3480156105d957600080fd5b506103726105e8366004612e3e565b610e71565b3480156105f957600080fd5b50610372610608366004612e09565b610eda565b34801561061957600080fd5b506000546001600160a01b03166102a3565b34801561063757600080fd5b50610322610646366004612dd7565b60076020526000908152604090205460ff1681565b34801561066757600080fd5b506102d5610fb8565b34801561067c57600080fd5b506020546102a3906001600160a01b031681565b34801561069c57600080fd5b506103856106ab366004612dd7565b6001600160a01b03166000908152600c602052604090205490565b3480156106d257600080fd5b506103226106e1366004612d16565b610fc7565b3480156106f257600080fd5b50610322610701366004612d16565b610ffe565b34801561071257600080fd5b50610372610721366004612ed0565b611015565b34801561073257600080fd5b506000546102a3906001600160a01b031681565b34801561075257600080fd5b506016546017546018546019546107699392919084565b6040805194855260208501939093529183015260608201526080016102b7565b34801561079557600080fd5b506103726107a4366004612dd7565b611147565b3480156107b557600080fd5b506103726107c4366004612f94565b611192565b3480156107d557600080fd5b506103726107e4366004612dd7565b611214565b6103726107f736600461301f565b611262565b34801561080857600080fd5b5061038561081736600461308c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561084e57600080fd5b5060135460145460155461045492919083565b34801561086d57600080fd5b5061037261087c3660046130c5565b61190c565b34801561088d57600080fd5b5061037261089c366004612dd7565b6119b2565b3480156108ad57600080fd5b506103726108bc366004612d42565b611cde565b6060600e80546108d0906130f1565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc906130f1565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b6000610960338484611d47565b5060015b92915050565b6000546001600160a01b0316331461099d5760405162461bcd60e51b81526004016109949061312b565b60405180910390fd5b6109a7838561316b565b61044c146109e55760405162461bcd60e51b815260206004820152600b60248201526a6c696d697420746178657360a81b6044820152606401610994565b601693909355601791909155601991909155601855565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610a61576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610a5b908490613183565b90915550505b610a6c848484611e40565b949350505050565b6000546001600160a01b03163314610a9e5760405162461bcd60e51b81526004016109949061312b565b60008183601b54610aaf919061319a565b610ab991906131b9565b905061012c601b54610acb91906131b9565b811015610aea5760405162461bcd60e51b8152600401610994906131db565b6027555050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610960918590610b2890869061316b565b611d47565b6000546001600160a01b03163314610b575760405162461bcd60e51b81526004016109949061312b565b60008183601b54610b68919061319a565b610b7291906131b9565b905061012c601b54610b8491906131b9565b811015610ba35760405162461bcd60e51b8152600401610994906131db565b6024555050565b6000546001600160a01b03163314610bd45760405162461bcd60e51b81526004016109949061312b565b6001600160a01b038116610bfa5760405162461bcd60e51b815260040161099490613220565b61deac196001600160a01b03821601610c255760405162461bcd60e51b815260040161099490613220565b60008054610c3e916001600160a01b0390911690610d4b565b610c49816001610d4b565b600054601f546001600160a01b03918216911603610c7d57601f80546001600160a01b0319166001600160a01b0383161790555b600054610c92906001600160a01b0316610da0565b600080546001600160a01b039081168252600460209081526040808420868416855290915282209290925580549091610ccb9116610da0565b1115610cf257600054610cf0906001600160a01b031682610ceb82610da0565b611e40565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600061096482600019610953565b6000546001600160a01b03163314610d755760405162461bcd60e51b81526004016109949061312b565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610de55760405162461bcd60e51b81526004016109949061312b565b60008054610dfe916001600160a01b0390911690610d4b565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610e645760405162461bcd60e51b81526004016109949061312b565b601b546024819055602755565b6000546001600160a01b03163314610e9b5760405162461bcd60e51b81526004016109949061312b565b601f80546001600160a01b039485166001600160a01b031991821617909155602180549285169282169290921790915560208054929093169116179055565b6000546001600160a01b03163314610f045760405162461bcd60e51b81526004016109949061312b565b801515600003610f3057506001600160a01b03166000908152600260205260409020805460ff19169055565b60035415610f8c5762093a8060035442610f4a9190613183565b11610f8c5760405162461bcd60e51b815260206004820152601260248201527127b732903bb2b2b59031b7b7b63237bbb71760711b6044820152606401610994565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6060600f80546108d0906130f1565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610960918590610b28908690613183565b600061100b338484611e40565b5060019392505050565b6000546001600160a01b0316331461103f5760405162461bcd60e51b81526004016109949061312b565b60005b825181101561114257600260008483815181106110615761106161327d565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161580156110d45750737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03168382815181106110c0576110c061327d565b60200260200101516001600160a01b031614155b156111305781600860008584815181106110f0576110f061327d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8061113a81613293565b915050611042565b505050565b6000546001600160a01b031633146111715760405162461bcd60e51b81526004016109949061312b565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146111bc5760405162461bcd60e51b81526004016109949061312b565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061120990831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461123e5760405162461bcd60e51b81526004016109949061312b565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b0316331461128c5760405162461bcd60e51b81526004016109949061312b565b600b5460ff16156112df5760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610994565b602b54156112ec57600080fd5b82516112ff90600e906020860190612c10565b50815161131390600f906020850190612c10565b50600d819055601a805460ff1916601290811790915561133490600a613390565b600d54611341919061319a565b601b55601d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156113a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cc919061339f565b6001600160a01b031663c9c65396601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611451919061339f565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c1919061339f565b601e80546001600160a01b039283166001600160a01b031991821681179092556000918252600260209081526040808420805460ff1916600117905530845260048252808420601d549095168452938152929091206000199055601f80548216738f7c8187855d1b06a64ddd0fd49b08fe6cebacf51790558154811673f871c103a534bae2c273d9a39400d6c79e3867f417909155602180549091167373cceb81f18c9217d874d0387d44ee6bbb85a04c179055606160228190556127106023819055601b5490916115929161319a565b61159c91906131b9565b602455606260258190556127106026819055601b5490916115bc9161319a565b6115c691906131b9565b602755601b54612710906115db90600561319a565b6115e591906131b9565b602855601b546103e8906115fa90600561319a565b61160491906131b9565b60295560016006600061161f6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601f548216815260068452828120805486166001908117909155935482168152828120805486168517905560215490911681528181208054851684179055308152908120805484168317905561dead81527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168217909255906005906116df6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611727737a250d5630b4cf539739df2c5dacb4c659f2488d600019610953565b5061174561173d6000546001600160a01b031690565b600019610953565b50600b805460ff19166001908117909155601b5490600061176e6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556117ba61179d6000546001600160a01b031690565b737a250d5630b4cf539739df2c5dacb4c659f2488d601b54611d47565b6000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b5460405161180d91815260200190565b60405180910390a3600054601d54611834916001600160a01b039081169116600019611d47565b601d5461184e9030906001600160a01b0316600019611d47565b600054611868906001600160a01b031630610ceb82610da0565b50601d546001600160a01b031663f305d719473061188581610da0565b60008061189a6000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016118bc969594939291906133bc565b60606040518083038185885af11580156118da573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118ff91906133f7565b50505061114260016122f4565b6000546001600160a01b031633146119365760405162461bcd60e51b81526004016109949061312b565b601354831180159061194a57506014548211155b801561195857506015548111155b6119a45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610994565b601092909255601155601255565b6000546001600160a01b031633146119dc5760405162461bcd60e51b81526004016109949061312b565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a45919061339f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab6919061339f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b25919061339f565b90506001600160a01b038116611c9e57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b97919061339f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c08919061339f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c79919061339f565b601e80546001600160a01b0319166001600160a01b0392909216919091179055611cba565b601e80546001600160a01b0319166001600160a01b0383161790555b50601d80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611d085760405162461bcd60e51b81526004016109949061312b565b8284601b54611d17919061319a565b611d2191906131b9565b602855601b548190611d3490849061319a565b611d3e91906131b9565b60295550505050565b6001600160a01b038316611d935760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610994565b6001600160a01b038216611ddf5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610994565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611e8f5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610994565b6001600160a01b038316611edc5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610994565b60008211611f175760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b6044820152606401610994565b6001600160a01b03831660009081526008602052604090205460ff16158015611f5957506001600160a01b03841660009081526008602052604090205460ff16155b611f975760405162461bcd60e51b815260206004820152600f60248201526e756e61626c6520746f20747261646560881b6044820152606401610994565b611fa18484612332565b156121e15760095460ff1615612058576001600160a01b03841660009081526002602052604090205460ff1615612017576001600160a01b0383166000908152600a6020526040902054439003611ff757600080fd5b6001600160a01b0383166000908152600a60205260409020439055612058565b6001600160a01b0384166000908152600a602052604090205443900361203c57600080fd5b6001600160a01b0384166000908152600a602052604090204390555b6001600160a01b03841660009081526007602052604090205460ff168061209757506001600160a01b03831660009081526007602052604090205460ff165b6121e1576001600160a01b03841660009081526002602052604090205460ff16806120da57506001600160a01b03831660009081526002602052604090205460ff165b15612131576024548211156121315760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e00000000000000006044820152606401610994565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d1480159061217757506001600160a01b03831660009081526002602052604090205460ff16155b156121e1576027548261218985610da0565b612193919061316b565b11156121e15760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610994565b6001600160a01b038316600090815260016020526040812054900361221c576001600160a01b0383166000908152600c602052604090204290555b6001600160a01b03841660009081526006602052604090205460019060ff168061225e57506001600160a01b03841660009081526006602052604090205460ff165b15612267575060005b6001600160a01b03841660009081526002602052604090205460ff16156122df57602154600160a01b900460ff161580156122ab5750602154600160a81b900460ff165b156122df5760006122bb30610da0565b905060285481106122dd5760295481106122d457506029545b6122dd816123f0565b505b6122eb858585846126c6565b95945050505050565b602b541561232d5760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610994565b602b55565b600080546001600160a01b0384811691161480159061235f57506000546001600160a01b03838116911614155b801561238457506001600160a01b03821660009081526005602052604090205460ff16155b80156123a957506001600160a01b03831660009081526005602052604090205460ff16155b80156123c057506001600160a01b03821661dead14155b80156123d457506001600160a01b03821615155b80156123e957506001600160a01b0383163014155b9392505050565b6021805460ff60a01b1916600160a01b179055601754601654612413919061316b565b156126b65760185460195460175460165460009360029390929091612438919061316b565b612442919061316b565b61244c919061316b565b601654612459908561319a565b61246391906131b9565b61246d91906131b9565b9050600061247b8284613183565b905061248681612823565b6018546019546017546016544793600093600293919290916124a79161316b565b6124b1919061316b565b6124bb919061316b565b6016546124c8908561319a565b6124d291906131b9565b6124dc91906131b9565b90508315612530576124ee8482612964565b60408051858152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b47156126b1576018546019546017546001924792600092612551919061316b565b61255b919061316b565b601954612568908461319a565b61257291906131b9565b60185460195460175492935060009261258b919061316b565b612595919061316b565b6018546125a2908561319a565b6125ac91906131b9565b6020546040519192506001600160a01b0316908390600081818185875af1925050503d80600081146125fa576040519150601f19603f3d011682016040523d82523d6000602084013e6125ff565b606091505b50506021546040519195506001600160a01b0316908290600081818185875af1925050503d806000811461264f576040519150601f19603f3d011682016040523d82523d6000602084013e612654565b606091505b5050601f546040519195506001600160a01b0316904790600081818185875af1925050503d80600081146126a4576040519150601f19603f3d011682016040523d82523d6000602084013e6126a9565b606091505b505050505050505b505050505b506021805460ff60a01b19169055565b602a5460009060ff16612750576126dd85856129f9565b602a5460ff161580156126f557506126f58585612332565b156127505760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610994565b6001600160a01b03851660009081526001602052604081208054859290612778908490613183565b90915550600090508261278b5783612796565b612796868686612b07565b6001600160a01b0386166000908152600160205260408120805492935083929091906127c390849061316b565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161280f91815260200190565b60405180910390a350600195945050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128585761285861327d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d5919061339f565b816001815181106128e8576128e861327d565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac9479061292e908590600090869030904290600401613425565b600060405180830381600087803b15801561294857600080fd5b505af115801561295c573d6000803e3d6000fd5b505050505050565b601d546001600160a01b031663f305d71982308560008061298d6000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016129af969594939291906133bc565b60606040518083038185885af11580156129cd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129f291906133f7565b5050505050565b602a5460ff1615612a585760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610994565b612a628282612332565b158015612a7c5750601e546001600160a01b038281169116145b15610fb45743602c556001600160a01b038216600090815260056020908152604091829020805460ff199081166001908117909255602a80549091168217905542602d556021805460ff60a81b1916600160a81b17905591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15050565b601e5460009081906001600160a01b0390811690851603612b2b5750601154612b4f565b601e546001600160a01b0390811690861603612b4a5750601054612b4f565b506012545b612b598585612332565b15612b7a57602b541580612b705750602b54600114155b15612b7a57600080fd5b6000612710612b89838661319a565b612b9391906131b9565b30600090815260016020526040812080549293508392909190612bb790849061316b565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612c068185613183565b9695505050505050565b828054612c1c906130f1565b90600052602060002090601f016020900481019282612c3e5760008555612c84565b82601f10612c5757805160ff1916838001178555612c84565b82800160010185558215612c84579182015b82811115612c84578251825591602001919060010190612c69565b50612c90929150612c94565b5090565b5b80821115612c905760008155600101612c95565b600060208083528351808285015260005b81811015612cd657858101830151858201604001528201612cba565b81811115612ce8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612d1357600080fd5b50565b60008060408385031215612d2957600080fd5b8235612d3481612cfe565b946020939093013593505050565b60008060008060808587031215612d5857600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612d8957600080fd5b8335612d9481612cfe565b92506020840135612da481612cfe565b929592945050506040919091013590565b60008060408385031215612dc857600080fd5b50508035926020909101359150565b600060208284031215612de957600080fd5b81356123e981612cfe565b80358015158114612e0457600080fd5b919050565b60008060408385031215612e1c57600080fd5b8235612e2781612cfe565b9150612e3560208401612df4565b90509250929050565b600080600060608486031215612e5357600080fd5b8335612e5e81612cfe565b92506020840135612e6e81612cfe565b91506040840135612e7e81612cfe565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ec857612ec8612e89565b604052919050565b60008060408385031215612ee357600080fd5b823567ffffffffffffffff80821115612efb57600080fd5b818501915085601f830112612f0f57600080fd5b8135602082821115612f2357612f23612e89565b8160051b9250612f34818401612e9f565b8281529284018101928181019089851115612f4e57600080fd5b948201945b84861015612f785785359350612f6884612cfe565b8382529482019490820190612f53565b9650612f879050878201612df4565b9450505050509250929050565b600060208284031215612fa657600080fd5b6123e982612df4565b600082601f830112612fc057600080fd5b813567ffffffffffffffff811115612fda57612fda612e89565b612fed601f8201601f1916602001612e9f565b81815284602083860101111561300257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561303457600080fd5b833567ffffffffffffffff8082111561304c57600080fd5b61305887838801612faf565b9450602086013591508082111561306e57600080fd5b5061307b86828701612faf565b925050604084013590509250925092565b6000806040838503121561309f57600080fd5b82356130aa81612cfe565b915060208301356130ba81612cfe565b809150509250929050565b6000806000606084860312156130da57600080fd5b505081359360208301359350604090920135919050565b600181811c9082168061310557607f821691505b60208210810361312557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f21b0b63632b910109e9037bbb732b91760811b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561317e5761317e613155565b500190565b60008282101561319557613195613155565b500390565b60008160001904831182151516156131b4576131b4613155565b500290565b6000826131d657634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4d7573742062652061626f766520302e33337e25206f6620746f74616c2073756040820152643838363c9760d91b606082015260800190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000600182016132a5576132a5613155565b5060010190565b600181815b808511156132e75781600019048211156132cd576132cd613155565b808516156132da57918102915b93841c93908002906132b1565b509250929050565b6000826132fe57506001610964565b8161330b57506000610964565b8160018114613321576002811461332b57613347565b6001915050610964565b60ff84111561333c5761333c613155565b50506001821b610964565b5060208310610133831016604e8410600b841016171561336a575081810a610964565b61337483836132ac565b806000190482111561338857613388613155565b029392505050565b60006123e960ff8416836132ef565b6000602082840312156133b157600080fd5b81516123e981612cfe565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561340c57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134755784516001600160a01b031683529383019391830191600101613450565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202eb44b7cc22c3971b801de2b7fa551c2d3a91977828716b5fccbc6e485214e6064736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063751039fc1161014f578063aeb96704116100c1578063d3e5a6371161007a578063d3e5a637146107e9578063dd62ed3e146107fc578063e83e34b114610842578063e9dae5ed14610861578063eafb5a3c14610881578063fb78680d146108a157600080fd5b8063aeb9670414610706578063b2bdfa7b14610726578063b5f7bfa214610746578063bc1323e814610789578063c49b9a80146107a9578063ce8b79c9146107c957600080fd5b80638da5cb5b116101135780638da5cb5b1461060d57806395d89b411461065b578063962dfc7514610670578063a13ce2c614610690578063a457c2d7146106c6578063a9059cbb146106e657600080fd5b8063751039fc146105b857806375cb1bd1146105cd57806380c581d1146105ed578063893d20e81461060d5780638c7321ad1461062b57600080fd5b806339509351116101f35780634fbee193116101ac5780634fbee193146104f057806350a8e01614610529578063571ac8b014610543578063590ffdce1461056357806370a0823114610583578063715018a6146105a357600080fd5b806339509351146104155780633aaa36e6146104355780633f3cf56c1461046f578063452ed4f11461048f5780634a74bb02146104af5780634fb2e45d146104d057600080fd5b80631793fe4e116102455780631793fe4e1461035257806318160ddd1461037457806323b872dd1461039357806326003957146103b3578063269d1faa146103d3578063313ce567146103f357600080fd5b806303fd2a451461028d57806306fdde03146102c05780630758d924146102e2578063095ea7b31461030257806311a63e171461033257600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a361dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102cc57600080fd5b506102d56108c1565b6040516102b79190612ca9565b3480156102ee57600080fd5b50601d546102a3906001600160a01b031681565b34801561030e57600080fd5b5061032261031d366004612d16565b610953565b60405190151581526020016102b7565b34801561033e57600080fd5b50601f546102a3906001600160a01b031681565b34801561035e57600080fd5b5061037261036d366004612d42565b61096a565b005b34801561038057600080fd5b50601b545b6040519081526020016102b7565b34801561039f57600080fd5b506103226103ae366004612d74565b6109fc565b3480156103bf57600080fd5b506103726103ce366004612db5565b610a74565b3480156103df57600080fd5b506021546102a3906001600160a01b031681565b3480156103ff57600080fd5b50601a5460405160ff90911681526020016102b7565b34801561042157600080fd5b50610322610430366004612d16565b610af1565b34801561044157600080fd5b5060105460115460125461045492919083565b604080519384526020840192909252908201526060016102b7565b34801561047b57600080fd5b5061037261048a366004612db5565b610b2d565b34801561049b57600080fd5b50601e546102a3906001600160a01b031681565b3480156104bb57600080fd5b5060215461032290600160a81b900460ff1681565b3480156104dc57600080fd5b506103726104eb366004612dd7565b610baa565b3480156104fc57600080fd5b5061032261050b366004612dd7565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561053557600080fd5b50602a546103229060ff1681565b34801561054f57600080fd5b5061032261055e366004612dd7565b610d3d565b34801561056f57600080fd5b5061037261057e366004612e09565b610d4b565b34801561058f57600080fd5b5061038561059e366004612dd7565b610da0565b3480156105af57600080fd5b50610372610dbb565b3480156105c457600080fd5b50610372610e3a565b3480156105d957600080fd5b506103726105e8366004612e3e565b610e71565b3480156105f957600080fd5b50610372610608366004612e09565b610eda565b34801561061957600080fd5b506000546001600160a01b03166102a3565b34801561063757600080fd5b50610322610646366004612dd7565b60076020526000908152604090205460ff1681565b34801561066757600080fd5b506102d5610fb8565b34801561067c57600080fd5b506020546102a3906001600160a01b031681565b34801561069c57600080fd5b506103856106ab366004612dd7565b6001600160a01b03166000908152600c602052604090205490565b3480156106d257600080fd5b506103226106e1366004612d16565b610fc7565b3480156106f257600080fd5b50610322610701366004612d16565b610ffe565b34801561071257600080fd5b50610372610721366004612ed0565b611015565b34801561073257600080fd5b506000546102a3906001600160a01b031681565b34801561075257600080fd5b506016546017546018546019546107699392919084565b6040805194855260208501939093529183015260608201526080016102b7565b34801561079557600080fd5b506103726107a4366004612dd7565b611147565b3480156107b557600080fd5b506103726107c4366004612f94565b611192565b3480156107d557600080fd5b506103726107e4366004612dd7565b611214565b6103726107f736600461301f565b611262565b34801561080857600080fd5b5061038561081736600461308c565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561084e57600080fd5b5060135460145460155461045492919083565b34801561086d57600080fd5b5061037261087c3660046130c5565b61190c565b34801561088d57600080fd5b5061037261089c366004612dd7565b6119b2565b3480156108ad57600080fd5b506103726108bc366004612d42565b611cde565b6060600e80546108d0906130f1565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc906130f1565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b6000610960338484611d47565b5060015b92915050565b6000546001600160a01b0316331461099d5760405162461bcd60e51b81526004016109949061312b565b60405180910390fd5b6109a7838561316b565b61044c146109e55760405162461bcd60e51b815260206004820152600b60248201526a6c696d697420746178657360a81b6044820152606401610994565b601693909355601791909155601991909155601855565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610a61576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610a5b908490613183565b90915550505b610a6c848484611e40565b949350505050565b6000546001600160a01b03163314610a9e5760405162461bcd60e51b81526004016109949061312b565b60008183601b54610aaf919061319a565b610ab991906131b9565b905061012c601b54610acb91906131b9565b811015610aea5760405162461bcd60e51b8152600401610994906131db565b6027555050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610960918590610b2890869061316b565b611d47565b6000546001600160a01b03163314610b575760405162461bcd60e51b81526004016109949061312b565b60008183601b54610b68919061319a565b610b7291906131b9565b905061012c601b54610b8491906131b9565b811015610ba35760405162461bcd60e51b8152600401610994906131db565b6024555050565b6000546001600160a01b03163314610bd45760405162461bcd60e51b81526004016109949061312b565b6001600160a01b038116610bfa5760405162461bcd60e51b815260040161099490613220565b61deac196001600160a01b03821601610c255760405162461bcd60e51b815260040161099490613220565b60008054610c3e916001600160a01b0390911690610d4b565b610c49816001610d4b565b600054601f546001600160a01b03918216911603610c7d57601f80546001600160a01b0319166001600160a01b0383161790555b600054610c92906001600160a01b0316610da0565b600080546001600160a01b039081168252600460209081526040808420868416855290915282209290925580549091610ccb9116610da0565b1115610cf257600054610cf0906001600160a01b031682610ceb82610da0565b611e40565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600061096482600019610953565b6000546001600160a01b03163314610d755760405162461bcd60e51b81526004016109949061312b565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610de55760405162461bcd60e51b81526004016109949061312b565b60008054610dfe916001600160a01b0390911690610d4b565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610e645760405162461bcd60e51b81526004016109949061312b565b601b546024819055602755565b6000546001600160a01b03163314610e9b5760405162461bcd60e51b81526004016109949061312b565b601f80546001600160a01b039485166001600160a01b031991821617909155602180549285169282169290921790915560208054929093169116179055565b6000546001600160a01b03163314610f045760405162461bcd60e51b81526004016109949061312b565b801515600003610f3057506001600160a01b03166000908152600260205260409020805460ff19169055565b60035415610f8c5762093a8060035442610f4a9190613183565b11610f8c5760405162461bcd60e51b815260206004820152601260248201527127b732903bb2b2b59031b7b7b63237bbb71760711b6044820152606401610994565b6001600160a01b0382166000908152600260205260409020805460ff19166001179055426003555b5050565b6060600f80546108d0906130f1565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610960918590610b28908690613183565b600061100b338484611e40565b5060019392505050565b6000546001600160a01b0316331461103f5760405162461bcd60e51b81526004016109949061312b565b60005b825181101561114257600260008483815181106110615761106161327d565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161580156110d45750737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03168382815181106110c0576110c061327d565b60200260200101516001600160a01b031614155b156111305781600860008584815181106110f0576110f061327d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8061113a81613293565b915050611042565b505050565b6000546001600160a01b031633146111715760405162461bcd60e51b81526004016109949061312b565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146111bc5760405162461bcd60e51b81526004016109949061312b565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061120990831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461123e5760405162461bcd60e51b81526004016109949061312b565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b0316331461128c5760405162461bcd60e51b81526004016109949061312b565b600b5460ff16156112df5760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420616c726561647920696e697469616c697a65642e0000006044820152606401610994565b602b54156112ec57600080fd5b82516112ff90600e906020860190612c10565b50815161131390600f906020850190612c10565b50600d819055601a805460ff1916601290811790915561133490600a613390565b600d54611341919061319a565b601b55601d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156113a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cc919061339f565b6001600160a01b031663c9c65396601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611451919061339f565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561149d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c1919061339f565b601e80546001600160a01b039283166001600160a01b031991821681179092556000918252600260209081526040808420805460ff1916600117905530845260048252808420601d549095168452938152929091206000199055601f80548216738f7c8187855d1b06a64ddd0fd49b08fe6cebacf51790558154811673f871c103a534bae2c273d9a39400d6c79e3867f417909155602180549091167373cceb81f18c9217d874d0387d44ee6bbb85a04c179055606160228190556127106023819055601b5490916115929161319a565b61159c91906131b9565b602455606260258190556127106026819055601b5490916115bc9161319a565b6115c691906131b9565b602755601b54612710906115db90600561319a565b6115e591906131b9565b602855601b546103e8906115fa90600561319a565b61160491906131b9565b60295560016006600061161f6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601f548216815260068452828120805486166001908117909155935482168152828120805486168517905560215490911681528181208054851684179055308152908120805484168317905561dead81527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168217909255906005906116df6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611727737a250d5630b4cf539739df2c5dacb4c659f2488d600019610953565b5061174561173d6000546001600160a01b031690565b600019610953565b50600b805460ff19166001908117909155601b5490600061176e6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556117ba61179d6000546001600160a01b031690565b737a250d5630b4cf539739df2c5dacb4c659f2488d601b54611d47565b6000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b5460405161180d91815260200190565b60405180910390a3600054601d54611834916001600160a01b039081169116600019611d47565b601d5461184e9030906001600160a01b0316600019611d47565b600054611868906001600160a01b031630610ceb82610da0565b50601d546001600160a01b031663f305d719473061188581610da0565b60008061189a6000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016118bc969594939291906133bc565b60606040518083038185885af11580156118da573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118ff91906133f7565b50505061114260016122f4565b6000546001600160a01b031633146119365760405162461bcd60e51b81526004016109949061312b565b601354831180159061194a57506014548211155b801561195857506015548111155b6119a45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610994565b601092909255601155601255565b6000546001600160a01b031633146119dc5760405162461bcd60e51b81526004016109949061312b565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a45919061339f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab6919061339f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b25919061339f565b90506001600160a01b038116611c9e57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b97919061339f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c08919061339f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c79919061339f565b601e80546001600160a01b0319166001600160a01b0392909216919091179055611cba565b601e80546001600160a01b0319166001600160a01b0383161790555b50601d80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611d085760405162461bcd60e51b81526004016109949061312b565b8284601b54611d17919061319a565b611d2191906131b9565b602855601b548190611d3490849061319a565b611d3e91906131b9565b60295550505050565b6001600160a01b038316611d935760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610994565b6001600160a01b038216611ddf5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610994565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611e8f5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610994565b6001600160a01b038316611edc5760405162461bcd60e51b815260206004820152601460248201527322a92199181d102d32b9379030b2323932b9b99760611b6044820152606401610994565b60008211611f175760405162461bcd60e51b815260206004820152600860248201526726bab9ba101f181760c11b6044820152606401610994565b6001600160a01b03831660009081526008602052604090205460ff16158015611f5957506001600160a01b03841660009081526008602052604090205460ff16155b611f975760405162461bcd60e51b815260206004820152600f60248201526e756e61626c6520746f20747261646560881b6044820152606401610994565b611fa18484612332565b156121e15760095460ff1615612058576001600160a01b03841660009081526002602052604090205460ff1615612017576001600160a01b0383166000908152600a6020526040902054439003611ff757600080fd5b6001600160a01b0383166000908152600a60205260409020439055612058565b6001600160a01b0384166000908152600a602052604090205443900361203c57600080fd5b6001600160a01b0384166000908152600a602052604090204390555b6001600160a01b03841660009081526007602052604090205460ff168061209757506001600160a01b03831660009081526007602052604090205460ff165b6121e1576001600160a01b03841660009081526002602052604090205460ff16806120da57506001600160a01b03831660009081526002602052604090205460ff165b15612131576024548211156121315760405162461bcd60e51b815260206004820152601860248201527f4578636565647320746865206d61785478416d6f756e742e00000000000000006044820152606401610994565b6001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d1480159061217757506001600160a01b03831660009081526002602052604090205460ff16155b156121e1576027548261218985610da0565b612193919061316b565b11156121e15760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610994565b6001600160a01b038316600090815260016020526040812054900361221c576001600160a01b0383166000908152600c602052604090204290555b6001600160a01b03841660009081526006602052604090205460019060ff168061225e57506001600160a01b03841660009081526006602052604090205460ff165b15612267575060005b6001600160a01b03841660009081526002602052604090205460ff16156122df57602154600160a01b900460ff161580156122ab5750602154600160a81b900460ff165b156122df5760006122bb30610da0565b905060285481106122dd5760295481106122d457506029545b6122dd816123f0565b505b6122eb858585846126c6565b95945050505050565b602b541561232d5760405162461bcd60e51b815260206004820152600660248201526522b93937b91760d11b6044820152606401610994565b602b55565b600080546001600160a01b0384811691161480159061235f57506000546001600160a01b03838116911614155b801561238457506001600160a01b03821660009081526005602052604090205460ff16155b80156123a957506001600160a01b03831660009081526005602052604090205460ff16155b80156123c057506001600160a01b03821661dead14155b80156123d457506001600160a01b03821615155b80156123e957506001600160a01b0383163014155b9392505050565b6021805460ff60a01b1916600160a01b179055601754601654612413919061316b565b156126b65760185460195460175460165460009360029390929091612438919061316b565b612442919061316b565b61244c919061316b565b601654612459908561319a565b61246391906131b9565b61246d91906131b9565b9050600061247b8284613183565b905061248681612823565b6018546019546017546016544793600093600293919290916124a79161316b565b6124b1919061316b565b6124bb919061316b565b6016546124c8908561319a565b6124d291906131b9565b6124dc91906131b9565b90508315612530576124ee8482612964565b60408051858152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b47156126b1576018546019546017546001924792600092612551919061316b565b61255b919061316b565b601954612568908461319a565b61257291906131b9565b60185460195460175492935060009261258b919061316b565b612595919061316b565b6018546125a2908561319a565b6125ac91906131b9565b6020546040519192506001600160a01b0316908390600081818185875af1925050503d80600081146125fa576040519150601f19603f3d011682016040523d82523d6000602084013e6125ff565b606091505b50506021546040519195506001600160a01b0316908290600081818185875af1925050503d806000811461264f576040519150601f19603f3d011682016040523d82523d6000602084013e612654565b606091505b5050601f546040519195506001600160a01b0316904790600081818185875af1925050503d80600081146126a4576040519150601f19603f3d011682016040523d82523d6000602084013e6126a9565b606091505b505050505050505b505050505b506021805460ff60a01b19169055565b602a5460009060ff16612750576126dd85856129f9565b602a5460ff161580156126f557506126f58585612332565b156127505760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610994565b6001600160a01b03851660009081526001602052604081208054859290612778908490613183565b90915550600090508261278b5783612796565b612796868686612b07565b6001600160a01b0386166000908152600160205260408120805492935083929091906127c390849061316b565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161280f91815260200190565b60405180910390a350600195945050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128585761285861327d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d5919061339f565b816001815181106128e8576128e861327d565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b815291169063791ac9479061292e908590600090869030904290600401613425565b600060405180830381600087803b15801561294857600080fd5b505af115801561295c573d6000803e3d6000fd5b505050505050565b601d546001600160a01b031663f305d71982308560008061298d6000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016129af969594939291906133bc565b60606040518083038185885af11580156129cd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129f291906133f7565b5050505050565b602a5460ff1615612a585760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610994565b612a628282612332565b158015612a7c5750601e546001600160a01b038281169116145b15610fb45743602c556001600160a01b038216600090815260056020908152604091829020805460ff199081166001908117909255602a80549091168217905542602d556021805460ff60a81b1916600160a81b17905591519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a15050565b601e5460009081906001600160a01b0390811690851603612b2b5750601154612b4f565b601e546001600160a01b0390811690861603612b4a5750601054612b4f565b506012545b612b598585612332565b15612b7a57602b541580612b705750602b54600114155b15612b7a57600080fd5b6000612710612b89838661319a565b612b9391906131b9565b30600090815260016020526040812080549293508392909190612bb790849061316b565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612c068185613183565b9695505050505050565b828054612c1c906130f1565b90600052602060002090601f016020900481019282612c3e5760008555612c84565b82601f10612c5757805160ff1916838001178555612c84565b82800160010185558215612c84579182015b82811115612c84578251825591602001919060010190612c69565b50612c90929150612c94565b5090565b5b80821115612c905760008155600101612c95565b600060208083528351808285015260005b81811015612cd657858101830151858201604001528201612cba565b81811115612ce8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612d1357600080fd5b50565b60008060408385031215612d2957600080fd5b8235612d3481612cfe565b946020939093013593505050565b60008060008060808587031215612d5857600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612d8957600080fd5b8335612d9481612cfe565b92506020840135612da481612cfe565b929592945050506040919091013590565b60008060408385031215612dc857600080fd5b50508035926020909101359150565b600060208284031215612de957600080fd5b81356123e981612cfe565b80358015158114612e0457600080fd5b919050565b60008060408385031215612e1c57600080fd5b8235612e2781612cfe565b9150612e3560208401612df4565b90509250929050565b600080600060608486031215612e5357600080fd5b8335612e5e81612cfe565b92506020840135612e6e81612cfe565b91506040840135612e7e81612cfe565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ec857612ec8612e89565b604052919050565b60008060408385031215612ee357600080fd5b823567ffffffffffffffff80821115612efb57600080fd5b818501915085601f830112612f0f57600080fd5b8135602082821115612f2357612f23612e89565b8160051b9250612f34818401612e9f565b8281529284018101928181019089851115612f4e57600080fd5b948201945b84861015612f785785359350612f6884612cfe565b8382529482019490820190612f53565b9650612f879050878201612df4565b9450505050509250929050565b600060208284031215612fa657600080fd5b6123e982612df4565b600082601f830112612fc057600080fd5b813567ffffffffffffffff811115612fda57612fda612e89565b612fed601f8201601f1916602001612e9f565b81815284602083860101111561300257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561303457600080fd5b833567ffffffffffffffff8082111561304c57600080fd5b61305887838801612faf565b9450602086013591508082111561306e57600080fd5b5061307b86828701612faf565b925050604084013590509250925092565b6000806040838503121561309f57600080fd5b82356130aa81612cfe565b915060208301356130ba81612cfe565b809150509250929050565b6000806000606084860312156130da57600080fd5b505081359360208301359350604090920135919050565b600181811c9082168061310557607f821691505b60208210810361312557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f21b0b63632b910109e9037bbb732b91760811b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561317e5761317e613155565b500190565b60008282101561319557613195613155565b500390565b60008160001904831182151516156131b4576131b4613155565b500290565b6000826131d657634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4d7573742062652061626f766520302e33337e25206f6620746f74616c2073756040820152643838363c9760d91b606082015260800190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000600182016132a5576132a5613155565b5060010190565b600181815b808511156132e75781600019048211156132cd576132cd613155565b808516156132da57918102915b93841c93908002906132b1565b509250929050565b6000826132fe57506001610964565b8161330b57506000610964565b8160018114613321576002811461332b57613347565b6001915050610964565b60ff84111561333c5761333c613155565b50506001821b610964565b5060208310610133831016604e8410600b841016171561336a575081810a610964565b61337483836132ac565b806000190482111561338857613388613155565b029392505050565b60006123e960ff8416836132ef565b6000602082840312156133b157600080fd5b81516123e981612cfe565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561340c57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134755784516001600160a01b031683529383019391830191600101613450565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202eb44b7cc22c3971b801de2b7fa551c2d3a91977828716b5fccbc6e485214e6064736f6c634300080e0033

Deployed Bytecode Sourcemap

3674:21099:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5745:73;;;;;;;;;;;;5776:42;5745:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;5745:73:0;;;;;;;;9512:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5574:35::-;;;;;;;;;;-1:-1:-1;5574:35:0;;;;-1:-1:-1;;;;;5574:35:0;;;10125:161;;;;;;;;;;-1:-1:-1;10125:161:0;;;;;:::i;:::-;;:::i;:::-;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;10125:161:0;1514:187:1;5891:25:0;;;;;;;;;;-1:-1:-1;5891:25:0;;;;-1:-1:-1;;;;;5891:25:0;;;15869:343;;;;;;;;;;-1:-1:-1;15869:343:0;;;;;:::i;:::-;;:::i;:::-;;9247:83;;;;;;;;;;-1:-1:-1;9320:7:0;;9247:83;;;2242:25:1;;;2230:2;2215:18;9247:83:0;2096:177:1;10858:306:0;;;;;;;;;;-1:-1:-1;10858:306:0;;;;;:::i;:::-;;:::i;17016:257::-;;;;;;;;;;-1:-1:-1;17016:257:0;;;;;:::i;:::-;;:::i;5961:30::-;;;;;;;;;;-1:-1:-1;5961:30:0;;;;-1:-1:-1;;;;;5961:30:0;;;9336:80;;;;;;;;;;-1:-1:-1;9404:9:0;;9336:80;;9404:9;;;;3134:36:1;;3122:2;3107:18;9336:80:0;2992:184:1;11172:215:0;;;;;;;;;;-1:-1:-1;11172:215:0;;;;;:::i;:::-;;:::i;4703:80::-;;;;;;;;;;-1:-1:-1;4703:80:0;;;;;;;;;;;;;;;;3383:25:1;;;3439:2;3424:18;;3417:34;;;;3467:18;;;3460:34;3371:2;3356:18;4703:80:0;3181:319:1;16756:252:0;;;;;;;;;;-1:-1:-1;16756:252:0;;;;;:::i;:::-;;:::i;5616:21::-;;;;;;;;;;-1:-1:-1;5616:21:0;;;;-1:-1:-1;;;;;5616:21:0;;;6032:41;;;;;;;;;;-1:-1:-1;6032:41:0;;;;-1:-1:-1;;;6032:41:0;;;;;;7936:749;;;;;;;;;;-1:-1:-1;7936:749:0;;;;;:::i;:::-;;:::i;11628:125::-;;;;;;;;;;-1:-1:-1;11628:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;11717:28:0;11693:4;11717:28;;;:19;:28;;;;;;;;;11628:125;6385:36;;;;;;;;;;-1:-1:-1;6385:36:0;;;;;;;;10611:120;;;;;;;;;;-1:-1:-1;10611:120:0;;;;;:::i;:::-;;:::i;15379:134::-;;;;;;;;;;-1:-1:-1;15379:134:0;;;;;:::i;:::-;;:::i;9825:117::-;;;;;;;;;;-1:-1:-1;9825:117:0;;;;;:::i;:::-;;:::i;8693:195::-;;;;;;;;;;;;;:::i;16629:119::-;;;;;;;;;;;;;:::i;17578:299::-;;;;;;;;;;-1:-1:-1;17578:299:0;;;;;:::i;:::-;;:::i;12274:410::-;;;;;;;;;;-1:-1:-1;12274:410:0;;;;;:::i;:::-;;:::i;9598:80::-;;;;;;;;;;-1:-1:-1;9650:7:0;7914:6;-1:-1:-1;;;;;7914:6:0;9598:80;;4144:68;;;;;;;;;;-1:-1:-1;4144:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9422:84;;;;;;;;;;;;;:::i;5923:31::-;;;;;;;;;;-1:-1:-1;5923:31:0;;;;-1:-1:-1;;;;;5923:31:0;;;10739:111;;;;;;;;;;-1:-1:-1;10739:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;10825:17:0;10798:7;10825:17;;;:8;:17;;;;;;;10739:111;11395:225;;;;;;;;;;-1:-1:-1;11395:225:0;;;;;:::i;:::-;;:::i;9950:167::-;;;;;;;;;;-1:-1:-1;9950:167:0;;;;;:::i;:::-;;:::i;18069:326::-;;;;;;;;;;-1:-1:-1;18069:326:0;;;;;:::i;:::-;;:::i;3783:21::-;;;;;;;;;;-1:-1:-1;3783:21:0;;;;-1:-1:-1;;;;;3783:21:0;;;5216:113;;;;;;;;;;-1:-1:-1;5216:113:0;;;;;;;;;;;;;;;;;;;6539:25:1;;;6595:2;6580:18;;6573:34;;;;6623:18;;;6616:34;6681:2;6666:18;;6659:34;6526:3;6511:19;5216:113:0;6308:391:1;15689:166:0;;;;;;;;;;-1:-1:-1;15689:166:0;;;;;:::i;:::-;;:::i;17885:171::-;;;;;;;;;;-1:-1:-1;17885:171:0;;;;;:::i;:::-;;:::i;15523:158::-;;;;;;;;;;-1:-1:-1;15523:158:0;;;;;:::i;:::-;;:::i;12852:2519::-;;;;;;:::i;:::-;;:::i;9684:133::-;;;;;;;;;;-1:-1:-1;9684:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;9786:19:0;;;9768:7;9786:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;9684:133;4934:92;;;;;;;;;;-1:-1:-1;4934:92:0;;;;;;;;;;;;16222:399;;;;;;;;;;-1:-1:-1;16222:399:0;;;;;:::i;:::-;;:::i;11765:501::-;;;;;;;;;;-1:-1:-1;11765:501:0;;;;;:::i;:::-;;:::i;17281:289::-;;;;;;;;;;-1:-1:-1;17281:289:0;;;;;:::i;:::-;;:::i;9512:80::-;9560:13;9584:5;9577:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9512:80;:::o;10125:161::-;10200:4;10217:39;226:10;10240:7;10249:6;10217:8;:39::i;:::-;-1:-1:-1;10274:4:0;10125:161;;;;;:::o;15869:343::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;;;;;;;;;15996:21:::1;16007:10:::0;15996;:21:::1;:::i;:::-;16022:4;15995:31;15985:57;;;::::0;-1:-1:-1;;;15985:57:0;;9952:2:1;15985:57:0::1;::::0;::::1;9934:21:1::0;9991:2;9971:18;;;9964:30;-1:-1:-1;;;10010:18:1;;;10003:41;10061:18;;15985:57:0::1;9750:335:1::0;15985:57:0::1;16053:6;:29:::0;;;;16093:16;:29;;;;16133:16;:29;;;;16173:15;:27;15869:343::o;10858:306::-;-1:-1:-1;;;;;10979:19:0;;10958:4;10979:19;;;:11;:19;;;;;;;;10999:10;10979:31;;;;;;;;-1:-1:-1;;10979:52:0;10975:126;;-1:-1:-1;;;;;11048:19:0;;;;;;:11;:19;;;;;;;;11068:10;11048:31;;;;;;;:41;;11083:6;;11048:19;:41;;11083:6;;11048:41;:::i;:::-;;;;-1:-1:-1;;10975:126:0;11120:36;11130:6;11138:9;11149:6;11120:9;:36::i;:::-;11113:43;10858:306;-1:-1:-1;;;;10858:306:0:o;17016:257::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;17100:13:::1;17138:7;17127;17117;;:17;;;;:::i;:::-;17116:29;;;;:::i;:::-;17100:45;;17184:3;17174:7;;:13;;;;:::i;:::-;17164:5;:24;;17156:74;;;;-1:-1:-1::0;;;17156:74:0::1;;;;;;;:::i;:::-;17241:14;:22:::0;-1:-1:-1;;17016:257:0:o;11172:215::-;226:10;11260:4;11309:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11309:34:0;;;;;;;;;;11260:4;;11277:80;;11300:7;;11309:47;;11346:10;;11309:47;:::i;:::-;11277:8;:80::i;16756:252::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;16839:13:::1;16877:7;16866;16856;;:17;;;;:::i;:::-;16855:29;;;;:::i;:::-;16839:45;;16923:3;16913:7;;:13;;;;:::i;:::-;16903:5;:24;;16895:74;;;;-1:-1:-1::0;;;16895:74:0::1;;;;;;;:::i;:::-;16980:12;:20:::0;-1:-1:-1;;16756:252:0:o;7936:749::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8017:22:0;::::1;8009:96;;;;-1:-1:-1::0;;;8009:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;8124:16:0;::::1;::::0;8116:90:::1;;;;-1:-1:-1::0;;;8116:90:0::1;;;;;;;:::i;:::-;8237:6;::::0;;8217:34:::1;::::0;-1:-1:-1;;;;;8237:6:0;;::::1;::::0;8217:19:::1;:34::i;:::-;8262:35;8282:8;8292:4;8262:19;:35::i;:::-;8344:6;::::0;8322:10:::1;::::0;-1:-1:-1;;;;;8344:6:0;;::::1;8322:10:::0;::::1;:29:::0;8318:78:::1;;8366:10;:30:::0;;-1:-1:-1;;;;;;8366:30:0::1;-1:-1:-1::0;;;;;8366:30:0;::::1;;::::0;;8318:78:::1;8459:6;::::0;8449:17:::1;::::0;-1:-1:-1;;;;;8459:6:0::1;8449:9;:17::i;:::-;8417:19;8429:6:::0;;-1:-1:-1;;;;;8429:6:0;;::::1;8417:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;8490:6;;8417:19;;8480:17:::1;::::0;8490:6:::1;8480:9;:17::i;:::-;:21;8477:99;;;8528:6;::::0;8518:46:::1;::::0;-1:-1:-1;;;;;8528:6:0::1;8536:8:::0;8546:17:::1;8528:6:::0;8546:9:::1;:17::i;:::-;8518:9;:46::i;:::-;;8477:99;8596:6;:17:::0;;-1:-1:-1;;;;;;8596:17:0::1;-1:-1:-1::0;;;;;8596:17:0;::::1;::::0;;::::1;::::0;;8629:38:::1;::::0;8596:17;;;;8629:38:::1;::::0;8596:6;8629:38:::1;7936:749:::0;:::o;10611:120::-;10664:4;10688:35;10696:7;-1:-1:-1;;10688:7:0;:35::i;15379:134::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15467:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15467:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15379:134::o;9825:117::-;-1:-1:-1;;;;;9918:16:0;9891:7;9918:16;;;:7;:16;;;;;;;9825:117::o;8693:195::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;8780:6:::1;::::0;;8760:34:::1;::::0;-1:-1:-1;;;;;8780:6:0;;::::1;::::0;8760:19:::1;:34::i;:::-;8822:1;8805:19:::0;;-1:-1:-1;;;;;;8805:19:0::1;::::0;;8840:40:::1;::::0;8822:1;;8840:40:::1;::::0;8822:1;;8840:40:::1;8693:195::o:0;16629:119::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;16698:7:::1;::::0;16683:12:::1;:22:::0;;;16716:14:::1;:24:::0;16629:119::o;17578:299::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;17726:10:::1;:37:::0;;-1:-1:-1;;;;;17726:37:0;;::::1;-1:-1:-1::0;;;;;;17726:37:0;;::::1;;::::0;;;17774:15:::1;:41:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;17826:16:::1;:43:::0;;;;;::::1;::::0;::::1;;::::0;;17578:299::o;12274:410::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;12355:16;::::1;;12366:5;12355:16:::0;12351:326:::1;;-1:-1:-1::0;;;;;;12388:13:0::1;12404:5;12388:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;12388:21:0::1;::::0;;12274:410::o;12351:326::-:1;12446:17;::::0;:22;12442:139:::1;;12535:7;12515:17;;12497:15;:35;;;;:::i;:::-;:45;12489:76;;;::::0;-1:-1:-1;;;12489:76:0;;11653:2:1;12489:76:0::1;::::0;::::1;11635:21:1::0;11692:2;11672:18;;;11665:30;-1:-1:-1;;;11711:18:1;;;11704:48;11769:18;;12489:76:0::1;11451:342:1::0;12489:76:0::1;-1:-1:-1::0;;;;;12595:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;12595:20:0::1;12611:4;12595:20;::::0;;12650:15:::1;12630:17;:35:::0;12351:326:::1;12274:410:::0;;:::o;9422:84::-;9472:13;9496:7;9489:14;;;;;:::i;11395:225::-;226:10;11488:4;11537:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11537:34:0;;;;;;;;;;11488:4;;11505:85;;11528:7;;11537:52;;11574:15;;11537:52;:::i;9950:167::-;10028:4;10045:42;226:10;10069:9;10080:6;10045:9;:42::i;:::-;-1:-1:-1;10105:4:0;;9950:167;-1:-1:-1;;;9950:167:0:o;18069:326::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;18167:6:::1;18162:226;18183:12;:19;18179:1;:23;18162:226;;;18229:7;:24;18237:12;18250:1;18237:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;18229:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;18229:24:0;;::::1;;18228:25;:71:::0;::::1;;;;5690:42;-1:-1:-1::0;;;;;18257:42:0::1;:12;18270:1;18257:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;18257:42:0::1;;;18228:71;18224:153;;;18354:7;18320:14;:31;18335:12;18348:1;18335:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;18320:31:0::1;-1:-1:-1::0;;;;;18320:31:0::1;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;18224:153;18204:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18162:226;;;;18069:326:::0;;:::o;15689:166::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15787:52:0::1;15842:5;15787:52:::0;;;:35:::1;:52;::::0;;;;:60;;-1:-1:-1;;15787:60:0::1;::::0;;15689:166::o;17885:171::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;17962:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;17962:32:0::1;-1:-1:-1::0;;;;17962:32:0;;::::1;;::::0;;18010:38:::1;::::0;::::1;::::0;::::1;::::0;17986:8;1679:14:1;1672:22;1654:41;;1642:2;1627:18;;1514:187;18010:38:0::1;;;;;;;;17885:171:::0;:::o;15523:158::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15614:52:0::1;;::::0;;;:35:::1;:52;::::0;;;;:59;;-1:-1:-1;;15614:59:0::1;15669:4;15614:59;::::0;;15523:158::o;12852:2519::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;12996:13:::1;::::0;::::1;;12995:14;12987:56;;;::::0;-1:-1:-1;;;12987:56:0;;12272:2:1;12987:56:0::1;::::0;::::1;12254:21:1::0;12311:2;12291:18;;;12284:30;12350:31;12330:18;;;12323:59;12399:18;;12987:56:0::1;12070:353:1::0;12987:56:0::1;13062:13;::::0;:18;13054:27:::1;;;::::0;::::1;;13102:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13129:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13162:14:0::1;:27:::0;;;13200:9:::1;:14:::0;;-1:-1:-1;;13200:14:0::1;13212:2;13200:14:::0;;::::1;::::0;;;13252:13:::1;::::0;:2:::1;:13;:::i;:::-;13235:14;;:30;;;;:::i;:::-;13225:7;:40:::0;13278:9:::1;:46:::0;;-1:-1:-1;;;;;;13278:46:0::1;5690:42;13278:46:::0;;::::1;::::0;;;13362:19:::1;::::0;;-1:-1:-1;;;13362:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;5690:42;13362:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13344:49:0::1;;13394:9;;;;;;;;;-1:-1:-1::0;;;;;13394:9:0::1;-1:-1:-1::0;;;;;13394:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13344:82;::::0;-1:-1:-1;;;;;;13344:82:0::1;::::0;;;;;;-1:-1:-1;;;;;14297:15:1;;;13344:82:0::1;::::0;::::1;14279:34:1::0;13420:4:0::1;14329:18:1::0;;;14322:43;14214:18;;13344:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13335:6;:91:::0;;-1:-1:-1;;;;;13335:91:0;;::::1;-1:-1:-1::0;;;;;;13335:91:0;;::::1;::::0;::::1;::::0;;;:6:::1;13437:15:::0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;13437:22:0::1;13335:91:::0;13437:22:::1;::::0;;13490:4:::1;13470:26:::0;;:11:::1;:26:::0;;;;;13505:9:::1;::::0;;;::::1;13470:46:::0;;;;;;;;;-1:-1:-1;;13470:66:0;;13549:10:::1;:64:::0;;;::::1;13570:42;13549:64;::::0;;13624:70;;;::::1;13651:42;13624:70;::::0;;;13705:15:::1;:69:::0;;;;::::1;13731:42;13705:69;::::0;;13802:2:::1;13787:12;:17:::0;;;13866:5:::1;13851:12;:20:::0;;;13898:7:::1;::::0;13866:5;;13898:22:::1;::::0;::::1;:::i;:::-;13897:39;;;;:::i;:::-;13882:12;:54:::0;13976:2:::1;13957:16;:21:::0;;;14029:5:::1;14010:16;:24:::0;;;14063:7:::1;::::0;14029:5;;14063:26:::1;::::0;::::1;:::i;:::-;14062:47;;;;:::i;:::-;14045:14;:64:::0;14147:7:::1;::::0;14162:6:::1;::::0;14147:11:::1;::::0;14157:1:::1;14147:11;:::i;:::-;14146:22;;;;:::i;:::-;14130:13;:38:::0;14193:7:::1;::::0;14208:5:::1;::::0;14193:11:::1;::::0;14203:1:::1;14193:11;:::i;:::-;14192:21;;;;:::i;:::-;14179:10;:34:::0;14257:4:::1;14226:19;:28;14246:7;7887::::0;7914:6;-1:-1:-1;;;;;7914:6:0;;7849:79;14246:7:::1;-1:-1:-1::0;;;;;14226:28:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;14226:28:0;;;:35;;;::::1;;-1:-1:-1::0;;14226:35:0;;::::1;;::::0;;14292:10:::1;::::0;;::::1;14272:31:::0;;:19:::1;:31:::0;;;;;:38;;;::::1;14226:35:::0;14272:38;;::::1;::::0;;;14341:16;;;::::1;14321:37:::0;;;;;:44;;;::::1;::::0;::::1;::::0;;14396:15:::1;::::0;;;::::1;14376:36:::0;;;;;:43;;;::::1;::::0;::::1;::::0;;14458:4:::1;14430:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;5776:42:::1;14482:25:::0;;;:32;;;;::::1;::::0;::::1;::::0;;;14226:35;14525:17:::1;::::0;14543:7:::1;7887::::0;7914:6;-1:-1:-1;;;;;7914:6:0;;7849:79;14543:7:::1;-1:-1:-1::0;;;;;14525:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14525:26:0;:33;;-1:-1:-1;;14525:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14573:42:::1;5690;-1:-1:-1::0;;14573:7:0::1;:42::i;:::-;;14626:35;14634:7;7887::::0;7914:6;-1:-1:-1;;;;;7914:6:0;;7849:79;14634:7:::1;-1:-1:-1::0;;14626:7:0::1;:35::i;:::-;-1:-1:-1::0;14676:13:0::1;:20:::0;;-1:-1:-1;;14676:20:0::1;14692:4;14676:20:::0;;::::1;::::0;;;14726:7:::1;::::0;;14676:13:::1;14715:7;7887::::0;7914:6;-1:-1:-1;;;;;7914:6:0;;7849:79;14715:7:::1;-1:-1:-1::0;;;;;14707:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14707:16:0;:26;14744:42:::1;14753:7;7887::::0;7914:6;-1:-1:-1;;;;;7914:6:0;;7849:79;14753:7:::1;5690:42;14778:7;;14744:8;:42::i;:::-;7887:7:::0;7914:6;-1:-1:-1;;;;;7914:6:0;-1:-1:-1;;;;;14802:38:0::1;14819:1;-1:-1:-1::0;;;;;14802:38:0::1;;14832:7;;14802:38;;;;2242:25:1::0;;2230:2;2215:18;;2096:177;14802:38:0::1;;;;;;;;14863:6;::::0;14879:9:::1;::::0;14854:55:::1;::::0;-1:-1:-1;;;;;14863:6:0;;::::1;::::0;14879:9:::1;-1:-1:-1::0;;14854:8:0::1;:55::i;:::-;14952:9;::::0;14920:62:::1;::::0;14937:4:::1;::::0;-1:-1:-1;;;;;14952:9:0::1;-1:-1:-1::0;;14920:8:0::1;:62::i;:::-;15011:6;::::0;15001:51:::1;::::0;-1:-1:-1;;;;;15011:6:0::1;15027:4;15034:17;15011:6:::0;15034:9:::1;:17::i;15001:51::-;-1:-1:-1::0;15065:9:0::1;::::0;-1:-1:-1;;;;;15065:9:0::1;:25;15098:21;15143:4;15163:24;15143:4:::0;15163:9:::1;:24::i;:::-;15202:1;15245::::0;15288:7:::1;7887::::0;7914:6;-1:-1:-1;;;;;7914:6:0;;7849:79;15288:7:::1;15310:15;15065:271;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15347:16;15361:1;15347:13;:16::i;16222:399::-:0;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;16337:7:::1;:14:::0;16326:25;::::1;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;16384:15:0;;16372:27;::::1;;16326:73;:129;;;;-1:-1:-1::0;16436:19:0;;16420:35;::::1;;16326:129;16318:182;;;::::0;-1:-1:-1;;;16318:182:0;;15501:2:1;16318:182:0::1;::::0;::::1;15483:21:1::0;15540:2;15520:18;;;15513:30;15579:25;15559:18;;;15552:53;15622:18;;16318:182:0::1;15299:347:1::0;16318:182:0::1;16512:4;:21:::0;;;;16545:12;:23;16580:16;:31;16222:399::o;11765:501::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;11836:29:::1;11887:9;11836:61;;11908:16;11945:10;-1:-1:-1::0;;;;;11945:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11927:47:0::1;;11983:4;11990:10;-1:-1:-1::0;;;;;11990:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11927:81;::::0;-1:-1:-1;;;;;;11927:81:0::1;::::0;;;;;;-1:-1:-1;;;;;14297:15:1;;;11927:81:0::1;::::0;::::1;14279:34:1::0;14349:15;;14329:18;;;14322:43;14214:18;;11927:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11908:100:::0;-1:-1:-1;;;;;;12023:22:0;::::1;12019:207;;12089:10;-1:-1:-1::0;;;;;12089:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12071:50:0::1;;12130:4;12137:10;-1:-1:-1::0;;;;;12137:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12071:84;::::0;-1:-1:-1;;;;;;12071:84:0::1;::::0;;;;;;-1:-1:-1;;;;;14297:15:1;;;12071:84:0::1;::::0;::::1;14279:34:1::0;14349:15;;14329:18;;;14322:43;14214:18;;12071:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12062:6;:93:::0;;-1:-1:-1;;;;;;12062:93:0::1;-1:-1:-1::0;;;;;12062:93:0;;;::::1;::::0;;;::::1;::::0;;12019:207:::1;;;12197:6;:17:::0;;-1:-1:-1;;;;;;12197:17:0::1;-1:-1:-1::0;;;;;12197:17:0;::::1;;::::0;;12019:207:::1;-1:-1:-1::0;12236:9:0::1;:22:::0;;-1:-1:-1;;;;;;12236:22:0::1;-1:-1:-1::0;;;;;12236:22:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;11765:501:0:o;17281:289::-;7131:6;;-1:-1:-1;;;;;7131:6:0;226:10;7131:22;7123:51;;;;-1:-1:-1;;;7123:51:0;;;;;;;:::i;:::-;17481:16:::1;17461;17451:7;;:26;;;;:::i;:::-;17450:47;;;;:::i;:::-;17434:13;:63:::0;17522:7:::1;::::0;17549:13;;17522:23:::1;::::0;17532:13;;17522:23:::1;:::i;:::-;17521:41;;;;:::i;:::-;17508:10;:54:::0;-1:-1:-1;;;;17281:289:0:o;10294:309::-;-1:-1:-1;;;;;10388:20:0;;10380:52;;;;-1:-1:-1;;;10380:52:0;;15853:2:1;10380:52:0;;;15835:21:1;15892:2;15872:18;;;15865:30;-1:-1:-1;;;15911:18:1;;;15904:49;15970:18;;10380:52:0;15651:343:1;10380:52:0;-1:-1:-1;;;;;10451:21:0;;10443:53;;;;-1:-1:-1;;;10443:53:0;;15853:2:1;10443:53:0;;;15835:21:1;15892:2;15872:18;;;15865:30;-1:-1:-1;;;15911:18:1;;;15904:49;15970:18;;10443:53:0;15651:343:1;10443:53:0;-1:-1:-1;;;;;10509:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;10562:33;;2242:25:1;;;10562:33:0;;2215:18:1;10562:33:0;;;;;;;10294:309;;;:::o;18734:2003::-;18813:4;-1:-1:-1;;;;;18838:18:0;;18830:51;;;;-1:-1:-1;;;18830:51:0;;16201:2:1;18830:51:0;;;16183:21:1;16240:2;16220:18;;;16213:30;-1:-1:-1;;;16259:18:1;;;16252:50;16319:18;;18830:51:0;15999:344:1;18830:51:0;-1:-1:-1;;;;;18900:16:0;;18892:49;;;;-1:-1:-1;;;18892:49:0;;16201:2:1;18892:49:0;;;16183:21:1;16240:2;16220:18;;;16213:30;-1:-1:-1;;;16259:18:1;;;16252:50;16319:18;;18892:49:0;15999:344:1;18892:49:0;18969:1;18960:6;:10;18952:31;;;;-1:-1:-1;;;18952:31:0;;16550:2:1;18952:31:0;;;16532:21:1;16589:1;16569:18;;;16562:29;-1:-1:-1;;;16607:18:1;;;16600:38;16655:18;;18952:31:0;16348:331:1;18952:31:0;-1:-1:-1;;;;;19003:18:0;;;;;;:14;:18;;;;;;;;19002:19;:44;;;;-1:-1:-1;;;;;;19026:20:0;;;;;;:14;:20;;;;;;;;19025:21;19002:44;18994:71;;;;-1:-1:-1;;;18994:71:0;;16886:2:1;18994:71:0;;;16868:21:1;16925:2;16905:18;;;16898:30;-1:-1:-1;;;16944:18:1;;;16937:45;16999:18;;18994:71:0;16684:339:1;18994:71:0;19079:20;19090:4;19096:2;19079:10;:20::i;:::-;19076:891;;;19120:15;;;;19116:373;;;-1:-1:-1;;;;;19160:13:0;;;;;;:7;:13;;;;;;;;19156:318;;;-1:-1:-1;;;;;19205:13:0;;;;;;:9;:13;;;;;;19222:12;19205:29;;19197:38;;;;;;-1:-1:-1;;;;;19258:13:0;;;;;;:9;:13;;;;;19274:12;19258:28;;19156:318;;;-1:-1:-1;;;;;19365:15:0;;;;;;:9;:15;;;;;;19384:12;19365:31;;19357:40;;;;;;-1:-1:-1;;;;;19420:15:0;;;;;;:9;:15;;;;;19438:12;19420:30;;19156:318;-1:-1:-1;;;;;19508:41:0;;;;;;:35;:41;;;;;;;;;:84;;-1:-1:-1;;;;;;19553:39:0;;;;;;:35;:39;;;;;;;;19508:84;19503:439;;-1:-1:-1;;;;;19617:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;19634:11:0;;;;;;:7;:11;;;;;;;;19617:28;19614:130;;;19683:12;;19673:6;:22;;19665:59;;;;-1:-1:-1;;;19665:59:0;;17230:2:1;19665:59:0;;;17212:21:1;17269:2;17249:18;;;17242:30;17308:26;17288:18;;;17281:54;17352:18;;19665:59:0;17028:348:1;19665:59:0;-1:-1:-1;;;;;19765:20:0;;5690:42;19765:20;;;;:36;;-1:-1:-1;;;;;;19790:11:0;;;;;;:7;:11;;;;;;;;19789:12;19765:36;19762:163;;;19860:14;;19850:6;19834:13;19844:2;19834:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;19826:79;;;;-1:-1:-1;;;19826:79:0;;17583:2:1;19826:79:0;;;17565:21:1;17622:2;17602:18;;;17595:30;17661:28;17641:18;;;17634:56;17707:18;;19826:79:0;17381:350:1;19826:79:0;-1:-1:-1;;;;;19983:11:0;;;;;;:7;:11;;;;;;:16;;19979:79;;-1:-1:-1;;;;;20016:12:0;;;;;;:8;:12;;;;;20031:15;20016:30;;19979:79;-1:-1:-1;;;;;20103:25:0;;20070:12;20103:25;;;:19;:25;;;;;;20085:4;;20103:25;;;:52;;-1:-1:-1;;;;;;20132:23:0;;;;;;:19;:23;;;;;;;;20103:52;20100:98;;;-1:-1:-1;20181:5:0;20100:98;-1:-1:-1;;;;;20214:11:0;;;;;;:7;:11;;;;;;;;20210:457;;;20247:16;;-1:-1:-1;;;20247:16:0;;;;20246:17;:59;;;;-1:-1:-1;20284:21:0;;-1:-1:-1;;;20284:21:0;;;;20246:59;20242:408;;;20340:28;20371:24;20389:4;20371:9;:24::i;:::-;20340:55;;20442:13;;20418:20;:37;20414:221;;20507:10;;20483:20;:34;20480:77;;-1:-1:-1;20544:10:0;;20480:77;20579:36;20594:20;20579:14;:36::i;:::-;20321:329;20242:408;20685:44;20703:4;20709:2;20713:6;20721:7;20685:17;:44::i;:::-;20678:51;18734:2003;-1:-1:-1;;;;;18734:2003:0:o;12692:150::-;12766:13;;:18;12757:38;;;;-1:-1:-1;;;12757:38:0;;17938:2:1;12757:38:0;;;17920:21:1;17977:1;17957:18;;;17950:29;-1:-1:-1;;;17995:18:1;;;17988:36;18041:18;;12757:38:0;17736:329:1;12757:38:0;12806:13;:28;12692:150::o;18403:323::-;18471:4;7914:6;;-1:-1:-1;;;;;18495:15:0;;;7914:6;;18495:15;;;;:45;;-1:-1:-1;7887:7:0;7914:6;-1:-1:-1;;;;;18527:13:0;;;7914:6;;18527:13;;18495:45;:84;;;;-1:-1:-1;;;;;;18558:21:0;;;;;;:17;:21;;;;;;;;18557:22;18495:84;:125;;;;-1:-1:-1;;;;;;18597:23:0;;;;;;:17;:23;;;;;;;;18596:24;18495:125;:152;;;;-1:-1:-1;;;;;;18637:10:0;;5776:42;18637:10;;18495:152;:185;;;;-1:-1:-1;;;;;;18664:16:0;;;;18495:185;:223;;;;-1:-1:-1;;;;;;18697:21:0;;18713:4;18697:21;;18495:223;18488:230;18403:323;-1:-1:-1;;;18403:323:0:o;20745:1476::-;7005:16;:23;;-1:-1:-1;;;;7005:23:0;-1:-1:-1;;;7005:23:0;;;20853:16;;:6:::1;20834:16:::0;:35:::1;::::0;20853:16;20834:35:::1;:::i;:::-;20830:66:::0;20889:7:::1;20830:66;21029:15:::0;;21010:16;;20991;;21029:6:::1;20972:16:::0;20906:17:::1;::::0;21050:1:::1;::::0;21029:15;;21010:16;;20972:35:::1;::::0;20991:16;20972:35:::1;:::i;:::-;:54;;;;:::i;:::-;:72;;;;:::i;:::-;20951:6;:16:::0;20928:39:::1;::::0;:20;:39:::1;:::i;:::-;20927:118;;;;:::i;:::-;20926:125;;;;:::i;:::-;20906:145:::0;-1:-1:-1;21064:20:0::1;21087:32;20906:145:::0;21087:20;:32:::1;:::i;:::-;21064:55;;21130:30;21147:12;21130:16;:30::i;:::-;21354:15:::0;;21335:16;;21316;;21354:6:::1;21297:16:::0;21198:21:::1;::::0;21173:22:::1;::::0;21375:1:::1;::::0;21354:15;;21335:16;;21297:35:::1;::::0;::::1;:::i;:::-;:54;;;;:::i;:::-;:72;;;;:::i;:::-;21276:6;:16:::0;21259:33:::1;::::0;:14;:33:::1;:::i;:::-;21258:112;;;;:::i;:::-;21257:119;;;;:::i;:::-;21230:146:::0;-1:-1:-1;21395:13:0;;21391:161:::1;;21425:41;21438:9;21449:16;21425:12;:41::i;:::-;21486:54;::::0;;3383:25:1;;;3439:2;3424:18;;3417:34;;;3467:18;;;3460:34;;;21486:54:0::1;::::0;3371:2:1;3356:18;21486:54:0::1;;;;;;;21391:161;21566:21;:25:::0;21562:652:::1;;21799:15:::0;;21780:16;;21761;;21623:4:::1;::::0;21663:21:::1;::::0;21608:12:::1;::::0;21761:35:::1;::::0;21780:16;21761:35:::1;:::i;:::-;:53;;;;:::i;:::-;21740:16:::0;;21727:29:::1;::::0;:10;:29:::1;:::i;:::-;21726:89;;;;:::i;:::-;21929:15:::0;;21910:16;;21891;;21699:117;;-1:-1:-1;21831:22:0::1;::::0;21891:35:::1;::::0;21910:16;21891:35:::1;:::i;:::-;:53;;;;:::i;:::-;21871:15:::0;;21858:28:::1;::::0;:10;:28:::1;:::i;:::-;21857:88;;;;:::i;:::-;21982:16;::::0;21974:58:::1;::::0;21831:115;;-1:-1:-1;;;;;;21982:16:0::1;::::0;22012:15;;21974:58:::1;::::0;;;22012:15;21982:16;21974:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22068:15:0::1;::::0;22060:56:::1;::::0;21961:71;;-1:-1:-1;;;;;;22068:15:0::1;::::0;22097:14;;22060:56:::1;::::0;;;22097:14;22068:15;22060:56:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22152:10:0::1;::::0;22144:58:::1;::::0;22047:69;;-1:-1:-1;;;;;;22152:10:0::1;::::0;22176:21:::1;::::0;22144:58:::1;::::0;;;22176:21;22152:10;22144:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;21562:652:0::1;20819:1402;;;;7039:1;-1:-1:-1::0;7051:16:0;:24;;-1:-1:-1;;;;7051:24:0;;;20745:1476::o;23491:582::-;23613:16;;23591:4;;23613:16;;23608:221;;23646:28;23665:4;23671:2;23646:18;:28::i;:::-;23694:16;;;;23693:17;:41;;;;;23714:20;23725:4;23731:2;23714:10;:20::i;:::-;23689:129;;;23755:47;;-1:-1:-1;;;23755:47:0;;18482:2:1;23755:47:0;;;18464:21:1;18521:2;18501:18;;;18494:30;18560:34;18540:18;;;18533:62;-1:-1:-1;;;18611:18:1;;;18604:35;18656:19;;23755:47:0;18280:401:1;23689:129:0;-1:-1:-1;;;;;23840:13:0;;;;;;:7;:13;;;;;:23;;23857:6;;23840:13;:23;;23857:6;;23840:23;:::i;:::-;;;;-1:-1:-1;23874:22:0;;-1:-1:-1;23900:7:0;23899:48;;23941:6;23899:48;;;23911:27;23921:4;23927:2;23931:6;23911:9;:27::i;:::-;-1:-1:-1;;;;;23962:11:0;;;;;;:7;:11;;;;;:29;;23874:73;;-1:-1:-1;23874:73:0;;23962:11;;;:29;;23874:73;;23962:29;:::i;:::-;;;;;;;;24024:2;-1:-1:-1;;;;;24009:34:0;24018:4;-1:-1:-1;;;;;24009:34:0;;24028:14;24009:34;;;;2242:25:1;;2230:2;2215:18;;2096:177;24009:34:0;;;;;;;;-1:-1:-1;24061:4:0;;23491:582;-1:-1:-1;;;;;23491:582:0:o;22229:417::-;22320:16;;;22334:1;22320:16;;;;;;;;22296:21;;22320:16;;;;;;;;;;-1:-1:-1;22320:16:0;22296:40;;22365:4;22347;22352:1;22347:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22347:23:0;;;:7;;;;;;;;;;:23;;;;22391:9;;:16;;;-1:-1:-1;;;22391:16:0;;;;:9;;;;;:14;;:16;;;;;22347:7;;22391:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22381:4;22386:1;22381:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22381:26:0;;;:7;;;;;;;;;:26;22420:9;;:218;;-1:-1:-1;;;22420:218:0;;:9;;;:60;;:218;;22495:11;;22420:9;;22565:4;;22592;;22612:15;;22420:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22285:361;22229:417;:::o;22654:335::-;22735:9;;-1:-1:-1;;;;;22735:9:0;:25;22768:9;22801:4;22821:11;22735:9;;22933:7;7887;7914:6;-1:-1:-1;;;;;7914:6:0;;7849:79;22933:7;22955:15;22735:246;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22654:335;;:::o;22997:486::-;23079:16;;;;23078:17;23070:65;;;;-1:-1:-1;;;23070:65:0;;19873:2:1;23070:65:0;;;19855:21:1;19912:2;19892:18;;;19885:30;19951:34;19931:18;;;19924:62;-1:-1:-1;;;20002:18:1;;;19995:33;20045:19;;23070:65:0;19671:399:1;23070:65:0;23151:20;23162:4;23168:2;23151:10;:20::i;:::-;23150:21;:37;;;;-1:-1:-1;23181:6:0;;-1:-1:-1;;;;;23175:12:0;;;23181:6;;23175:12;23150:37;23146:330;;;23223:12;23208;:27;-1:-1:-1;;;;;23252:23:0;;;;;;:17;:23;;;;;;;;;:30;;-1:-1:-1;;23252:30:0;;;23278:4;23252:30;;;;;;23297:16;:23;;;;;;;;;23350:15;23335:12;:30;23382:21;:28;;-1:-1:-1;;;;23382:28:0;-1:-1:-1;;;23382:28:0;;;23430:34;;1654:41:1;;;23430:34:0;;1627:18:1;23430:34:0;;;;;;;22997:486;;:::o;24081:689::-;24221:6;;24160:7;;;;-1:-1:-1;;;;;24221:6:0;;;24215:12;;;;24211:187;;-1:-1:-1;24255:12:0;;24211:187;;;24313:6;;-1:-1:-1;;;;;24313:6:0;;;24305:14;;;;24301:97;;-1:-1:-1;24335:4:0;:11;24301:97;;;-1:-1:-1;24380:16:0;;24301:97;24414:20;24425:4;24431:2;24414:10;:20::i;:::-;24410:142;;;24454:13;;:18;;:42;;;24476:13;;24494:1;24476:20;;24454:42;24450:91;;;24517:8;;;24450:91;24562:17;5382:5;24583:19;24592:10;24583:6;:19;:::i;:::-;:38;;;;:::i;:::-;24649:4;24633:22;;;;:7;:22;;;;;:37;;24562:60;;-1:-1:-1;24562:60:0;;24633:22;;;:37;;24562:60;;24633:37;:::i;:::-;;;;-1:-1:-1;;24686:40:0;;2242:25:1;;;24709:4:0;;-1:-1:-1;;;;;24686:40:0;;;;;2230:2:1;2215:18;24686:40:0;;;;;;;24744:18;24753:9;24744:6;:18;:::i;:::-;24737:25;24081:689;-1:-1:-1;;;;;;24081:689:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:597:1;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:131::-;-1:-1:-1;;;;;1133:31:1;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1058:131;:::o;1194:315::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1378:9;1365:23;1397:31;1422:5;1397:31;:::i;:::-;1447:5;1499:2;1484:18;;;;1471:32;;-1:-1:-1;;;1194:315:1:o;1706:385::-;1792:6;1800;1808;1816;1869:3;1857:9;1848:7;1844:23;1840:33;1837:53;;;1886:1;1883;1876:12;1837:53;-1:-1:-1;;1909:23:1;;;1979:2;1964:18;;1951:32;;-1:-1:-1;2030:2:1;2015:18;;2002:32;;2081:2;2066:18;2053:32;;-1:-1:-1;1706:385:1;-1:-1:-1;1706:385:1:o;2278:456::-;2355:6;2363;2371;2424:2;2412:9;2403:7;2399:23;2395:32;2392:52;;;2440:1;2437;2430:12;2392:52;2479:9;2466:23;2498:31;2523:5;2498:31;:::i;:::-;2548:5;-1:-1:-1;2605:2:1;2590:18;;2577:32;2618:33;2577:32;2618:33;:::i;:::-;2278:456;;2670:7;;-1:-1:-1;;;2724:2:1;2709:18;;;;2696:32;;2278:456::o;2739:248::-;2807:6;2815;2868:2;2856:9;2847:7;2843:23;2839:32;2836:52;;;2884:1;2881;2874:12;2836:52;-1:-1:-1;;2907:23:1;;;2977:2;2962:18;;;2949:32;;-1:-1:-1;2739:248:1:o;3505:247::-;3564:6;3617:2;3605:9;3596:7;3592:23;3588:32;3585:52;;;3633:1;3630;3623:12;3585:52;3672:9;3659:23;3691:31;3716:5;3691:31;:::i;3757:160::-;3822:20;;3878:13;;3871:21;3861:32;;3851:60;;3907:1;3904;3897:12;3851:60;3757:160;;;:::o;3922:315::-;3987:6;3995;4048:2;4036:9;4027:7;4023:23;4019:32;4016:52;;;4064:1;4061;4054:12;4016:52;4103:9;4090:23;4122:31;4147:5;4122:31;:::i;:::-;4172:5;-1:-1:-1;4196:35:1;4227:2;4212:18;;4196:35;:::i;:::-;4186:45;;3922:315;;;;;:::o;4242:553::-;4343:6;4351;4359;4412:2;4400:9;4391:7;4387:23;4383:32;4380:52;;;4428:1;4425;4418:12;4380:52;4467:9;4454:23;4486:31;4511:5;4486:31;:::i;:::-;4536:5;-1:-1:-1;4593:2:1;4578:18;;4565:32;4606:33;4565:32;4606:33;:::i;:::-;4658:7;-1:-1:-1;4717:2:1;4702:18;;4689:32;4730:33;4689:32;4730:33;:::i;:::-;4782:7;4772:17;;;4242:553;;;;;:::o;4800:127::-;4861:10;4856:3;4852:20;4849:1;4842:31;4892:4;4889:1;4882:15;4916:4;4913:1;4906:15;4932:275;5003:2;4997:9;5068:2;5049:13;;-1:-1:-1;;5045:27:1;5033:40;;5103:18;5088:34;;5124:22;;;5085:62;5082:88;;;5150:18;;:::i;:::-;5186:2;5179:22;4932:275;;-1:-1:-1;4932:275:1:o;5212:1091::-;5302:6;5310;5363:2;5351:9;5342:7;5338:23;5334:32;5331:52;;;5379:1;5376;5369:12;5331:52;5419:9;5406:23;5448:18;5489:2;5481:6;5478:14;5475:34;;;5505:1;5502;5495:12;5475:34;5543:6;5532:9;5528:22;5518:32;;5588:7;5581:4;5577:2;5573:13;5569:27;5559:55;;5610:1;5607;5600:12;5559:55;5646:2;5633:16;5668:4;5691:2;5687;5684:10;5681:36;;;5697:18;;:::i;:::-;5743:2;5740:1;5736:10;5726:20;;5766:28;5790:2;5786;5782:11;5766:28;:::i;:::-;5828:15;;;5898:11;;;5894:20;;;5859:12;;;;5926:19;;;5923:39;;;5958:1;5955;5948:12;5923:39;5982:11;;;;6002:217;6018:6;6013:3;6010:15;6002:217;;;6098:3;6085:17;6072:30;;6115:31;6140:5;6115:31;:::i;:::-;6159:18;;;6035:12;;;;6197;;;;6002:217;;;6238:5;-1:-1:-1;6262:35:1;;-1:-1:-1;6278:18:1;;;6262:35;:::i;:::-;6252:45;;;;;;5212:1091;;;;;:::o;6704:180::-;6760:6;6813:2;6801:9;6792:7;6788:23;6784:32;6781:52;;;6829:1;6826;6819:12;6781:52;6852:26;6868:9;6852:26;:::i;6889:531::-;6932:5;6985:3;6978:4;6970:6;6966:17;6962:27;6952:55;;7003:1;7000;6993:12;6952:55;7039:6;7026:20;7065:18;7061:2;7058:26;7055:52;;;7087:18;;:::i;:::-;7131:55;7174:2;7155:13;;-1:-1:-1;;7151:27:1;7180:4;7147:38;7131:55;:::i;:::-;7211:2;7202:7;7195:19;7257:3;7250:4;7245:2;7237:6;7233:15;7229:26;7226:35;7223:55;;;7274:1;7271;7264:12;7223:55;7339:2;7332:4;7324:6;7320:17;7313:4;7304:7;7300:18;7287:55;7387:1;7362:16;;;7380:4;7358:27;7351:38;;;;7366:7;6889:531;-1:-1:-1;;;6889:531:1:o;7425:611::-;7522:6;7530;7538;7591:2;7579:9;7570:7;7566:23;7562:32;7559:52;;;7607:1;7604;7597:12;7559:52;7647:9;7634:23;7676:18;7717:2;7709:6;7706:14;7703:34;;;7733:1;7730;7723:12;7703:34;7756:50;7798:7;7789:6;7778:9;7774:22;7756:50;:::i;:::-;7746:60;;7859:2;7848:9;7844:18;7831:32;7815:48;;7888:2;7878:8;7875:16;7872:36;;;7904:1;7901;7894:12;7872:36;;7927:52;7971:7;7960:8;7949:9;7945:24;7927:52;:::i;:::-;7917:62;;;8026:2;8015:9;8011:18;7998:32;7988:42;;7425:611;;;;;:::o;8041:388::-;8109:6;8117;8170:2;8158:9;8149:7;8145:23;8141:32;8138:52;;;8186:1;8183;8176:12;8138:52;8225:9;8212:23;8244:31;8269:5;8244:31;:::i;:::-;8294:5;-1:-1:-1;8351:2:1;8336:18;;8323:32;8364:33;8323:32;8364:33;:::i;:::-;8416:7;8406:17;;;8041:388;;;;;:::o;8434:316::-;8511:6;8519;8527;8580:2;8568:9;8559:7;8555:23;8551:32;8548:52;;;8596:1;8593;8586:12;8548:52;-1:-1:-1;;8619:23:1;;;8689:2;8674:18;;8661:32;;-1:-1:-1;8740:2:1;8725:18;;;8712:32;;8434:316;-1:-1:-1;8434:316:1:o;8755:380::-;8834:1;8830:12;;;;8877;;;8898:61;;8952:4;8944:6;8940:17;8930:27;;8898:61;9005:2;8997:6;8994:14;8974:18;8971:38;8968:161;;9051:10;9046:3;9042:20;9039:1;9032:31;9086:4;9083:1;9076:15;9114:4;9111:1;9104:15;8968:161;;8755:380;;;:::o;9140:340::-;9342:2;9324:21;;;9381:2;9361:18;;;9354:30;-1:-1:-1;;;9415:2:1;9400:18;;9393:46;9471:2;9456:18;;9140:340::o;9485:127::-;9546:10;9541:3;9537:20;9534:1;9527:31;9577:4;9574:1;9567:15;9601:4;9598:1;9591:15;9617:128;9657:3;9688:1;9684:6;9681:1;9678:13;9675:39;;;9694:18;;:::i;:::-;-1:-1:-1;9730:9:1;;9617:128::o;10090:125::-;10130:4;10158:1;10155;10152:8;10149:34;;;10163:18;;:::i;:::-;-1:-1:-1;10200:9:1;;10090:125::o;10220:168::-;10260:7;10326:1;10322;10318:6;10314:14;10311:1;10308:21;10303:1;10296:9;10289:17;10285:45;10282:71;;;10333:18;;:::i;:::-;-1:-1:-1;10373:9:1;;10220:168::o;10393:217::-;10433:1;10459;10449:132;;10503:10;10498:3;10494:20;10491:1;10484:31;10538:4;10535:1;10528:15;10566:4;10563:1;10556:15;10449:132;-1:-1:-1;10595:9:1;;10393:217::o;10615:401::-;10817:2;10799:21;;;10856:2;10836:18;;;10829:30;10895:34;10890:2;10875:18;;10868:62;-1:-1:-1;;;10961:2:1;10946:18;;10939:35;11006:3;10991:19;;10615:401::o;11021:425::-;11223:2;11205:21;;;11262:2;11242:18;;;11235:30;11301:34;11296:2;11281:18;;11274:62;11372:31;11367:2;11352:18;;11345:59;11436:3;11421:19;;11021:425::o;11798:127::-;11859:10;11854:3;11850:20;11847:1;11840:31;11890:4;11887:1;11880:15;11914:4;11911:1;11904:15;11930:135;11969:3;11990:17;;;11987:43;;12010:18;;:::i;:::-;-1:-1:-1;12057:1:1;12046:13;;11930:135::o;12428:422::-;12517:1;12560:5;12517:1;12574:270;12595:7;12585:8;12582:21;12574:270;;;12654:4;12650:1;12646:6;12642:17;12636:4;12633:27;12630:53;;;12663:18;;:::i;:::-;12713:7;12703:8;12699:22;12696:55;;;12733:16;;;;12696:55;12812:22;;;;12772:15;;;;12574:270;;;12578:3;12428:422;;;;;:::o;12855:806::-;12904:5;12934:8;12924:80;;-1:-1:-1;12975:1:1;12989:5;;12924:80;13023:4;13013:76;;-1:-1:-1;13060:1:1;13074:5;;13013:76;13105:4;13123:1;13118:59;;;;13191:1;13186:130;;;;13098:218;;13118:59;13148:1;13139:10;;13162:5;;;13186:130;13223:3;13213:8;13210:17;13207:43;;;13230:18;;:::i;:::-;-1:-1:-1;;13286:1:1;13272:16;;13301:5;;13098:218;;13400:2;13390:8;13387:16;13381:3;13375:4;13372:13;13368:36;13362:2;13352:8;13349:16;13344:2;13338:4;13335:12;13331:35;13328:77;13325:159;;;-1:-1:-1;13437:19:1;;;13469:5;;13325:159;13516:34;13541:8;13535:4;13516:34;:::i;:::-;13586:6;13582:1;13578:6;13574:19;13565:7;13562:32;13559:58;;;13597:18;;:::i;:::-;13635:20;;12855:806;-1:-1:-1;;;12855:806:1:o;13666:140::-;13724:5;13753:47;13794:4;13784:8;13780:19;13774:4;13753:47;:::i;13811:251::-;13881:6;13934:2;13922:9;13913:7;13909:23;13905:32;13902:52;;;13950:1;13947;13940:12;13902:52;13982:9;13976:16;14001:31;14026:5;14001:31;:::i;14376:607::-;-1:-1:-1;;;;;14735:15:1;;;14717:34;;14782:2;14767:18;;14760:34;;;;14825:2;14810:18;;14803:34;;;;14868:2;14853:18;;14846:34;;;;14917:15;;;14911:3;14896:19;;14889:44;14697:3;14949:19;;14942:35;;;;14666:3;14651:19;;14376:607::o;14988:306::-;15076:6;15084;15092;15145:2;15133:9;15124:7;15120:23;15116:32;15113:52;;;15161:1;15158;15151:12;15113:52;15190:9;15184:16;15174:26;;15240:2;15229:9;15225:18;15219:25;15209:35;;15284:2;15273:9;15269:18;15263:25;15253:35;;14988:306;;;;;:::o;18686:980::-;18948:4;18996:3;18985:9;18981:19;19027:6;19016:9;19009:25;19053:2;19091:6;19086:2;19075:9;19071:18;19064:34;19134:3;19129:2;19118:9;19114:18;19107:31;19158:6;19193;19187:13;19224:6;19216;19209:22;19262:3;19251:9;19247:19;19240:26;;19301:2;19293:6;19289:15;19275:29;;19322:1;19332:195;19346:6;19343:1;19340:13;19332:195;;;19411:13;;-1:-1:-1;;;;;19407:39:1;19395:52;;19502:15;;;;19467:12;;;;19443:1;19361:9;19332:195;;;-1:-1:-1;;;;;;;19583:32:1;;;;19578:2;19563:18;;19556:60;-1:-1:-1;;;19647:3:1;19632:19;19625:35;19544:3;18686:980;-1:-1:-1;;;18686:980:1:o

Swarm Source

ipfs://2eb44b7cc22c3971b801de2b7fa551c2d3a91977828716b5fccbc6e485214e60

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.