ETH Price: $3,455.33 (-6.91%)
 

Overview

ETH Balance

0.033111565616443155 ETH

Eth Value

$114.41 (@ $3,455.33/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Enable Trading145853772022-04-14 19:21:37998 days ago1649964097IN
0x42368E3e...ea0cabED1
0 ETH0.0028228190.69269484
Approve145814772022-04-14 4:42:41999 days ago1649911361IN
0x42368E3e...ea0cabED1
0 ETH0.0020080242.50775067
Claim Ether145790792022-04-13 19:47:01999 days ago1649879221IN
0x42368E3e...ea0cabED1
0 ETH0.0016963855.83154467
Add Bots145787782022-04-13 18:35:49999 days ago1649874949IN
0x42368E3e...ea0cabED1
0 ETH0.0022107546.21043389
Approve145787452022-04-13 18:28:23999 days ago1649874503IN
0x42368E3e...ea0cabED1
0 ETH0.0025836854.6939003
Approve145787432022-04-13 18:27:02999 days ago1649874422IN
0x42368E3e...ea0cabED1
0 ETH0.0021499645.51248941
Approve145787382022-04-13 18:26:01999 days ago1649874361IN
0x42368E3e...ea0cabED1
0 ETH0.0022577847.79503183
Approve145787332022-04-13 18:24:44999 days ago1649874284IN
0x42368E3e...ea0cabED1
0 ETH0.0022319147.24720861
Remove Bots145787302022-04-13 18:24:13999 days ago1649874253IN
0x42368E3e...ea0cabED1
0 ETH0.0013636652.9189148
Approve145787182022-04-13 18:21:12999 days ago1649874072IN
0x42368E3e...ea0cabED1
0 ETH0.001862539.42727614
Approve145787072022-04-13 18:20:10999 days ago1649874010IN
0x42368E3e...ea0cabED1
0 ETH0.0028215259.7286332
Approve145787062022-04-13 18:19:54999 days ago1649873994IN
0x42368E3e...ea0cabED1
0 ETH0.0026820156.77544228
Approve145786982022-04-13 18:18:42999 days ago1649873922IN
0x42368E3e...ea0cabED1
0 ETH0.0044375693.93856317
Add Bots145786952022-04-13 18:17:50999 days ago1649873870IN
0x42368E3e...ea0cabED1
0 ETH0.0031942366.75089973
Add Bots145786932022-04-13 18:17:10999 days ago1649873830IN
0x42368E3e...ea0cabED1
0 ETH0.0025341652.9571922
Add Bots145786932022-04-13 18:17:10999 days ago1649873830IN
0x42368E3e...ea0cabED1
0 ETH0.0025341652.9571922
Update Max Txn A...145786792022-04-13 18:14:25999 days ago1649873665IN
0x42368E3e...ea0cabED1
0 ETH0.0011150834.94364639
Add Bots145786782022-04-13 18:14:12999 days ago1649873652IN
0x42368E3e...ea0cabED1
0 ETH0.0016930935.38113229
Add Bots145786712022-04-13 18:13:35999 days ago1649873615IN
0x42368E3e...ea0cabED1
0 ETH0.002172245.39323197
Approve145786682022-04-13 18:13:20999 days ago1649873600IN
0x42368E3e...ea0cabED1
0 ETH0.0021977746.52449086
Add Bots145786632022-04-13 18:12:39999 days ago1649873559IN
0x42368E3e...ea0cabED1
0 ETH0.0028162358.86651497
Add Bots145786632022-04-13 18:12:39999 days ago1649873559IN
0x42368E3e...ea0cabED1
0 ETH0.0028169358.86651497
Add Bots145786632022-04-13 18:12:39999 days ago1649873559IN
0x42368E3e...ea0cabED1
0 ETH0.0028169358.86651497
Approve145786612022-04-13 18:11:56999 days ago1649873516IN
0x42368E3e...ea0cabED1
0 ETH0.0022545347.72610152
Approve145786592022-04-13 18:11:06999 days ago1649873466IN
0x42368E3e...ea0cabED1
0 ETH0.0025157353.25542965
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
145818472022-04-14 6:04:15999 days ago1649916255
0x42368E3e...ea0cabED1
0.00149454 ETH
145818472022-04-14 6:04:15999 days ago1649916255
0x42368E3e...ea0cabED1
0.00373689 ETH
145818472022-04-14 6:04:15999 days ago1649916255
0x42368E3e...ea0cabED1
0.01121069 ETH
145817802022-04-14 5:50:03999 days ago1649915403
0x42368E3e...ea0cabED1
0.00280842 ETH
145817802022-04-14 5:50:03999 days ago1649915403
0x42368E3e...ea0cabED1
0.00699711 ETH
145817802022-04-14 5:50:03999 days ago1649915403
0x42368E3e...ea0cabED1
0.02099135 ETH
145816582022-04-14 5:23:32999 days ago1649913812
0x42368E3e...ea0cabED1
0.00060159 ETH
145816582022-04-14 5:23:32999 days ago1649913812
0x42368E3e...ea0cabED1
0.00150833 ETH
145816582022-04-14 5:23:32999 days ago1649913812
0x42368E3e...ea0cabED1
0.00452499 ETH
145796002022-04-13 21:37:13999 days ago1649885833
0x42368E3e...ea0cabED1
0.0006189 ETH
145796002022-04-13 21:37:13999 days ago1649885833
0x42368E3e...ea0cabED1
0.0015517 ETH
145796002022-04-13 21:37:13999 days ago1649885833
0x42368E3e...ea0cabED1
0.0046551 ETH
145790792022-04-13 19:47:01999 days ago1649879221
0x42368E3e...ea0cabED1
1.26952183 ETH
145788932022-04-13 19:01:44999 days ago1649876504
0x42368E3e...ea0cabED1
0.00387281 ETH
145788932022-04-13 19:01:44999 days ago1649876504
0x42368E3e...ea0cabED1
0.00962788 ETH
145788932022-04-13 19:01:44999 days ago1649876504
0x42368E3e...ea0cabED1
0.02888364 ETH
145788232022-04-13 18:44:26999 days ago1649875466
0x42368E3e...ea0cabED1
0.00604639 ETH
145788232022-04-13 18:44:26999 days ago1649875466
0x42368E3e...ea0cabED1
0.01494689 ETH
145788232022-04-13 18:44:26999 days ago1649875466
0x42368E3e...ea0cabED1
0.04484068 ETH
145788192022-04-13 18:43:24999 days ago1649875404
0x42368E3e...ea0cabED1
0.00082712 ETH
145788192022-04-13 18:43:24999 days ago1649875404
0x42368E3e...ea0cabED1
0.00207318 ETH
145788192022-04-13 18:43:24999 days ago1649875404
0x42368E3e...ea0cabED1
0.00621956 ETH
145788052022-04-13 18:41:03999 days ago1649875263
0x42368E3e...ea0cabED1
0.00385643 ETH
145788052022-04-13 18:41:03999 days ago1649875263
0x42368E3e...ea0cabED1
0.00960019 ETH
145788052022-04-13 18:41:03999 days ago1649875263
0x42368E3e...ea0cabED1
0.02880059 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
APPAINU

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

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

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

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

    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function factory() external view returns (address);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}


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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external;
}

contract APPAINU is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping (address => bool) public isBot;
    bool private _swapping;
    uint256 private _launchTime;

    address private _teamWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
        
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    
    uint256 private _teamFee = 8;
    uint256 private _liquidityFee = 4;
    uint256 public totalFees;

    uint256 private _tokensForTeam;
    uint256 private _tokensForLiquidity;
    
    /******************/

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

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

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

    constructor() ERC20("APPA INU", "APPA") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 totalSupply = 1e8 * 1e18;
        
        maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 5 / 100; // 5% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        // Set Fees
        totalFees = _teamFee.add(_liquidityFee);

        // Set Fee Wallet
        _teamWallet = address(owner()); // set as fee wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp.add(2);
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e18;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateFees(uint256 teamFee, uint256 liquidityFee) external onlyOwner {
        _teamFee = teamFee;
        _liquidityFee = liquidityFee;
        totalFees = teamFee.add(liquidityFee);
        require(totalFees <= 10, "Fees must be lower than 10%");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }
    
    function updateTeamWallet(address newWallet) external onlyOwner {
        _teamWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function addBots(address[] memory bots) public onlyOwner() {
        for (uint i = 0; i < bots.length; i++) {
            if (bots[i] != uniswapV2Pair && bots[i] != address(uniswapV2Router)) {
                isBot[bots[i]] = true;
            }
        }
    }
    
    function removeBots(address[] memory bots) public onlyOwner() {
        for (uint i = 0; i < bots.length; i++) {
            isBot[bots[i]] = false;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBot[from], "Your address has been marked as a bot/sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (block.timestamp < _launchTime) isBot[to] = true;
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                // On buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                // On sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) takeFee = false;
        
        
        uint256 fees = 0;
        // Only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // On swap
            if ((automatedMarketMakerPairs[to] || automatedMarketMakerPairs[from]) && totalFees > 0) {
                fees = amount.mul(totalFees).div(100);
                _tokensForTeam += fees * _teamFee / totalFees;
                _tokensForLiquidity += fees * _liquidityFee / totalFees;
            }
            
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForTeam;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensAtAmount * 20) contractBalance = swapTokensAtAmount * 20;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForTeam = ethBalance.mul(_tokensForTeam).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForTeam;
        
        _tokensForTeam = 0;
        _tokensForLiquidity = 0;
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

    function claimEther() external {
        payable(_teamWallet).transfer(address(this).balance);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"removeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"teamFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff021916908315150217905550600860105560046011553480156200006c57600080fd5b506040518060400160405280600881526020017f4150504120494e550000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f41505041000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000f1929190620009ad565b5080600490805190602001906200010a929190620009ad565b5050506200012d62000121620004eb60201b60201c565b620004f360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000159816001620005b960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ff919062000ac7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028d919062000ac7565b6040518363ffffffff1660e01b8152600401620002ac92919062000b0a565b6020604051808303816000875af1158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f2919062000ac7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033a60a0516001620005b960201b60201c565b6200034f60a0516001620006a360201b60201c565b60006a52b7d2dcc80cd2e40000009050606460018262000370919062000b70565b6200037c919062000c00565b600a81905550606460058262000393919062000b70565b6200039f919062000c00565b600c81905550612710600582620003b7919062000b70565b620003c3919062000c00565b600b81905550620003e7601154601054620006fe60201b62001efb1790919060201c565b601281905550620003fd6200071660201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200045f620004516200071660201b60201c565b60016200074060201b60201c565b620004723060016200074060201b60201c565b6200048761dead60016200074060201b60201c565b620004a96200049b6200071660201b60201c565b6001620005b960201b60201c565b620004bc306001620005b960201b60201c565b620004d161dead6001620005b960201b60201c565b620004e333826200082a60201b60201c565b505062000e1d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005c9620004eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005ef6200071660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000648576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063f9062000c99565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600081836200070e919062000cbb565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000750620004eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007766200071660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c69062000c99565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200089d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008949062000d68565b60405180910390fd5b620008b160008383620009a360201b60201c565b8060026000828254620008c5919062000cbb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200091c919062000cbb565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000983919062000d9b565b60405180910390a36200099f60008383620009a860201b60201c565b5050565b505050565b505050565b828054620009bb9062000de7565b90600052602060002090601f016020900481019282620009df576000855562000a2b565b82601f10620009fa57805160ff191683800117855562000a2b565b8280016001018555821562000a2b579182015b8281111562000a2a57825182559160200191906001019062000a0d565b5b50905062000a3a919062000a3e565b5090565b5b8082111562000a5957600081600090555060010162000a3f565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a8f8262000a62565b9050919050565b62000aa18162000a82565b811462000aad57600080fd5b50565b60008151905062000ac18162000a96565b92915050565b60006020828403121562000ae05762000adf62000a5d565b5b600062000af08482850162000ab0565b91505092915050565b62000b048162000a82565b82525050565b600060408201905062000b21600083018562000af9565b62000b30602083018462000af9565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b7d8262000b37565b915062000b8a8362000b37565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bc65762000bc562000b41565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c0d8262000b37565b915062000c1a8362000b37565b92508262000c2d5762000c2c62000bd1565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c8160208362000c38565b915062000c8e8262000c49565b602082019050919050565b6000602082019050818103600083015262000cb48162000c72565b9050919050565b600062000cc88262000b37565b915062000cd58362000b37565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d0d5762000d0c62000b41565b5b828201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d50601f8362000c38565b915062000d5d8262000d18565b602082019050919050565b6000602082019050818103600083015262000d838162000d41565b9050919050565b62000d958162000b37565b82525050565b600060208201905062000db2600083018462000d8a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e0057607f821691505b6020821081141562000e175762000e1662000db8565b5b50919050565b60805160a051614ca362000e8960003960008181610dca015281816115b201528181611b67015261258c015260008181610a9901528181611bd80152818161253401528181613357015281816134380152818161345f015281816134fb01526135220152614ca36000f3fe60806040526004361061024a5760003560e01c80637571336a11610139578063c0246668116100b6578063d34628cc1161007a578063d34628cc146108b1578063dd62ed3e146108da578063e2f4560514610917578063e884f26014610942578063f2fde38b1461096d578063f8b45b051461099657610251565b8063c0246668146107cc578063c18bc195146107f5578063c876d0b91461081e578063c8c8ebe414610849578063d257b34f1461087457610251565b80639a7a23d6116100fd5780639a7a23d6146106c1578063a457c2d7146106ea578063a9059cbb14610727578063b62496f514610764578063bbc0c742146107a157610251565b80637571336a146106025780637cb332bb1461062b5780638a8c523c146106545780638da5cb5b1461066b57806395d89b411461069657610251565b80633bbac579116101c75780636c3bbfd71161018b5780636c3bbfd7146105315780636db794371461055a57806370a0823114610583578063715018a6146105c0578063751039fc146105d757610251565b80633bbac5791461044a57806349bd5a5e146104875780634a62bb65146104b25780634fbee193146104dd57806355291dbd1461051a57610251565b806318160ddd1161020e57806318160ddd14610351578063203e727e1461037c57806323b872dd146103a5578063313ce567146103e2578063395093511461040d57610251565b806306fdde0314610256578063095ea7b31461028157806310d5de53146102be57806313114a9d146102fb5780631694505e1461032657610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109c1565b604051610278919061366f565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613739565b610a53565b6040516102b59190613794565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e091906137af565b610a71565b6040516102f29190613794565b60405180910390f35b34801561030757600080fd5b50610310610a91565b60405161031d91906137eb565b60405180910390f35b34801561033257600080fd5b5061033b610a97565b6040516103489190613865565b60405180910390f35b34801561035d57600080fd5b50610366610abb565b60405161037391906137eb565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613880565b610ac5565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906138ad565b610bd4565b6040516103d99190613794565b60405180910390f35b3480156103ee57600080fd5b506103f7610cf3565b604051610404919061391c565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613739565b610cfc565b6040516104419190613794565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c91906137af565b610da8565b60405161047e9190613794565b60405180910390f35b34801561049357600080fd5b5061049c610dc8565b6040516104a99190613946565b60405180910390f35b3480156104be57600080fd5b506104c7610dec565b6040516104d49190613794565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff91906137af565b610dff565b6040516105119190613794565b60405180910390f35b34801561052657600080fd5b5061052f610e55565b005b34801561053d57600080fd5b5061055860048036038101906105539190613aa9565b610ec0565b005b34801561056657600080fd5b50610581600480360381019061057c9190613af2565b610fd1565b005b34801561058f57600080fd5b506105aa60048036038101906105a591906137af565b6110be565b6040516105b791906137eb565b60405180910390f35b3480156105cc57600080fd5b506105d5611106565b005b3480156105e357600080fd5b506105ec61118e565b6040516105f99190613794565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190613b5e565b61122e565b005b34801561063757600080fd5b50610652600480360381019061064d91906137af565b611305565b005b34801561066057600080fd5b506106696113c5565b005b34801561067757600080fd5b50610680611478565b60405161068d9190613946565b60405180910390f35b3480156106a257600080fd5b506106ab6114a2565b6040516106b8919061366f565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190613b5e565b611534565b005b3480156106f657600080fd5b50610711600480360381019061070c9190613739565b61164d565b60405161071e9190613794565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190613739565b611738565b60405161075b9190613794565b60405180910390f35b34801561077057600080fd5b5061078b600480360381019061078691906137af565b611756565b6040516107989190613794565b60405180910390f35b3480156107ad57600080fd5b506107b6611776565b6040516107c39190613794565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee9190613b5e565b611789565b005b34801561080157600080fd5b5061081c60048036038101906108179190613880565b611860565b005b34801561082a57600080fd5b5061083361196f565b6040516108409190613794565b60405180910390f35b34801561085557600080fd5b5061085e611982565b60405161086b91906137eb565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613880565b611988565b6040516108a89190613794565b60405180910390f35b3480156108bd57600080fd5b506108d860048036038101906108d39190613aa9565b611add565b005b3480156108e657600080fd5b5061090160048036038101906108fc9190613b9e565b611cd0565b60405161090e91906137eb565b60405180910390f35b34801561092357600080fd5b5061092c611d57565b60405161093991906137eb565b60405180910390f35b34801561094e57600080fd5b50610957611d5d565b6040516109649190613794565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f91906137af565b611dfd565b005b3480156109a257600080fd5b506109ab611ef5565b6040516109b891906137eb565b60405180910390f35b6060600380546109d090613c0d565b80601f01602080910402602001604051908101604052809291908181526020018280546109fc90613c0d565b8015610a495780601f10610a1e57610100808354040283529160200191610a49565b820191906000526020600020905b815481529060010190602001808311610a2c57829003601f168201915b5050505050905090565b6000610a67610a60611f11565b8484611f19565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b60125481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610acd611f11565b73ffffffffffffffffffffffffffffffffffffffff16610aeb611478565b73ffffffffffffffffffffffffffffffffffffffff1614610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890613c8b565b60405180910390fd5b670de0b6b3a76400006103e86001610b57610abb565b610b619190613cda565b610b6b9190613d63565b610b759190613d63565b811015610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613e06565b60405180910390fd5b670de0b6b3a764000081610bcb9190613cda565b600a8190555050565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c20611f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cdc5782811015610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90613e98565b60405180910390fd5b610cdb85610cd3611f11565b858403611f19565b5b610ce78585856120e4565b60019150509392505050565b60006012905090565b6000610d9e610d09611f11565b848460016000610d17611f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d999190613eb8565b611f19565b6001905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ebd573d6000803e3d6000fd5b50565b610ec8611f11565b73ffffffffffffffffffffffffffffffffffffffff16610ee6611478565b73ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390613c8b565b60405180910390fd5b60005b8151811015610fcd57600060066000848481518110610f6157610f60613f0e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610fc590613f3d565b915050610f3f565b5050565b610fd9611f11565b73ffffffffffffffffffffffffffffffffffffffff16610ff7611478565b73ffffffffffffffffffffffffffffffffffffffff161461104d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104490613c8b565b60405180910390fd5b816010819055508060118190555061106e8183611efb90919063ffffffff16565b601281905550600a60125411156110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190613fd2565b60405180910390fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61110e611f11565b73ffffffffffffffffffffffffffffffffffffffff1661112c611478565b73ffffffffffffffffffffffffffffffffffffffff1614611182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117990613c8b565b60405180910390fd5b61118c6000612d4e565b565b6000611198611f11565b73ffffffffffffffffffffffffffffffffffffffff166111b6611478565b73ffffffffffffffffffffffffffffffffffffffff161461120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390613c8b565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611236611f11565b73ffffffffffffffffffffffffffffffffffffffff16611254611478565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190613c8b565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61130d611f11565b73ffffffffffffffffffffffffffffffffffffffff1661132b611478565b73ffffffffffffffffffffffffffffffffffffffff1614611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890613c8b565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113cd611f11565b73ffffffffffffffffffffffffffffffffffffffff166113eb611478565b73ffffffffffffffffffffffffffffffffffffffff1614611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613c8b565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550611470600242611efb90919063ffffffff16565b600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114b190613c0d565b80601f01602080910402602001604051908101604052809291908181526020018280546114dd90613c0d565b801561152a5780601f106114ff5761010080835404028352916020019161152a565b820191906000526020600020905b81548152906001019060200180831161150d57829003601f168201915b5050505050905090565b61153c611f11565b73ffffffffffffffffffffffffffffffffffffffff1661155a611478565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790613c8b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690614064565b60405180910390fd5b6116498282612e14565b5050565b6000806001600061165c611f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611710906140f6565b60405180910390fd5b61172d611724611f11565b85858403611f19565b600191505092915050565b600061174c611745611f11565b84846120e4565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611791611f11565b73ffffffffffffffffffffffffffffffffffffffff166117af611478565b73ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90613c8b565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611868611f11565b73ffffffffffffffffffffffffffffffffffffffff16611886611478565b73ffffffffffffffffffffffffffffffffffffffff16146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613c8b565b60405180910390fd5b670de0b6b3a76400006103e860056118f2610abb565b6118fc9190613cda565b6119069190613d63565b6119109190613d63565b811015611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614188565b60405180910390fd5b670de0b6b3a7640000816119669190613cda565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611992611f11565b73ffffffffffffffffffffffffffffffffffffffff166119b0611478565b73ffffffffffffffffffffffffffffffffffffffff1614611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613c8b565b60405180910390fd5b620186a06001611a14610abb565b611a1e9190613cda565b611a289190613d63565b821015611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a619061421a565b60405180910390fd5b6103e86005611a77610abb565b611a819190613cda565b611a8b9190613d63565b821115611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac4906142ac565b60405180910390fd5b81600b8190555060019050919050565b611ae5611f11565b73ffffffffffffffffffffffffffffffffffffffff16611b03611478565b73ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090613c8b565b60405180910390fd5b60005b8151811015611ccc577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16828281518110611baf57611bae613f0e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015611c4157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16828281518110611c2057611c1f613f0e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15611cb957600160066000848481518110611c5f57611c5e613f0e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611cc490613f3d565b915050611b5c565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000611d67611f11565b73ffffffffffffffffffffffffffffffffffffffff16611d85611478565b73ffffffffffffffffffffffffffffffffffffffff1614611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290613c8b565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611e05611f11565b73ffffffffffffffffffffffffffffffffffffffff16611e23611478565b73ffffffffffffffffffffffffffffffffffffffff1614611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090613c8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee09061433e565b60405180910390fd5b611ef281612d4e565b50565b600c5481565b60008183611f099190613eb8565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f80906143d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090614462565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120d791906137eb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b906144f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90614586565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122489061463e565b60405180910390fd5b600081141561226b5761226683836000612e6f565b612d49565b6008544210156122ce576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612991576122eb611478565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123595750612329611478565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123925750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123cc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e55750600760009054906101000a900460ff16155b1561299057600d60019054906101000a900460ff166124df57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061249f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d5906146aa565b60405180910390fd5b5b600f60009054906101000a900460ff16156126a7576124fc611478565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561258357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125db57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126a65743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265890614762565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561274a5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127f157600a54811115612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278b906147f4565b60405180910390fd5b600c546127a0836110be565b826127ab9190613eb8565b11156127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e390614860565b60405180910390fd5b61298f565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128945750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128e357600a548111156128de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d5906148f2565b60405180910390fd5b61298e565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661298d57600c54612940836110be565b8261294b9190613eb8565b111561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390614860565b60405180910390fd5b5b5b5b5b5b600061299c306110be565b90506000600b5482101590508080156129c25750600760009054906101000a900460ff16155b8015612a185750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a6e5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ac45750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b08576001600760006101000a81548160ff021916908315150217905550612aec6130f0565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bbe5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bc857600090505b60008115612d3957601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c715750601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612c7f57506000601254115b15612d1557612cac6064612c9e6012548861326c90919063ffffffff16565b61328290919063ffffffff16565b905060125460105482612cbf9190613cda565b612cc99190613d63565b60136000828254612cda9190613eb8565b9250508190555060125460115482612cf29190613cda565b612cfc9190613d63565b60146000828254612d0d9190613eb8565b925050819055505b6000811115612d2a57612d29873083612e6f565b5b8085612d369190614912565b94505b612d44878787612e6f565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed6906144f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4690614586565b60405180910390fd5b612f5a838383613298565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd7906149b8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130739190613eb8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130d791906137eb565b60405180910390a36130ea84848461329d565b50505050565b60006130fb306110be565b9050600060135460145461310f9190613eb8565b905060008214806131205750600081145b1561312c57505061326a565b6014600b5461313b9190613cda565b821115613154576014600b546131519190613cda565b91505b6000600282601454856131679190613cda565b6131719190613d63565b61317b9190613d63565b9050600061319282856132a290919063ffffffff16565b905060004790506131a2826132b8565b60006131b782476132a290919063ffffffff16565b905060006131e2866131d46013548561326c90919063ffffffff16565b61328290919063ffffffff16565b9050600081836131f29190614912565b9050600060138190555060006014819055506000861180156132145750600081115b156132615761322386826134f5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601454604051613258939291906149d8565b60405180910390a15b50505050505050505b565b6000818361327a9190613cda565b905092915050565b600081836132909190613d63565b905092915050565b505050565b505050565b600081836132b09190614912565b905092915050565b6000600267ffffffffffffffff8111156132d5576132d4613966565b5b6040519080825280602002602001820160405280156133035781602001602082028036833780820191505090505b509050308160008151811061331b5761331a613f0e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e49190614a24565b816001815181106133f8576133f7613f0e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061345d307f000000000000000000000000000000000000000000000000000000000000000084611f19565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134bf959493929190614b4a565b600060405180830381600087803b1580156134d957600080fd5b505af11580156134ed573d6000803e3d6000fd5b505050505050565b613520307f000000000000000000000000000000000000000000000000000000000000000084611f19565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061356a611478565b426040518863ffffffff1660e01b815260040161358c96959493929190614ba4565b60606040518083038185885af11580156135aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135cf9190614c1a565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136105780820151818401526020810190506135f5565b8381111561361f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613641826135d6565b61364b81856135e1565b935061365b8185602086016135f2565b61366481613625565b840191505092915050565b600060208201905081810360008301526136898184613636565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136d0826136a5565b9050919050565b6136e0816136c5565b81146136eb57600080fd5b50565b6000813590506136fd816136d7565b92915050565b6000819050919050565b61371681613703565b811461372157600080fd5b50565b6000813590506137338161370d565b92915050565b600080604083850312156137505761374f61369b565b5b600061375e858286016136ee565b925050602061376f85828601613724565b9150509250929050565b60008115159050919050565b61378e81613779565b82525050565b60006020820190506137a96000830184613785565b92915050565b6000602082840312156137c5576137c461369b565b5b60006137d3848285016136ee565b91505092915050565b6137e581613703565b82525050565b600060208201905061380060008301846137dc565b92915050565b6000819050919050565b600061382b613826613821846136a5565b613806565b6136a5565b9050919050565b600061383d82613810565b9050919050565b600061384f82613832565b9050919050565b61385f81613844565b82525050565b600060208201905061387a6000830184613856565b92915050565b6000602082840312156138965761389561369b565b5b60006138a484828501613724565b91505092915050565b6000806000606084860312156138c6576138c561369b565b5b60006138d4868287016136ee565b93505060206138e5868287016136ee565b92505060406138f686828701613724565b9150509250925092565b600060ff82169050919050565b61391681613900565b82525050565b6000602082019050613931600083018461390d565b92915050565b613940816136c5565b82525050565b600060208201905061395b6000830184613937565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61399e82613625565b810181811067ffffffffffffffff821117156139bd576139bc613966565b5b80604052505050565b60006139d0613691565b90506139dc8282613995565b919050565b600067ffffffffffffffff8211156139fc576139fb613966565b5b602082029050602081019050919050565b600080fd5b6000613a25613a20846139e1565b6139c6565b90508083825260208201905060208402830185811115613a4857613a47613a0d565b5b835b81811015613a715780613a5d88826136ee565b845260208401935050602081019050613a4a565b5050509392505050565b600082601f830112613a9057613a8f613961565b5b8135613aa0848260208601613a12565b91505092915050565b600060208284031215613abf57613abe61369b565b5b600082013567ffffffffffffffff811115613add57613adc6136a0565b5b613ae984828501613a7b565b91505092915050565b60008060408385031215613b0957613b0861369b565b5b6000613b1785828601613724565b9250506020613b2885828601613724565b9150509250929050565b613b3b81613779565b8114613b4657600080fd5b50565b600081359050613b5881613b32565b92915050565b60008060408385031215613b7557613b7461369b565b5b6000613b83858286016136ee565b9250506020613b9485828601613b49565b9150509250929050565b60008060408385031215613bb557613bb461369b565b5b6000613bc3858286016136ee565b9250506020613bd4858286016136ee565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c2557607f821691505b60208210811415613c3957613c38613bde565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c756020836135e1565b9150613c8082613c3f565b602082019050919050565b60006020820190508181036000830152613ca481613c68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ce582613703565b9150613cf083613703565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d2957613d28613cab565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d6e82613703565b9150613d7983613703565b925082613d8957613d88613d34565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613df0602f836135e1565b9150613dfb82613d94565b604082019050919050565b60006020820190508181036000830152613e1f81613de3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e826028836135e1565b9150613e8d82613e26565b604082019050919050565b60006020820190508181036000830152613eb181613e75565b9050919050565b6000613ec382613703565b9150613ece83613703565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f0357613f02613cab565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613f4882613703565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f7b57613f7a613cab565b5b600182019050919050565b7f46656573206d757374206265206c6f776572207468616e203130250000000000600082015250565b6000613fbc601b836135e1565b9150613fc782613f86565b602082019050919050565b60006020820190508181036000830152613feb81613faf565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061404e6039836135e1565b915061405982613ff2565b604082019050919050565b6000602082019050818103600083015261407d81614041565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006140e06025836135e1565b91506140eb82614084565b604082019050919050565b6000602082019050818103600083015261410f816140d3565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006141726024836135e1565b915061417d82614116565b604082019050919050565b600060208201905081810360008301526141a181614165565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006142046035836135e1565b915061420f826141a8565b604082019050919050565b60006020820190508181036000830152614233816141f7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006142966034836135e1565b91506142a18261423a565b604082019050919050565b600060208201905081810360008301526142c581614289565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143286026836135e1565b9150614333826142cc565b604082019050919050565b600060208201905081810360008301526143578161431b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143ba6024836135e1565b91506143c58261435e565b604082019050919050565b600060208201905081810360008301526143e9816143ad565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061444c6022836135e1565b9150614457826143f0565b604082019050919050565b6000602082019050818103600083015261447b8161443f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144de6025836135e1565b91506144e982614482565b604082019050919050565b6000602082019050818103600083015261450d816144d1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145706023836135e1565b915061457b82614514565b604082019050919050565b6000602082019050818103600083015261459f81614563565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120626f742f736e697065722c20796f752061726520756e61626c6520746f2060208201527f7472616e73666572206f7220737761702e000000000000000000000000000000604082015250565b60006146286051836135e1565b9150614633826145a6565b606082019050919050565b600060208201905081810360008301526146578161461b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006146946016836135e1565b915061469f8261465e565b602082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061474c6049836135e1565b9150614757826146ca565b606082019050919050565b6000602082019050818103600083015261477b8161473f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147de6035836135e1565b91506147e982614782565b604082019050919050565b6000602082019050818103600083015261480d816147d1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061484a6013836135e1565b915061485582614814565b602082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148dc6036836135e1565b91506148e782614880565b604082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b600061491d82613703565b915061492883613703565b92508282101561493b5761493a613cab565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006149a26026836135e1565b91506149ad82614946565b604082019050919050565b600060208201905081810360008301526149d181614995565b9050919050565b60006060820190506149ed60008301866137dc565b6149fa60208301856137dc565b614a0760408301846137dc565b949350505050565b600081519050614a1e816136d7565b92915050565b600060208284031215614a3a57614a3961369b565b5b6000614a4884828501614a0f565b91505092915050565b6000819050919050565b6000614a76614a71614a6c84614a51565b613806565b613703565b9050919050565b614a8681614a5b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ac1816136c5565b82525050565b6000614ad38383614ab8565b60208301905092915050565b6000602082019050919050565b6000614af782614a8c565b614b018185614a97565b9350614b0c83614aa8565b8060005b83811015614b3d578151614b248882614ac7565b9750614b2f83614adf565b925050600181019050614b10565b5085935050505092915050565b600060a082019050614b5f60008301886137dc565b614b6c6020830187614a7d565b8181036040830152614b7e8186614aec565b9050614b8d6060830185613937565b614b9a60808301846137dc565b9695505050505050565b600060c082019050614bb96000830189613937565b614bc660208301886137dc565b614bd36040830187614a7d565b614be06060830186614a7d565b614bed6080830185613937565b614bfa60a08301846137dc565b979650505050505050565b600081519050614c148161370d565b92915050565b600080600060608486031215614c3357614c3261369b565b5b6000614c4186828701614c05565b9350506020614c5286828701614c05565b9250506040614c6386828701614c05565b915050925092509256fea26469706673582212206e197874f2e8c57c82f7344cb58598c95a175c196a805f7bcbab117a56f6fc4864736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80637571336a11610139578063c0246668116100b6578063d34628cc1161007a578063d34628cc146108b1578063dd62ed3e146108da578063e2f4560514610917578063e884f26014610942578063f2fde38b1461096d578063f8b45b051461099657610251565b8063c0246668146107cc578063c18bc195146107f5578063c876d0b91461081e578063c8c8ebe414610849578063d257b34f1461087457610251565b80639a7a23d6116100fd5780639a7a23d6146106c1578063a457c2d7146106ea578063a9059cbb14610727578063b62496f514610764578063bbc0c742146107a157610251565b80637571336a146106025780637cb332bb1461062b5780638a8c523c146106545780638da5cb5b1461066b57806395d89b411461069657610251565b80633bbac579116101c75780636c3bbfd71161018b5780636c3bbfd7146105315780636db794371461055a57806370a0823114610583578063715018a6146105c0578063751039fc146105d757610251565b80633bbac5791461044a57806349bd5a5e146104875780634a62bb65146104b25780634fbee193146104dd57806355291dbd1461051a57610251565b806318160ddd1161020e57806318160ddd14610351578063203e727e1461037c57806323b872dd146103a5578063313ce567146103e2578063395093511461040d57610251565b806306fdde0314610256578063095ea7b31461028157806310d5de53146102be57806313114a9d146102fb5780631694505e1461032657610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109c1565b604051610278919061366f565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613739565b610a53565b6040516102b59190613794565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e091906137af565b610a71565b6040516102f29190613794565b60405180910390f35b34801561030757600080fd5b50610310610a91565b60405161031d91906137eb565b60405180910390f35b34801561033257600080fd5b5061033b610a97565b6040516103489190613865565b60405180910390f35b34801561035d57600080fd5b50610366610abb565b60405161037391906137eb565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613880565b610ac5565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906138ad565b610bd4565b6040516103d99190613794565b60405180910390f35b3480156103ee57600080fd5b506103f7610cf3565b604051610404919061391c565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613739565b610cfc565b6040516104419190613794565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c91906137af565b610da8565b60405161047e9190613794565b60405180910390f35b34801561049357600080fd5b5061049c610dc8565b6040516104a99190613946565b60405180910390f35b3480156104be57600080fd5b506104c7610dec565b6040516104d49190613794565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff91906137af565b610dff565b6040516105119190613794565b60405180910390f35b34801561052657600080fd5b5061052f610e55565b005b34801561053d57600080fd5b5061055860048036038101906105539190613aa9565b610ec0565b005b34801561056657600080fd5b50610581600480360381019061057c9190613af2565b610fd1565b005b34801561058f57600080fd5b506105aa60048036038101906105a591906137af565b6110be565b6040516105b791906137eb565b60405180910390f35b3480156105cc57600080fd5b506105d5611106565b005b3480156105e357600080fd5b506105ec61118e565b6040516105f99190613794565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190613b5e565b61122e565b005b34801561063757600080fd5b50610652600480360381019061064d91906137af565b611305565b005b34801561066057600080fd5b506106696113c5565b005b34801561067757600080fd5b50610680611478565b60405161068d9190613946565b60405180910390f35b3480156106a257600080fd5b506106ab6114a2565b6040516106b8919061366f565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190613b5e565b611534565b005b3480156106f657600080fd5b50610711600480360381019061070c9190613739565b61164d565b60405161071e9190613794565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190613739565b611738565b60405161075b9190613794565b60405180910390f35b34801561077057600080fd5b5061078b600480360381019061078691906137af565b611756565b6040516107989190613794565b60405180910390f35b3480156107ad57600080fd5b506107b6611776565b6040516107c39190613794565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee9190613b5e565b611789565b005b34801561080157600080fd5b5061081c60048036038101906108179190613880565b611860565b005b34801561082a57600080fd5b5061083361196f565b6040516108409190613794565b60405180910390f35b34801561085557600080fd5b5061085e611982565b60405161086b91906137eb565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613880565b611988565b6040516108a89190613794565b60405180910390f35b3480156108bd57600080fd5b506108d860048036038101906108d39190613aa9565b611add565b005b3480156108e657600080fd5b5061090160048036038101906108fc9190613b9e565b611cd0565b60405161090e91906137eb565b60405180910390f35b34801561092357600080fd5b5061092c611d57565b60405161093991906137eb565b60405180910390f35b34801561094e57600080fd5b50610957611d5d565b6040516109649190613794565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f91906137af565b611dfd565b005b3480156109a257600080fd5b506109ab611ef5565b6040516109b891906137eb565b60405180910390f35b6060600380546109d090613c0d565b80601f01602080910402602001604051908101604052809291908181526020018280546109fc90613c0d565b8015610a495780601f10610a1e57610100808354040283529160200191610a49565b820191906000526020600020905b815481529060010190602001808311610a2c57829003601f168201915b5050505050905090565b6000610a67610a60611f11565b8484611f19565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b60125481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610acd611f11565b73ffffffffffffffffffffffffffffffffffffffff16610aeb611478565b73ffffffffffffffffffffffffffffffffffffffff1614610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890613c8b565b60405180910390fd5b670de0b6b3a76400006103e86001610b57610abb565b610b619190613cda565b610b6b9190613d63565b610b759190613d63565b811015610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613e06565b60405180910390fd5b670de0b6b3a764000081610bcb9190613cda565b600a8190555050565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c20611f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cdc5782811015610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90613e98565b60405180910390fd5b610cdb85610cd3611f11565b858403611f19565b5b610ce78585856120e4565b60019150509392505050565b60006012905090565b6000610d9e610d09611f11565b848460016000610d17611f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d999190613eb8565b611f19565b6001905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000aac3d129aa3aa04b861fd558c53e140d8892d82e81565b600d60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ebd573d6000803e3d6000fd5b50565b610ec8611f11565b73ffffffffffffffffffffffffffffffffffffffff16610ee6611478565b73ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390613c8b565b60405180910390fd5b60005b8151811015610fcd57600060066000848481518110610f6157610f60613f0e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610fc590613f3d565b915050610f3f565b5050565b610fd9611f11565b73ffffffffffffffffffffffffffffffffffffffff16610ff7611478565b73ffffffffffffffffffffffffffffffffffffffff161461104d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104490613c8b565b60405180910390fd5b816010819055508060118190555061106e8183611efb90919063ffffffff16565b601281905550600a60125411156110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190613fd2565b60405180910390fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61110e611f11565b73ffffffffffffffffffffffffffffffffffffffff1661112c611478565b73ffffffffffffffffffffffffffffffffffffffff1614611182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117990613c8b565b60405180910390fd5b61118c6000612d4e565b565b6000611198611f11565b73ffffffffffffffffffffffffffffffffffffffff166111b6611478565b73ffffffffffffffffffffffffffffffffffffffff161461120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390613c8b565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611236611f11565b73ffffffffffffffffffffffffffffffffffffffff16611254611478565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190613c8b565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61130d611f11565b73ffffffffffffffffffffffffffffffffffffffff1661132b611478565b73ffffffffffffffffffffffffffffffffffffffff1614611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890613c8b565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113cd611f11565b73ffffffffffffffffffffffffffffffffffffffff166113eb611478565b73ffffffffffffffffffffffffffffffffffffffff1614611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613c8b565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550611470600242611efb90919063ffffffff16565b600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114b190613c0d565b80601f01602080910402602001604051908101604052809291908181526020018280546114dd90613c0d565b801561152a5780601f106114ff5761010080835404028352916020019161152a565b820191906000526020600020905b81548152906001019060200180831161150d57829003601f168201915b5050505050905090565b61153c611f11565b73ffffffffffffffffffffffffffffffffffffffff1661155a611478565b73ffffffffffffffffffffffffffffffffffffffff16146115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790613c8b565b60405180910390fd5b7f000000000000000000000000aac3d129aa3aa04b861fd558c53e140d8892d82e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690614064565b60405180910390fd5b6116498282612e14565b5050565b6000806001600061165c611f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611710906140f6565b60405180910390fd5b61172d611724611f11565b85858403611f19565b600191505092915050565b600061174c611745611f11565b84846120e4565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611791611f11565b73ffffffffffffffffffffffffffffffffffffffff166117af611478565b73ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90613c8b565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611868611f11565b73ffffffffffffffffffffffffffffffffffffffff16611886611478565b73ffffffffffffffffffffffffffffffffffffffff16146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613c8b565b60405180910390fd5b670de0b6b3a76400006103e860056118f2610abb565b6118fc9190613cda565b6119069190613d63565b6119109190613d63565b811015611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614188565b60405180910390fd5b670de0b6b3a7640000816119669190613cda565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611992611f11565b73ffffffffffffffffffffffffffffffffffffffff166119b0611478565b73ffffffffffffffffffffffffffffffffffffffff1614611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613c8b565b60405180910390fd5b620186a06001611a14610abb565b611a1e9190613cda565b611a289190613d63565b821015611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a619061421a565b60405180910390fd5b6103e86005611a77610abb565b611a819190613cda565b611a8b9190613d63565b821115611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac4906142ac565b60405180910390fd5b81600b8190555060019050919050565b611ae5611f11565b73ffffffffffffffffffffffffffffffffffffffff16611b03611478565b73ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090613c8b565b60405180910390fd5b60005b8151811015611ccc577f000000000000000000000000aac3d129aa3aa04b861fd558c53e140d8892d82e73ffffffffffffffffffffffffffffffffffffffff16828281518110611baf57611bae613f0e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015611c4157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16828281518110611c2057611c1f613f0e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15611cb957600160066000848481518110611c5f57611c5e613f0e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611cc490613f3d565b915050611b5c565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000611d67611f11565b73ffffffffffffffffffffffffffffffffffffffff16611d85611478565b73ffffffffffffffffffffffffffffffffffffffff1614611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290613c8b565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611e05611f11565b73ffffffffffffffffffffffffffffffffffffffff16611e23611478565b73ffffffffffffffffffffffffffffffffffffffff1614611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090613c8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee09061433e565b60405180910390fd5b611ef281612d4e565b50565b600c5481565b60008183611f099190613eb8565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f80906143d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090614462565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120d791906137eb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b906144f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90614586565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122489061463e565b60405180910390fd5b600081141561226b5761226683836000612e6f565b612d49565b6008544210156122ce576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612991576122eb611478565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123595750612329611478565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123925750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123cc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e55750600760009054906101000a900460ff16155b1561299057600d60019054906101000a900460ff166124df57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061249f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d5906146aa565b60405180910390fd5b5b600f60009054906101000a900460ff16156126a7576124fc611478565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561258357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125db57507f000000000000000000000000aac3d129aa3aa04b861fd558c53e140d8892d82e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126a65743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265890614762565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561274a5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127f157600a54811115612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278b906147f4565b60405180910390fd5b600c546127a0836110be565b826127ab9190613eb8565b11156127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e390614860565b60405180910390fd5b61298f565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128945750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128e357600a548111156128de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d5906148f2565b60405180910390fd5b61298e565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661298d57600c54612940836110be565b8261294b9190613eb8565b111561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390614860565b60405180910390fd5b5b5b5b5b5b600061299c306110be565b90506000600b5482101590508080156129c25750600760009054906101000a900460ff16155b8015612a185750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a6e5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ac45750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b08576001600760006101000a81548160ff021916908315150217905550612aec6130f0565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bbe5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bc857600090505b60008115612d3957601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c715750601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612c7f57506000601254115b15612d1557612cac6064612c9e6012548861326c90919063ffffffff16565b61328290919063ffffffff16565b905060125460105482612cbf9190613cda565b612cc99190613d63565b60136000828254612cda9190613eb8565b9250508190555060125460115482612cf29190613cda565b612cfc9190613d63565b60146000828254612d0d9190613eb8565b925050819055505b6000811115612d2a57612d29873083612e6f565b5b8085612d369190614912565b94505b612d44878787612e6f565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed6906144f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4690614586565b60405180910390fd5b612f5a838383613298565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd7906149b8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130739190613eb8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130d791906137eb565b60405180910390a36130ea84848461329d565b50505050565b60006130fb306110be565b9050600060135460145461310f9190613eb8565b905060008214806131205750600081145b1561312c57505061326a565b6014600b5461313b9190613cda565b821115613154576014600b546131519190613cda565b91505b6000600282601454856131679190613cda565b6131719190613d63565b61317b9190613d63565b9050600061319282856132a290919063ffffffff16565b905060004790506131a2826132b8565b60006131b782476132a290919063ffffffff16565b905060006131e2866131d46013548561326c90919063ffffffff16565b61328290919063ffffffff16565b9050600081836131f29190614912565b9050600060138190555060006014819055506000861180156132145750600081115b156132615761322386826134f5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601454604051613258939291906149d8565b60405180910390a15b50505050505050505b565b6000818361327a9190613cda565b905092915050565b600081836132909190613d63565b905092915050565b505050565b505050565b600081836132b09190614912565b905092915050565b6000600267ffffffffffffffff8111156132d5576132d4613966565b5b6040519080825280602002602001820160405280156133035781602001602082028036833780820191505090505b509050308160008151811061331b5761331a613f0e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e49190614a24565b816001815181106133f8576133f7613f0e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061345d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f19565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134bf959493929190614b4a565b600060405180830381600087803b1580156134d957600080fd5b505af11580156134ed573d6000803e3d6000fd5b505050505050565b613520307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f19565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061356a611478565b426040518863ffffffff1660e01b815260040161358c96959493929190614ba4565b60606040518083038185885af11580156135aa573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135cf9190614c1a565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136105780820151818401526020810190506135f5565b8381111561361f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613641826135d6565b61364b81856135e1565b935061365b8185602086016135f2565b61366481613625565b840191505092915050565b600060208201905081810360008301526136898184613636565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136d0826136a5565b9050919050565b6136e0816136c5565b81146136eb57600080fd5b50565b6000813590506136fd816136d7565b92915050565b6000819050919050565b61371681613703565b811461372157600080fd5b50565b6000813590506137338161370d565b92915050565b600080604083850312156137505761374f61369b565b5b600061375e858286016136ee565b925050602061376f85828601613724565b9150509250929050565b60008115159050919050565b61378e81613779565b82525050565b60006020820190506137a96000830184613785565b92915050565b6000602082840312156137c5576137c461369b565b5b60006137d3848285016136ee565b91505092915050565b6137e581613703565b82525050565b600060208201905061380060008301846137dc565b92915050565b6000819050919050565b600061382b613826613821846136a5565b613806565b6136a5565b9050919050565b600061383d82613810565b9050919050565b600061384f82613832565b9050919050565b61385f81613844565b82525050565b600060208201905061387a6000830184613856565b92915050565b6000602082840312156138965761389561369b565b5b60006138a484828501613724565b91505092915050565b6000806000606084860312156138c6576138c561369b565b5b60006138d4868287016136ee565b93505060206138e5868287016136ee565b92505060406138f686828701613724565b9150509250925092565b600060ff82169050919050565b61391681613900565b82525050565b6000602082019050613931600083018461390d565b92915050565b613940816136c5565b82525050565b600060208201905061395b6000830184613937565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61399e82613625565b810181811067ffffffffffffffff821117156139bd576139bc613966565b5b80604052505050565b60006139d0613691565b90506139dc8282613995565b919050565b600067ffffffffffffffff8211156139fc576139fb613966565b5b602082029050602081019050919050565b600080fd5b6000613a25613a20846139e1565b6139c6565b90508083825260208201905060208402830185811115613a4857613a47613a0d565b5b835b81811015613a715780613a5d88826136ee565b845260208401935050602081019050613a4a565b5050509392505050565b600082601f830112613a9057613a8f613961565b5b8135613aa0848260208601613a12565b91505092915050565b600060208284031215613abf57613abe61369b565b5b600082013567ffffffffffffffff811115613add57613adc6136a0565b5b613ae984828501613a7b565b91505092915050565b60008060408385031215613b0957613b0861369b565b5b6000613b1785828601613724565b9250506020613b2885828601613724565b9150509250929050565b613b3b81613779565b8114613b4657600080fd5b50565b600081359050613b5881613b32565b92915050565b60008060408385031215613b7557613b7461369b565b5b6000613b83858286016136ee565b9250506020613b9485828601613b49565b9150509250929050565b60008060408385031215613bb557613bb461369b565b5b6000613bc3858286016136ee565b9250506020613bd4858286016136ee565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c2557607f821691505b60208210811415613c3957613c38613bde565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c756020836135e1565b9150613c8082613c3f565b602082019050919050565b60006020820190508181036000830152613ca481613c68565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ce582613703565b9150613cf083613703565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d2957613d28613cab565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d6e82613703565b9150613d7983613703565b925082613d8957613d88613d34565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613df0602f836135e1565b9150613dfb82613d94565b604082019050919050565b60006020820190508181036000830152613e1f81613de3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e826028836135e1565b9150613e8d82613e26565b604082019050919050565b60006020820190508181036000830152613eb181613e75565b9050919050565b6000613ec382613703565b9150613ece83613703565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f0357613f02613cab565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613f4882613703565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f7b57613f7a613cab565b5b600182019050919050565b7f46656573206d757374206265206c6f776572207468616e203130250000000000600082015250565b6000613fbc601b836135e1565b9150613fc782613f86565b602082019050919050565b60006020820190508181036000830152613feb81613faf565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061404e6039836135e1565b915061405982613ff2565b604082019050919050565b6000602082019050818103600083015261407d81614041565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006140e06025836135e1565b91506140eb82614084565b604082019050919050565b6000602082019050818103600083015261410f816140d3565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006141726024836135e1565b915061417d82614116565b604082019050919050565b600060208201905081810360008301526141a181614165565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006142046035836135e1565b915061420f826141a8565b604082019050919050565b60006020820190508181036000830152614233816141f7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006142966034836135e1565b91506142a18261423a565b604082019050919050565b600060208201905081810360008301526142c581614289565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143286026836135e1565b9150614333826142cc565b604082019050919050565b600060208201905081810360008301526143578161431b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143ba6024836135e1565b91506143c58261435e565b604082019050919050565b600060208201905081810360008301526143e9816143ad565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061444c6022836135e1565b9150614457826143f0565b604082019050919050565b6000602082019050818103600083015261447b8161443f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144de6025836135e1565b91506144e982614482565b604082019050919050565b6000602082019050818103600083015261450d816144d1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145706023836135e1565b915061457b82614514565b604082019050919050565b6000602082019050818103600083015261459f81614563565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120626f742f736e697065722c20796f752061726520756e61626c6520746f2060208201527f7472616e73666572206f7220737761702e000000000000000000000000000000604082015250565b60006146286051836135e1565b9150614633826145a6565b606082019050919050565b600060208201905081810360008301526146578161461b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006146946016836135e1565b915061469f8261465e565b602082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061474c6049836135e1565b9150614757826146ca565b606082019050919050565b6000602082019050818103600083015261477b8161473f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147de6035836135e1565b91506147e982614782565b604082019050919050565b6000602082019050818103600083015261480d816147d1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061484a6013836135e1565b915061485582614814565b602082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148dc6036836135e1565b91506148e782614880565b604082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b600061491d82613703565b915061492883613703565b92508282101561493b5761493a613cab565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006149a26026836135e1565b91506149ad82614946565b604082019050919050565b600060208201905081810360008301526149d181614995565b9050919050565b60006060820190506149ed60008301866137dc565b6149fa60208301856137dc565b614a0760408301846137dc565b949350505050565b600081519050614a1e816136d7565b92915050565b600060208284031215614a3a57614a3961369b565b5b6000614a4884828501614a0f565b91505092915050565b6000819050919050565b6000614a76614a71614a6c84614a51565b613806565b613703565b9050919050565b614a8681614a5b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ac1816136c5565b82525050565b6000614ad38383614ab8565b60208301905092915050565b6000602082019050919050565b6000614af782614a8c565b614b018185614a97565b9350614b0c83614aa8565b8060005b83811015614b3d578151614b248882614ac7565b9750614b2f83614adf565b925050600181019050614b10565b5085935050505092915050565b600060a082019050614b5f60008301886137dc565b614b6c6020830187614a7d565b8181036040830152614b7e8186614aec565b9050614b8d6060830185613937565b614b9a60808301846137dc565b9695505050505050565b600060c082019050614bb96000830189613937565b614bc660208301886137dc565b614bd36040830187614a7d565b614be06060830186614a7d565b614bed6080830185613937565b614bfa60a08301846137dc565b979650505050505050565b600081519050614c148161370d565b92915050565b600080600060608486031215614c3357614c3261369b565b5b6000614c4186828701614c05565b9350506020614c5286828701614c05565b9250506040614c6386828701614c05565b915050925092509256fea26469706673582212206e197874f2e8c57c82f7344cb58598c95a175c196a805f7bcbab117a56f6fc4864736f6c634300080b0033

Deployed Bytecode Sourcemap

11697:12561:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3001:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3915:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12802:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12543:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11774:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3322:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15810:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4092:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3221:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4673:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11879:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11832;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12152:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17353:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24116:102;;;;;;;;;;;;;:::i;:::-;;17769:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16429:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3438:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10480:103;;;;;;;;;;;;;:::i;:::-;;15020:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16273:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17239:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14834:130;;;;;;;;;;;;;:::i;:::-;;10257:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3109:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16845:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4896:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3573:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13024:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12192:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16705:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16050:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12416:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12029:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15416:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17490:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3756:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12071:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15206:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10591:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12111:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3001:100;3055:13;3088:5;3081:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3001:100;:::o;3915:169::-;3998:4;4015:39;4024:12;:10;:12::i;:::-;4038:7;4047:6;4015:8;:39::i;:::-;4072:4;4065:11;;3915:169;;;;:::o;12802:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;12543:24::-;;;;:::o;11774:51::-;;;:::o;3322:108::-;3383:7;3410:12;;3403:19;;3322:108;:::o;15810:232::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15931:4:::1;15923;15919:1;15903:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;15902:33;;;;:::i;:::-;15892:6;:43;;15884:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;16030:4;16021:6;:13;;;;:::i;:::-;15998:20;:36;;;;15810:232:::0;:::o;4092:573::-;4232:4;4249:24;4276:11;:19;4288:6;4276:19;;;;;;;;;;;;;;;:33;4296:12;:10;:12::i;:::-;4276:33;;;;;;;;;;;;;;;;4249:60;;4344:17;4324:16;:37;4320:265;;4406:6;4386:16;:26;;4378:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4501:57;4510:6;4518:12;:10;:12::i;:::-;4551:6;4532:16;:25;4501:8;:57::i;:::-;4320:265;4597:36;4607:6;4615:9;4626:6;4597:9;:36::i;:::-;4653:4;4646:11;;;4092:573;;;;;:::o;3221:93::-;3279:5;3304:2;3297:9;;3221:93;:::o;4673:215::-;4761:4;4778:80;4787:12;:10;:12::i;:::-;4801:7;4847:10;4810:11;:25;4822:12;:10;:12::i;:::-;4810:25;;;;;;;;;;;;;;;:34;4836:7;4810:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4778:8;:80::i;:::-;4876:4;4869:11;;4673:215;;;;:::o;11879:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;11832:::-;;;:::o;12152:33::-;;;;;;;;;;;;;:::o;17353:125::-;17418:4;17442:19;:28;17462:7;17442:28;;;;;;;;;;;;;;;;;;;;;;;;;17435:35;;17353:125;;;:::o;24116:102::-;24166:11;;;;;;;;;;;24158:29;;:52;24188:21;24158:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24116:102::o;17769:168::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17847:6:::1;17842:88;17863:4;:11;17859:1;:15;17842:88;;;17913:5;17896;:14;17902:4;17907:1;17902:7;;;;;;;;:::i;:::-;;;;;;;;17896:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;17876:3;;;;;:::i;:::-;;;;17842:88;;;;17769:168:::0;:::o;16429:268::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16529:7:::1;16518:8;:18;;;;16563:12;16547:13;:28;;;;16598:25;16610:12;16598:7;:11;;:25;;;;:::i;:::-;16586:9;:37;;;;16655:2;16642:9;;:15;;16634:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;16429:268:::0;;:::o;3438:127::-;3512:7;3539:9;:18;3549:7;3539:18;;;;;;;;;;;;;;;;3532:25;;3438:127;;;:::o;10480:103::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10545:30:::1;10572:1;10545:18;:30::i;:::-;10480:103::o:0;15020:121::-;15072:4;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15106:5:::1;15089:14;;:22;;;;;;;;;;;;;;;;;;15129:4;15122:11;;15020:121:::0;:::o;16273:144::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16405:4:::1;16363:31;:39;16395:6;16363:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;16273:144:::0;;:::o;17239:106::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17328:9:::1;17314:11;;:23;;;;;;;;;;;;;;;;;;17239:106:::0;:::o;14834:130::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14905:4:::1;14889:13;;:20;;;;;;;;;;;;;;;;;;14934:22;14954:1;14934:15;:19;;:22;;;;:::i;:::-;14920:11;:36;;;;14834:130::o:0;10257:87::-;10303:7;10330:6;;;;;;;;;;;10323:13;;10257:87;:::o;3109:104::-;3165:13;3198:7;3191:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3109:104;:::o;16845:244::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16952:13:::1;16944:21;;:4;:21;;;;16936:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;17040:41;17069:4;17075:5;17040:28;:41::i;:::-;16845:244:::0;;:::o;4896:413::-;4989:4;5006:24;5033:11;:25;5045:12;:10;:12::i;:::-;5033:25;;;;;;;;;;;;;;;:34;5059:7;5033:34;;;;;;;;;;;;;;;;5006:61;;5106:15;5086:16;:35;;5078:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5199:67;5208:12;:10;:12::i;:::-;5222:7;5250:15;5231:16;:34;5199:8;:67::i;:::-;5297:4;5290:11;;;4896:413;;;;:::o;3573:175::-;3659:4;3676:42;3686:12;:10;:12::i;:::-;3700:9;3711:6;3676:9;:42::i;:::-;3736:4;3729:11;;3573:175;;;;:::o;13024:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;12192:33::-;;;;;;;;;;;;;:::o;16705:132::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16821:8:::1;16790:19;:28;16810:7;16790:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;16705:132:::0;;:::o;16050:211::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16172:4:::1;16166;16162:1;16146:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;16145:31;;;;:::i;:::-;16135:6;:41;;16127:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;16249:4;16240:6;:13;;;;:::i;:::-;16228:9;:25;;;;16050:211:::0;:::o;12416:39::-;;;;;;;;;;;;;:::o;12029:35::-;;;;:::o;15416:382::-;15497:4;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15554:6:::1;15550:1;15534:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;15521:9;:39;;15513:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;15669:4;15665:1;15649:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;15636:9;:37;;15628:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;15761:9;15740:18;:30;;;;15787:4;15780:11;;15416:382:::0;;;:::o;17490:267::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17565:6:::1;17560:190;17581:4;:11;17577:1;:15;17560:190;;;17629:13;17618:24;;:4;17623:1;17618:7;;;;;;;;:::i;:::-;;;;;;;;:24;;;;:63;;;;;17665:15;17646:35;;:4;17651:1;17646:7;;;;;;;;:::i;:::-;;;;;;;;:35;;;;17618:63;17614:125;;;17719:4;17702:5;:14;17708:4;17713:1;17708:7;;;;;;;;:::i;:::-;;;;;;;;17702:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;17614:125;17594:3;;;;;:::i;:::-;;;;17560:190;;;;17490:267:::0;:::o;3756:151::-;3845:7;3872:11;:18;3884:5;3872:18;;;;;;;;;;;;;;;:27;3891:7;3872:27;;;;;;;;;;;;;;;;3865:34;;3756:151;;;;:::o;12071:33::-;;;;:::o;15206:135::-;15266:4;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15306:5:::1;15283:20;;:28;;;;;;;;;;;;;;;;;;15329:4;15322:11;;15206:135:::0;:::o;10591:201::-;10403:12;:10;:12::i;:::-;10392:23;;:7;:5;:7::i;:::-;:23;;;10384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10700:1:::1;10680:22;;:8;:22;;;;10672:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10756:28;10775:8;10756:18;:28::i;:::-;10591:201:::0;:::o;12111:24::-;;;;:::o;8854:98::-;8912:7;8943:1;8939;:5;;;;:::i;:::-;8932:12;;8854:98;;;;:::o;95:::-;148:7;175:10;168:17;;95:98;:::o;7064:380::-;7217:1;7200:19;;:5;:19;;;;7192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7298:1;7279:21;;:7;:21;;;;7271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7382:6;7352:11;:18;7364:5;7352:18;;;;;;;;;;;;;;;:27;7371:7;7352:27;;;;;;;;;;;;;;;:36;;;;7420:7;7404:32;;7413:5;7404:32;;;7429:6;7404:32;;;;;;:::i;:::-;;;;;;;;7064:380;;;:::o;17945:3781::-;18093:1;18077:18;;:4;:18;;;;18069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18170:1;18156:16;;:2;:16;;;;18148:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18232:5;:11;18238:4;18232:11;;;;;;;;;;;;;;;;;;;;;;;;;18231:12;18223:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;18365:1;18355:6;:11;18351:93;;;18383:28;18399:4;18405:2;18409:1;18383:15;:28::i;:::-;18426:7;;18351:93;18486:11;;18468:15;:29;18464:51;;;18511:4;18499:5;:9;18505:2;18499:9;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;18464:51;18540:14;;;;;;;;;;;18536:1834;;;18601:7;:5;:7::i;:::-;18593:15;;:4;:15;;;;:49;;;;;18635:7;:5;:7::i;:::-;18629:13;;:2;:13;;;;18593:49;:86;;;;;18677:1;18663:16;;:2;:16;;;;18593:86;:128;;;;;18714:6;18700:21;;:2;:21;;;;18593:128;:159;;;;;18743:9;;;;;;;;;;;18742:10;18593:159;18571:1788;;;18792:13;;;;;;;;;;;18787:150;;18838:19;:25;18858:4;18838:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;18867:19;:23;18887:2;18867:23;;;;;;;;;;;;;;;;;;;;;;;;;18838:52;18830:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;18787:150;19095:20;;;;;;;;;;;19091:423;;;19149:7;:5;:7::i;:::-;19143:13;;:2;:13;;;;:47;;;;;19174:15;19160:30;;:2;:30;;;;19143:47;:79;;;;;19208:13;19194:28;;:2;:28;;;;19143:79;19139:356;;;19300:12;19258:28;:39;19287:9;19258:39;;;;;;;;;;;;;;;;:54;19250:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;19459:12;19417:28;:39;19446:9;19417:39;;;;;;;;;;;;;;;:54;;;;19139:356;19091:423;19582:25;:31;19608:4;19582:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;19618:31;:35;19650:2;19618:35;;;;;;;;;;;;;;;;;;;;;;;;;19617:36;19582:71;19578:766;;;19696:20;;19686:6;:30;;19678:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;19831:9;;19814:13;19824:2;19814:9;:13::i;:::-;19805:6;:22;;;;:::i;:::-;:35;;19797:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19578:766;;;19957:25;:29;19983:2;19957:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;19991:31;:37;20023:4;19991:37;;;;;;;;;;;;;;;;;;;;;;;;;19990:38;19957:71;19953:391;;;20071:20;;20061:6;:30;;20053:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;19953:391;;;20198:31;:35;20230:2;20198:35;;;;;;;;;;;;;;;;;;;;;;;;;20193:151;;20291:9;;20274:13;20284:2;20274:9;:13::i;:::-;20265:6;:22;;;;:::i;:::-;:35;;20257:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20193:151;19953:391;19578:766;18571:1788;18536:1834;20384:28;20415:24;20433:4;20415:9;:24::i;:::-;20384:55;;20450:12;20489:18;;20465:20;:42;;20450:57;;20536:7;:34;;;;;20561:9;;;;;;;;;;;20560:10;20536:34;:83;;;;;20588:25;:31;20614:4;20588:31;;;;;;;;;;;;;;;;;;;;;;;;;20587:32;20536:83;:126;;;;;20637:19;:25;20657:4;20637:25;;;;;;;;;;;;;;;;;;;;;;;;;20636:26;20536:126;:167;;;;;20680:19;:23;20700:2;20680:23;;;;;;;;;;;;;;;;;;;;;;;;;20679:24;20536:167;20518:297;;;20742:4;20730:9;;:16;;;;;;;;;;;;;;;;;;20761:10;:8;:10::i;:::-;20798:5;20786:9;;:17;;;;;;;;;;;;;;;;;;20518:297;20827:12;20843:9;;;;;;;;;;;20842:10;20827:25;;20954:19;:25;20974:4;20954:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;20983:19;:23;21003:2;20983:23;;;;;;;;;;;;;;;;;;;;;;;;;20954:52;20950:73;;;21018:5;21008:15;;20950:73;21054:12;21159:7;21155:518;;;21212:25;:29;21238:2;21212:29;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;21245:25;:31;21271:4;21245:31;;;;;;;;;;;;;;;;;;;;;;;;;21212:64;21211:83;;;;;21293:1;21281:9;;:13;21211:83;21207:299;;;21322:30;21348:3;21322:21;21333:9;;21322:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;21315:37;;21407:9;;21396:8;;21389:4;:15;;;;:::i;:::-;:27;;;;:::i;:::-;21371:14;;:45;;;;;;;:::i;:::-;;;;;;;;21481:9;;21465:13;;21458:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;21435:19;;:55;;;;;;;:::i;:::-;;;;;;;;21207:299;21545:1;21538:4;:8;21534:91;;;21567:42;21583:4;21597;21604;21567:15;:42::i;:::-;21534:91;21657:4;21647:14;;;;;:::i;:::-;;;21155:518;21685:33;21701:4;21707:2;21711:6;21685:15;:33::i;:::-;18058:3668;;;;17945:3781;;;;:::o;10800:191::-;10874:16;10893:6;;;;;;;;;;;10874:25;;10919:8;10910:6;;:17;;;;;;;;;;;;;;;;;;10974:8;10943:40;;10964:8;10943:40;;;;;;;;;;;;10863:128;10800:191;:::o;17097:130::-;17214:5;17180:25;:31;17206:4;17180:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17097:130;;:::o;5317:733::-;5475:1;5457:20;;:6;:20;;;;5449:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5559:1;5538:23;;:9;:23;;;;5530:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5614:47;5635:6;5643:9;5654:6;5614:20;:47::i;:::-;5674:21;5698:9;:17;5708:6;5698:17;;;;;;;;;;;;;;;;5674:41;;5751:6;5734:13;:23;;5726:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5872:6;5856:13;:22;5836:9;:17;5846:6;5836:17;;;;;;;;;;;;;;;:42;;;;5924:6;5900:9;:20;5910:9;5900:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5965:9;5948:35;;5957:6;5948:35;;;5976:6;5948:35;;;;;;:::i;:::-;;;;;;;;5996:46;6016:6;6024:9;6035:6;5996:19;:46::i;:::-;5438:612;5317:733;;;:::o;22858:1250::-;22897:23;22923:24;22941:4;22923:9;:24::i;:::-;22897:50;;22958:25;23008:14;;22986:19;;:36;;;;:::i;:::-;22958:64;;23066:1;23047:15;:20;:46;;;;23092:1;23071:17;:22;23047:46;23043:59;;;23095:7;;;;23043:59;23155:2;23134:18;;:23;;;;:::i;:::-;23116:15;:41;23112:88;;;23198:2;23177:18;;:23;;;;:::i;:::-;23159:41;;23112:88;23270:23;23356:1;23336:17;23314:19;;23296:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;23270:87;;23368:26;23397:36;23417:15;23397;:19;;:36;;;;:::i;:::-;23368:65;;23454:25;23482:21;23454:49;;23516:37;23534:18;23516:17;:37::i;:::-;23575:18;23596:44;23622:17;23596:21;:25;;:44;;;;:::i;:::-;23575:65;;23651:18;23672:53;23707:17;23672:30;23687:14;;23672:10;:14;;:30;;;;:::i;:::-;:34;;:53;;;;:::i;:::-;23651:74;;23736:23;23775:10;23762;:23;;;;:::i;:::-;23736:49;;23823:1;23806:14;:18;;;;23857:1;23835:19;:23;;;;23909:1;23891:15;:19;:42;;;;;23932:1;23914:15;:19;23891:42;23887:214;;;23950:47;23964:15;23981;23950:13;:47::i;:::-;24017:72;24032:18;24052:15;24069:19;;24017:72;;;;;;;;:::i;:::-;;;;;;;;23887:214;22886:1222;;;;;;;;22858:1250;:::o;9066:98::-;9124:7;9155:1;9151;:5;;;;:::i;:::-;9144:12;;9066:98;;;;:::o;9172:::-;9230:7;9261:1;9257;:5;;;;:::i;:::-;9250:12;;9172:98;;;;:::o;7452:125::-;;;;:::o;7585:124::-;;;;:::o;8960:98::-;9018:7;9049:1;9045;:5;;;;:::i;:::-;9038:12;;8960:98;;;;:::o;21734:590::-;21861:21;21899:1;21885:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21861:40;;21930:4;21912;21917:1;21912:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21956:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21946:4;21951:1;21946:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;21991:62;22008:4;22023:15;22041:11;21991:8;:62::i;:::-;22092:15;:66;;;22173:11;22199:1;22243:4;22270;22290:15;22092:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21790:534;21734:590;:::o;22336:514::-;22485:62;22502:4;22517:15;22535:11;22485:8;:62::i;:::-;22590:15;:31;;;22629:9;22662:4;22682:11;22708:1;22751;22794:7;:5;:7::i;:::-;22816:15;22590:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22336:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:118::-;3916:24;3934:5;3916:24;:::i;:::-;3911:3;3904:37;3829:118;;:::o;3953:222::-;4046:4;4084:2;4073:9;4069:18;4061:26;;4097:71;4165:1;4154:9;4150:17;4141:6;4097:71;:::i;:::-;3953:222;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:117::-;7010:1;7007;7000:12;7024:180;7072:77;7069:1;7062:88;7169:4;7166:1;7159:15;7193:4;7190:1;7183:15;7210:281;7293:27;7315:4;7293:27;:::i;:::-;7285:6;7281:40;7423:6;7411:10;7408:22;7387:18;7375:10;7372:34;7369:62;7366:88;;;7434:18;;:::i;:::-;7366:88;7474:10;7470:2;7463:22;7253:238;7210:281;;:::o;7497:129::-;7531:6;7558:20;;:::i;:::-;7548:30;;7587:33;7615:4;7607:6;7587:33;:::i;:::-;7497:129;;;:::o;7632:311::-;7709:4;7799:18;7791:6;7788:30;7785:56;;;7821:18;;:::i;:::-;7785:56;7871:4;7863:6;7859:17;7851:25;;7931:4;7925;7921:15;7913:23;;7632:311;;;:::o;7949:117::-;8058:1;8055;8048:12;8089:710;8185:5;8210:81;8226:64;8283:6;8226:64;:::i;:::-;8210:81;:::i;:::-;8201:90;;8311:5;8340:6;8333:5;8326:21;8374:4;8367:5;8363:16;8356:23;;8427:4;8419:6;8415:17;8407:6;8403:30;8456:3;8448:6;8445:15;8442:122;;;8475:79;;:::i;:::-;8442:122;8590:6;8573:220;8607:6;8602:3;8599:15;8573:220;;;8682:3;8711:37;8744:3;8732:10;8711:37;:::i;:::-;8706:3;8699:50;8778:4;8773:3;8769:14;8762:21;;8649:144;8633:4;8628:3;8624:14;8617:21;;8573:220;;;8577:21;8191:608;;8089:710;;;;;:::o;8822:370::-;8893:5;8942:3;8935:4;8927:6;8923:17;8919:27;8909:122;;8950:79;;:::i;:::-;8909:122;9067:6;9054:20;9092:94;9182:3;9174:6;9167:4;9159:6;9155:17;9092:94;:::i;:::-;9083:103;;8899:293;8822:370;;;;:::o;9198:539::-;9282:6;9331:2;9319:9;9310:7;9306:23;9302:32;9299:119;;;9337:79;;:::i;:::-;9299:119;9485:1;9474:9;9470:17;9457:31;9515:18;9507:6;9504:30;9501:117;;;9537:79;;:::i;:::-;9501:117;9642:78;9712:7;9703:6;9692:9;9688:22;9642:78;:::i;:::-;9632:88;;9428:302;9198:539;;;;:::o;9743:474::-;9811:6;9819;9868:2;9856:9;9847:7;9843:23;9839:32;9836:119;;;9874:79;;:::i;:::-;9836:119;9994:1;10019:53;10064:7;10055:6;10044:9;10040:22;10019:53;:::i;:::-;10009:63;;9965:117;10121:2;10147:53;10192:7;10183:6;10172:9;10168:22;10147:53;:::i;:::-;10137:63;;10092:118;9743:474;;;;;:::o;10223:116::-;10293:21;10308:5;10293:21;:::i;:::-;10286:5;10283:32;10273:60;;10329:1;10326;10319:12;10273:60;10223:116;:::o;10345:133::-;10388:5;10426:6;10413:20;10404:29;;10442:30;10466:5;10442:30;:::i;:::-;10345:133;;;;:::o;10484:468::-;10549:6;10557;10606:2;10594:9;10585:7;10581:23;10577:32;10574:119;;;10612:79;;:::i;:::-;10574:119;10732:1;10757:53;10802:7;10793:6;10782:9;10778:22;10757:53;:::i;:::-;10747:63;;10703:117;10859:2;10885:50;10927:7;10918:6;10907:9;10903:22;10885:50;:::i;:::-;10875:60;;10830:115;10484:468;;;;;:::o;10958:474::-;11026:6;11034;11083:2;11071:9;11062:7;11058:23;11054:32;11051:119;;;11089:79;;:::i;:::-;11051:119;11209:1;11234:53;11279:7;11270:6;11259:9;11255:22;11234:53;:::i;:::-;11224:63;;11180:117;11336:2;11362:53;11407:7;11398:6;11387:9;11383:22;11362:53;:::i;:::-;11352:63;;11307:118;10958:474;;;;;:::o;11438:180::-;11486:77;11483:1;11476:88;11583:4;11580:1;11573:15;11607:4;11604:1;11597:15;11624:320;11668:6;11705:1;11699:4;11695:12;11685:22;;11752:1;11746:4;11742:12;11773:18;11763:81;;11829:4;11821:6;11817:17;11807:27;;11763:81;11891:2;11883:6;11880:14;11860:18;11857:38;11854:84;;;11910:18;;:::i;:::-;11854:84;11675:269;11624:320;;;:::o;11950:182::-;12090:34;12086:1;12078:6;12074:14;12067:58;11950:182;:::o;12138:366::-;12280:3;12301:67;12365:2;12360:3;12301:67;:::i;:::-;12294:74;;12377:93;12466:3;12377:93;:::i;:::-;12495:2;12490:3;12486:12;12479:19;;12138:366;;;:::o;12510:419::-;12676:4;12714:2;12703:9;12699:18;12691:26;;12763:9;12757:4;12753:20;12749:1;12738:9;12734:17;12727:47;12791:131;12917:4;12791:131;:::i;:::-;12783:139;;12510:419;;;:::o;12935:180::-;12983:77;12980:1;12973:88;13080:4;13077:1;13070:15;13104:4;13101:1;13094:15;13121:348;13161:7;13184:20;13202:1;13184:20;:::i;:::-;13179:25;;13218:20;13236:1;13218:20;:::i;:::-;13213:25;;13406:1;13338:66;13334:74;13331:1;13328:81;13323:1;13316:9;13309:17;13305:105;13302:131;;;13413:18;;:::i;:::-;13302:131;13461:1;13458;13454:9;13443:20;;13121:348;;;;:::o;13475:180::-;13523:77;13520:1;13513:88;13620:4;13617:1;13610:15;13644:4;13641:1;13634:15;13661:185;13701:1;13718:20;13736:1;13718:20;:::i;:::-;13713:25;;13752:20;13770:1;13752:20;:::i;:::-;13747:25;;13791:1;13781:35;;13796:18;;:::i;:::-;13781:35;13838:1;13835;13831:9;13826:14;;13661:185;;;;:::o;13852:234::-;13992:34;13988:1;13980:6;13976:14;13969:58;14061:17;14056:2;14048:6;14044:15;14037:42;13852:234;:::o;14092:366::-;14234:3;14255:67;14319:2;14314:3;14255:67;:::i;:::-;14248:74;;14331:93;14420:3;14331:93;:::i;:::-;14449:2;14444:3;14440:12;14433:19;;14092:366;;;:::o;14464:419::-;14630:4;14668:2;14657:9;14653:18;14645:26;;14717:9;14711:4;14707:20;14703:1;14692:9;14688:17;14681:47;14745:131;14871:4;14745:131;:::i;:::-;14737:139;;14464:419;;;:::o;14889:227::-;15029:34;15025:1;15017:6;15013:14;15006:58;15098:10;15093:2;15085:6;15081:15;15074:35;14889:227;:::o;15122:366::-;15264:3;15285:67;15349:2;15344:3;15285:67;:::i;:::-;15278:74;;15361:93;15450:3;15361:93;:::i;:::-;15479:2;15474:3;15470:12;15463:19;;15122:366;;;:::o;15494:419::-;15660:4;15698:2;15687:9;15683:18;15675:26;;15747:9;15741:4;15737:20;15733:1;15722:9;15718:17;15711:47;15775:131;15901:4;15775:131;:::i;:::-;15767:139;;15494:419;;;:::o;15919:305::-;15959:3;15978:20;15996:1;15978:20;:::i;:::-;15973:25;;16012:20;16030:1;16012:20;:::i;:::-;16007:25;;16166:1;16098:66;16094:74;16091:1;16088:81;16085:107;;;16172:18;;:::i;:::-;16085:107;16216:1;16213;16209:9;16202:16;;15919:305;;;;:::o;16230:180::-;16278:77;16275:1;16268:88;16375:4;16372:1;16365:15;16399:4;16396:1;16389:15;16416:233;16455:3;16478:24;16496:5;16478:24;:::i;:::-;16469:33;;16524:66;16517:5;16514:77;16511:103;;;16594:18;;:::i;:::-;16511:103;16641:1;16634:5;16630:13;16623:20;;16416:233;;;:::o;16655:177::-;16795:29;16791:1;16783:6;16779:14;16772:53;16655:177;:::o;16838:366::-;16980:3;17001:67;17065:2;17060:3;17001:67;:::i;:::-;16994:74;;17077:93;17166:3;17077:93;:::i;:::-;17195:2;17190:3;17186:12;17179:19;;16838:366;;;:::o;17210:419::-;17376:4;17414:2;17403:9;17399:18;17391:26;;17463:9;17457:4;17453:20;17449:1;17438:9;17434:17;17427:47;17491:131;17617:4;17491:131;:::i;:::-;17483:139;;17210:419;;;:::o;17635:244::-;17775:34;17771:1;17763:6;17759:14;17752:58;17844:27;17839:2;17831:6;17827:15;17820:52;17635:244;:::o;17885:366::-;18027:3;18048:67;18112:2;18107:3;18048:67;:::i;:::-;18041:74;;18124:93;18213:3;18124:93;:::i;:::-;18242:2;18237:3;18233:12;18226:19;;17885:366;;;:::o;18257:419::-;18423:4;18461:2;18450:9;18446:18;18438:26;;18510:9;18504:4;18500:20;18496:1;18485:9;18481:17;18474:47;18538:131;18664:4;18538:131;:::i;:::-;18530:139;;18257:419;;;:::o;18682:224::-;18822:34;18818:1;18810:6;18806:14;18799:58;18891:7;18886:2;18878:6;18874:15;18867:32;18682:224;:::o;18912:366::-;19054:3;19075:67;19139:2;19134:3;19075:67;:::i;:::-;19068:74;;19151:93;19240:3;19151:93;:::i;:::-;19269:2;19264:3;19260:12;19253:19;;18912:366;;;:::o;19284:419::-;19450:4;19488:2;19477:9;19473:18;19465:26;;19537:9;19531:4;19527:20;19523:1;19512:9;19508:17;19501:47;19565:131;19691:4;19565:131;:::i;:::-;19557:139;;19284:419;;;:::o;19709:223::-;19849:34;19845:1;19837:6;19833:14;19826:58;19918:6;19913:2;19905:6;19901:15;19894:31;19709:223;:::o;19938:366::-;20080:3;20101:67;20165:2;20160:3;20101:67;:::i;:::-;20094:74;;20177:93;20266:3;20177:93;:::i;:::-;20295:2;20290:3;20286:12;20279:19;;19938:366;;;:::o;20310:419::-;20476:4;20514:2;20503:9;20499:18;20491:26;;20563:9;20557:4;20553:20;20549:1;20538:9;20534:17;20527:47;20591:131;20717:4;20591:131;:::i;:::-;20583:139;;20310:419;;;:::o;20735:240::-;20875:34;20871:1;20863:6;20859:14;20852:58;20944:23;20939:2;20931:6;20927:15;20920:48;20735:240;:::o;20981:366::-;21123:3;21144:67;21208:2;21203:3;21144:67;:::i;:::-;21137:74;;21220:93;21309:3;21220:93;:::i;:::-;21338:2;21333:3;21329:12;21322:19;;20981:366;;;:::o;21353:419::-;21519:4;21557:2;21546:9;21542:18;21534:26;;21606:9;21600:4;21596:20;21592:1;21581:9;21577:17;21570:47;21634:131;21760:4;21634:131;:::i;:::-;21626:139;;21353:419;;;:::o;21778:239::-;21918:34;21914:1;21906:6;21902:14;21895:58;21987:22;21982:2;21974:6;21970:15;21963:47;21778:239;:::o;22023:366::-;22165:3;22186:67;22250:2;22245:3;22186:67;:::i;:::-;22179:74;;22262:93;22351:3;22262:93;:::i;:::-;22380:2;22375:3;22371:12;22364:19;;22023:366;;;:::o;22395:419::-;22561:4;22599:2;22588:9;22584:18;22576:26;;22648:9;22642:4;22638:20;22634:1;22623:9;22619:17;22612:47;22676:131;22802:4;22676:131;:::i;:::-;22668:139;;22395:419;;;:::o;22820:225::-;22960:34;22956:1;22948:6;22944:14;22937:58;23029:8;23024:2;23016:6;23012:15;23005:33;22820:225;:::o;23051:366::-;23193:3;23214:67;23278:2;23273:3;23214:67;:::i;:::-;23207:74;;23290:93;23379:3;23290:93;:::i;:::-;23408:2;23403:3;23399:12;23392:19;;23051:366;;;:::o;23423:419::-;23589:4;23627:2;23616:9;23612:18;23604:26;;23676:9;23670:4;23666:20;23662:1;23651:9;23647:17;23640:47;23704:131;23830:4;23704:131;:::i;:::-;23696:139;;23423:419;;;:::o;23848:223::-;23988:34;23984:1;23976:6;23972:14;23965:58;24057:6;24052:2;24044:6;24040:15;24033:31;23848:223;:::o;24077:366::-;24219:3;24240:67;24304:2;24299:3;24240:67;:::i;:::-;24233:74;;24316:93;24405:3;24316:93;:::i;:::-;24434:2;24429:3;24425:12;24418:19;;24077:366;;;:::o;24449:419::-;24615:4;24653:2;24642:9;24638:18;24630:26;;24702:9;24696:4;24692:20;24688:1;24677:9;24673:17;24666:47;24730:131;24856:4;24730:131;:::i;:::-;24722:139;;24449:419;;;:::o;24874:221::-;25014:34;25010:1;25002:6;24998:14;24991:58;25083:4;25078:2;25070:6;25066:15;25059:29;24874:221;:::o;25101:366::-;25243:3;25264:67;25328:2;25323:3;25264:67;:::i;:::-;25257:74;;25340:93;25429:3;25340:93;:::i;:::-;25458:2;25453:3;25449:12;25442:19;;25101:366;;;:::o;25473:419::-;25639:4;25677:2;25666:9;25662:18;25654:26;;25726:9;25720:4;25716:20;25712:1;25701:9;25697:17;25690:47;25754:131;25880:4;25754:131;:::i;:::-;25746:139;;25473:419;;;:::o;25898:224::-;26038:34;26034:1;26026:6;26022:14;26015:58;26107:7;26102:2;26094:6;26090:15;26083:32;25898:224;:::o;26128:366::-;26270:3;26291:67;26355:2;26350:3;26291:67;:::i;:::-;26284:74;;26367:93;26456:3;26367:93;:::i;:::-;26485:2;26480:3;26476:12;26469:19;;26128:366;;;:::o;26500:419::-;26666:4;26704:2;26693:9;26689:18;26681:26;;26753:9;26747:4;26743:20;26739:1;26728:9;26724:17;26717:47;26781:131;26907:4;26781:131;:::i;:::-;26773:139;;26500:419;;;:::o;26925:222::-;27065:34;27061:1;27053:6;27049:14;27042:58;27134:5;27129:2;27121:6;27117:15;27110:30;26925:222;:::o;27153:366::-;27295:3;27316:67;27380:2;27375:3;27316:67;:::i;:::-;27309:74;;27392:93;27481:3;27392:93;:::i;:::-;27510:2;27505:3;27501:12;27494:19;;27153:366;;;:::o;27525:419::-;27691:4;27729:2;27718:9;27714:18;27706:26;;27778:9;27772:4;27768:20;27764:1;27753:9;27749:17;27742:47;27806:131;27932:4;27806:131;:::i;:::-;27798:139;;27525:419;;;:::o;27950:305::-;28090:34;28086:1;28078:6;28074:14;28067:58;28159:34;28154:2;28146:6;28142:15;28135:59;28228:19;28223:2;28215:6;28211:15;28204:44;27950:305;:::o;28261:366::-;28403:3;28424:67;28488:2;28483:3;28424:67;:::i;:::-;28417:74;;28500:93;28589:3;28500:93;:::i;:::-;28618:2;28613:3;28609:12;28602:19;;28261:366;;;:::o;28633:419::-;28799:4;28837:2;28826:9;28822:18;28814:26;;28886:9;28880:4;28876:20;28872:1;28861:9;28857:17;28850:47;28914:131;29040:4;28914:131;:::i;:::-;28906:139;;28633:419;;;:::o;29058:172::-;29198:24;29194:1;29186:6;29182:14;29175:48;29058:172;:::o;29236:366::-;29378:3;29399:67;29463:2;29458:3;29399:67;:::i;:::-;29392:74;;29475:93;29564:3;29475:93;:::i;:::-;29593:2;29588:3;29584:12;29577:19;;29236:366;;;:::o;29608:419::-;29774:4;29812:2;29801:9;29797:18;29789:26;;29861:9;29855:4;29851:20;29847:1;29836:9;29832:17;29825:47;29889:131;30015:4;29889:131;:::i;:::-;29881:139;;29608:419;;;:::o;30033:297::-;30173:34;30169:1;30161:6;30157:14;30150:58;30242:34;30237:2;30229:6;30225:15;30218:59;30311:11;30306:2;30298:6;30294:15;30287:36;30033:297;:::o;30336:366::-;30478:3;30499:67;30563:2;30558:3;30499:67;:::i;:::-;30492:74;;30575:93;30664:3;30575:93;:::i;:::-;30693:2;30688:3;30684:12;30677:19;;30336:366;;;:::o;30708:419::-;30874:4;30912:2;30901:9;30897:18;30889:26;;30961:9;30955:4;30951:20;30947:1;30936:9;30932:17;30925:47;30989:131;31115:4;30989:131;:::i;:::-;30981:139;;30708:419;;;:::o;31133:240::-;31273:34;31269:1;31261:6;31257:14;31250:58;31342:23;31337:2;31329:6;31325:15;31318:48;31133:240;:::o;31379:366::-;31521:3;31542:67;31606:2;31601:3;31542:67;:::i;:::-;31535:74;;31618:93;31707:3;31618:93;:::i;:::-;31736:2;31731:3;31727:12;31720:19;;31379:366;;;:::o;31751:419::-;31917:4;31955:2;31944:9;31940:18;31932:26;;32004:9;31998:4;31994:20;31990:1;31979:9;31975:17;31968:47;32032:131;32158:4;32032:131;:::i;:::-;32024:139;;31751:419;;;:::o;32176:169::-;32316:21;32312:1;32304:6;32300:14;32293:45;32176:169;:::o;32351:366::-;32493:3;32514:67;32578:2;32573:3;32514:67;:::i;:::-;32507:74;;32590:93;32679:3;32590:93;:::i;:::-;32708:2;32703:3;32699:12;32692:19;;32351:366;;;:::o;32723:419::-;32889:4;32927:2;32916:9;32912:18;32904:26;;32976:9;32970:4;32966:20;32962:1;32951:9;32947:17;32940:47;33004:131;33130:4;33004:131;:::i;:::-;32996:139;;32723:419;;;:::o;33148:241::-;33288:34;33284:1;33276:6;33272:14;33265:58;33357:24;33352:2;33344:6;33340:15;33333:49;33148:241;:::o;33395:366::-;33537:3;33558:67;33622:2;33617:3;33558:67;:::i;:::-;33551:74;;33634:93;33723:3;33634:93;:::i;:::-;33752:2;33747:3;33743:12;33736:19;;33395:366;;;:::o;33767:419::-;33933:4;33971:2;33960:9;33956:18;33948:26;;34020:9;34014:4;34010:20;34006:1;33995:9;33991:17;33984:47;34048:131;34174:4;34048:131;:::i;:::-;34040:139;;33767:419;;;:::o;34192:191::-;34232:4;34252:20;34270:1;34252:20;:::i;:::-;34247:25;;34286:20;34304:1;34286:20;:::i;:::-;34281:25;;34325:1;34322;34319:8;34316:34;;;34330:18;;:::i;:::-;34316:34;34375:1;34372;34368:9;34360:17;;34192:191;;;;:::o;34389:225::-;34529:34;34525:1;34517:6;34513:14;34506:58;34598:8;34593:2;34585:6;34581:15;34574:33;34389:225;:::o;34620:366::-;34762:3;34783:67;34847:2;34842:3;34783:67;:::i;:::-;34776:74;;34859:93;34948:3;34859:93;:::i;:::-;34977:2;34972:3;34968:12;34961:19;;34620:366;;;:::o;34992:419::-;35158:4;35196:2;35185:9;35181:18;35173:26;;35245:9;35239:4;35235:20;35231:1;35220:9;35216:17;35209:47;35273:131;35399:4;35273:131;:::i;:::-;35265:139;;34992:419;;;:::o;35417:442::-;35566:4;35604:2;35593:9;35589:18;35581:26;;35617:71;35685:1;35674:9;35670:17;35661:6;35617:71;:::i;:::-;35698:72;35766:2;35755:9;35751:18;35742:6;35698:72;:::i;:::-;35780;35848:2;35837:9;35833:18;35824:6;35780:72;:::i;:::-;35417:442;;;;;;:::o;35865:143::-;35922:5;35953:6;35947:13;35938:22;;35969:33;35996:5;35969:33;:::i;:::-;35865:143;;;;:::o;36014:351::-;36084:6;36133:2;36121:9;36112:7;36108:23;36104:32;36101:119;;;36139:79;;:::i;:::-;36101:119;36259:1;36284:64;36340:7;36331:6;36320:9;36316:22;36284:64;:::i;:::-;36274:74;;36230:128;36014:351;;;;:::o;36371:85::-;36416:7;36445:5;36434:16;;36371:85;;;:::o;36462:158::-;36520:9;36553:61;36571:42;36580:32;36606:5;36580:32;:::i;:::-;36571:42;:::i;:::-;36553:61;:::i;:::-;36540:74;;36462:158;;;:::o;36626:147::-;36721:45;36760:5;36721:45;:::i;:::-;36716:3;36709:58;36626:147;;:::o;36779:114::-;36846:6;36880:5;36874:12;36864:22;;36779:114;;;:::o;36899:184::-;36998:11;37032:6;37027:3;37020:19;37072:4;37067:3;37063:14;37048:29;;36899:184;;;;:::o;37089:132::-;37156:4;37179:3;37171:11;;37209:4;37204:3;37200:14;37192:22;;37089:132;;;:::o;37227:108::-;37304:24;37322:5;37304:24;:::i;:::-;37299:3;37292:37;37227:108;;:::o;37341:179::-;37410:10;37431:46;37473:3;37465:6;37431:46;:::i;:::-;37509:4;37504:3;37500:14;37486:28;;37341:179;;;;:::o;37526:113::-;37596:4;37628;37623:3;37619:14;37611:22;;37526:113;;;:::o;37675:732::-;37794:3;37823:54;37871:5;37823:54;:::i;:::-;37893:86;37972:6;37967:3;37893:86;:::i;:::-;37886:93;;38003:56;38053:5;38003:56;:::i;:::-;38082:7;38113:1;38098:284;38123:6;38120:1;38117:13;38098:284;;;38199:6;38193:13;38226:63;38285:3;38270:13;38226:63;:::i;:::-;38219:70;;38312:60;38365:6;38312:60;:::i;:::-;38302:70;;38158:224;38145:1;38142;38138:9;38133:14;;38098:284;;;38102:14;38398:3;38391:10;;37799:608;;;37675:732;;;;:::o;38413:831::-;38676:4;38714:3;38703:9;38699:19;38691:27;;38728:71;38796:1;38785:9;38781:17;38772:6;38728:71;:::i;:::-;38809:80;38885:2;38874:9;38870:18;38861:6;38809:80;:::i;:::-;38936:9;38930:4;38926:20;38921:2;38910:9;38906:18;38899:48;38964:108;39067:4;39058:6;38964:108;:::i;:::-;38956:116;;39082:72;39150:2;39139:9;39135:18;39126:6;39082:72;:::i;:::-;39164:73;39232:3;39221:9;39217:19;39208:6;39164:73;:::i;:::-;38413:831;;;;;;;;:::o;39250:807::-;39499:4;39537:3;39526:9;39522:19;39514:27;;39551:71;39619:1;39608:9;39604:17;39595:6;39551:71;:::i;:::-;39632:72;39700:2;39689:9;39685:18;39676:6;39632:72;:::i;:::-;39714:80;39790:2;39779:9;39775:18;39766:6;39714:80;:::i;:::-;39804;39880:2;39869:9;39865:18;39856:6;39804:80;:::i;:::-;39894:73;39962:3;39951:9;39947:19;39938:6;39894:73;:::i;:::-;39977;40045:3;40034:9;40030:19;40021:6;39977:73;:::i;:::-;39250:807;;;;;;;;;:::o;40063:143::-;40120:5;40151:6;40145:13;40136:22;;40167:33;40194:5;40167:33;:::i;:::-;40063:143;;;;:::o;40212:663::-;40300:6;40308;40316;40365:2;40353:9;40344:7;40340:23;40336:32;40333:119;;;40371:79;;:::i;:::-;40333:119;40491:1;40516:64;40572:7;40563:6;40552:9;40548:22;40516:64;:::i;:::-;40506:74;;40462:128;40629:2;40655:64;40711:7;40702:6;40691:9;40687:22;40655:64;:::i;:::-;40645:74;;40600:129;40768:2;40794:64;40850:7;40841:6;40830:9;40826:22;40794:64;:::i;:::-;40784:74;;40739:129;40212:663;;;;;:::o

Swarm Source

ipfs://6e197874f2e8c57c82f7344cb58598c95a175c196a805f7bcbab117a56f6fc48

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.