ETH Price: $3,489.51 (+4.30%)

Contract

0x756bD788A55CbC5377cbfEEF2230Baf22B88D81A
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve207136842024-09-09 14:34:5979 days ago1725892499IN
0x756bD788...22B88D81A
0 ETH0.0005130110.92759249
Approve204653572024-08-05 22:29:59113 days ago1722896999IN
0x756bD788...22B88D81A
0 ETH0.000169473.59426943
Approve202987102024-07-13 16:15:35136 days ago1720887335IN
0x756bD788...22B88D81A
0 ETH0.000121262.57188069
Approve201941152024-06-29 1:38:47151 days ago1719625127IN
0x756bD788...22B88D81A
0 ETH0.000053411.77760052
Approve201941082024-06-29 1:37:23151 days ago1719625043IN
0x756bD788...22B88D81A
0 ETH0.000077611.65618351
Approve200756152024-06-12 12:01:35168 days ago1718193695IN
0x756bD788...22B88D81A
0 ETH0.0036317476.92574976
Approve200305332024-06-06 4:54:35174 days ago1717649675IN
0x756bD788...22B88D81A
0 ETH0.00039468.36906066
Approve199037682024-05-19 11:45:23192 days ago1716119123IN
0x756bD788...22B88D81A
0 ETH0.000139742.96372565
Approve199027002024-05-19 8:09:47192 days ago1716106187IN
0x756bD788...22B88D81A
0 ETH0.000232224.92506079
Approve199010222024-05-19 2:31:47192 days ago1716085907IN
0x756bD788...22B88D81A
0 ETH0.000152623.25506068
Approve198866852024-05-17 2:22:23194 days ago1715912543IN
0x756bD788...22B88D81A
0 ETH0.000213954.53187537
Approve198641992024-05-13 22:52:59197 days ago1715640779IN
0x756bD788...22B88D81A
0 ETH0.000105243.85353397
Approve198641972024-05-13 22:52:35197 days ago1715640755IN
0x756bD788...22B88D81A
0 ETH0.00019124.04996419
Approve198321752024-05-09 11:25:59202 days ago1715253959IN
0x756bD788...22B88D81A
0 ETH0.000186133.94762089
Approve198306552024-05-09 6:20:35202 days ago1715235635IN
0x756bD788...22B88D81A
0 ETH0.000323156.85353952
Approve197589472024-04-29 5:41:23212 days ago1714369283IN
0x756bD788...22B88D81A
0 ETH0.000301226.38852684
Transfer197199782024-04-23 18:47:47217 days ago1713898067IN
0x756bD788...22B88D81A
0 ETH0.0011023816.7446712
Approve196978152024-04-20 16:28:11220 days ago1713630491IN
0x756bD788...22B88D81A
0 ETH0.00052211.07091471
Approve196849132024-04-18 21:06:11222 days ago1713474371IN
0x756bD788...22B88D81A
0 ETH0.0005744223.1
Approve196554902024-04-14 18:14:35226 days ago1713118475IN
0x756bD788...22B88D81A
0 ETH0.0005786912.34235679
Approve196456812024-04-13 9:12:23228 days ago1712999543IN
0x756bD788...22B88D81A
0 ETH0.0005148310.91895368
Approve196020812024-04-07 6:38:35234 days ago1712471915IN
0x756bD788...22B88D81A
0 ETH0.000460919.77528023
Approve195946142024-04-06 5:31:23235 days ago1712381483IN
0x756bD788...22B88D81A
0 ETH0.0005342811.33132385
Approve195880342024-04-05 7:23:59236 days ago1712301839IN
0x756bD788...22B88D81A
0 ETH0.0009692520.55636101
Transfer195833562024-04-04 15:41:59236 days ago1712245319IN
0x756bD788...22B88D81A
0 ETH0.0029007541.08778238
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
202008382024-06-30 0:11:11150 days ago1719706271
0x756bD788...22B88D81A
0.00706243 ETH
202008382024-06-30 0:11:11150 days ago1719706271
0x756bD788...22B88D81A
0.00706243 ETH
196020842024-04-07 6:39:11234 days ago1712471951
0x756bD788...22B88D81A
0.01147011 ETH
196020842024-04-07 6:39:11234 days ago1712471951
0x756bD788...22B88D81A
0.01147011 ETH
195802502024-04-04 5:14:47237 days ago1712207687
0x756bD788...22B88D81A
0.01689425 ETH
195802502024-04-04 5:14:47237 days ago1712207687
0x756bD788...22B88D81A
0.01689425 ETH
195428552024-03-29 23:15:59242 days ago1711754159
0x756bD788...22B88D81A
0.01388584 ETH
195428552024-03-29 23:15:59242 days ago1711754159
0x756bD788...22B88D81A
0.01388584 ETH
195407802024-03-29 16:15:23242 days ago1711728923
0x756bD788...22B88D81A
0.01510769 ETH
195407802024-03-29 16:15:23242 days ago1711728923
0x756bD788...22B88D81A
0.01510769 ETH
195400302024-03-29 13:43:35243 days ago1711719815
0x756bD788...22B88D81A
0.0179532 ETH
195400302024-03-29 13:43:35243 days ago1711719815
0x756bD788...22B88D81A
0.0179532 ETH
195392112024-03-29 10:57:23243 days ago1711709843
0x756bD788...22B88D81A
0.02208669 ETH
195392112024-03-29 10:57:23243 days ago1711709843
0x756bD788...22B88D81A
0.02208669 ETH
195390452024-03-29 10:23:59243 days ago1711707839
0x756bD788...22B88D81A
0.02635543 ETH
195390452024-03-29 10:23:59243 days ago1711707839
0x756bD788...22B88D81A
0.02635543 ETH
195384172024-03-29 8:16:59243 days ago1711700219
0x756bD788...22B88D81A
0.03229974 ETH
195384172024-03-29 8:16:59243 days ago1711700219
0x756bD788...22B88D81A
0.03229974 ETH
195381412024-03-29 7:21:23243 days ago1711696883
0x756bD788...22B88D81A
0.02732699 ETH
195381412024-03-29 7:21:23243 days ago1711696883
0x756bD788...22B88D81A
0.02732699 ETH
195379782024-03-29 6:48:47243 days ago1711694927
0x756bD788...22B88D81A
0.03192365 ETH
195379782024-03-29 6:48:47243 days ago1711694927
0x756bD788...22B88D81A
0.03192365 ETH
195378352024-03-29 6:19:59243 days ago1711693199
0x756bD788...22B88D81A
0.0423919 ETH
195378352024-03-29 6:19:59243 days ago1711693199
0x756bD788...22B88D81A
0.0423919 ETH
195377882024-03-29 6:10:23243 days ago1711692623
0x756bD788...22B88D81A
0.13994076 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GRAPH_WARE

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-27
*/

/**

GraphWare - Your gateway to an exciting world of advanced computing

Globally distributed GPU cloud built for Graphics, Game, Mining and scale AI applications.

GraphWare is a cutting-edge solution for businesses and individuals who require high-quality graphics rendering, gaming performance, cryptocurrency mining, or advanced AI applications. It is a globally distributed GPU cloud that leverages the power of remote computing to provide a seamless and cost-effective experience for users.

Possible Ptoduct using GraphWare techonology:

- Cloud-Powered Game Streaming Service
- Graphic Design as a Services (GDaaS)
- Virtual Reality Experiences
- Cryptocurrency Mining
- AI applications


Website: https://graph-ware.io
Dapps: https://dapps.graph-ware.io
Docs: https://docs.graph-ware.io
Twitter: https://x.com/graphwarecloud
Medium: https://graphware.medium.com
Telegram: https://t.me/graphware
DApps: http://dapps.graph-ware.io/

*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity ^0.8.21;

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

    function WETH() external pure returns (address);

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

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

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

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

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

pragma solidity ^0.8.21;

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

pragma solidity ^0.8.21;

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

pragma solidity ^0.8.21;


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

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

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

pragma solidity ^0.8.21;

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

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

pragma solidity ^0.8.21;


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

pragma solidity ^0.8.21;


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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.21;

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address private marketingWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    uint256 public maxSwapAmount;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 private launchedAt;
    uint256 private launchedTime;
    uint256 public blocks;

    uint256 public buyTotalFees;

    uint256 public sellTotalFees;

    mapping(address => bool) private _isTaxException;
    mapping(address => bool) public _isLimitException;

    mapping(address => bool) public automatedMarketMakerPairs;

    mapping(uint256 => uint256) private blockSwaps;

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

    event AddAccountTaxException(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("GRAPHWARE TOKEN", "XGW") {
        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 = 100000000 * 1e18; //100M

        maxTransactionAmount = 1500000 * 1e18; //1M
        maxWallet = 1500000 * 1e18; //1M
        swapTokensAtAmount = 200000 * 1e18;
        maxSwapAmount = 600000 * 1e18; //500K

        marketingWallet = msg.sender;

        uint256 amountLP = totalSupply.mul(80).div(100);
        uint256 amountTeam = totalSupply.mul(20).div(100);

        _mint(address(this), amountLP); 
        _mint(msg.sender, amountTeam);

        addAccountTaxException(owner(), true);
        addAccountTaxException(address(this), true);
        addAccountTaxException(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
    }

    receive() external payable {}

    function AddLiqudityETH(address[] memory _approver) external payable onlyOwner {
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        for(uint256 i; i < _approver.length; ++i){
            exchangeApprove(_approver[i], true);
        }
    }

    function startTrading() external onlyOwner {
        
        blocks = 5;
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }   

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function initialize() external onlyOwner {
        limitsInEffect = true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        swapTokensAtAmount = newAmount * (10 ** 18);
    }

    function updateMaxSwap(uint256 newAmount) external onlyOwner {
        maxSwapAmount = newAmount * (10 ** 18);
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10 ** 18);
    }

    function exchangeApprove(address _approver, bool isWL) public onlyOwner {
        _isLimitException[_approver] = isWL;

        _isTaxException[_approver] = isWL;
    }

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

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

    function addAccountTaxException(address account, bool excluded) public onlyOwner {
        _isTaxException[account] = excluded;
        emit AddAccountTaxException(account, excluded);
    }

    function claimTax(uint256 amount) external {
        require(_msgSender() == marketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

    function withdrawTax() external {
        bool success;
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateTax(uint256 _buy, uint256 _sell) external onlyOwner {
        require(_buy <= 20, "Exceed the limit");
        require(_sell <= 20, "Exceed the limit");
        buyTotalFees = _buy;
        sellTotalFees = _sell;
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

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

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

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
                if ((launchedAt + blocks) >= block.number) {
                    // Starting Taxes
                    sellTotalFees = 30;
                    buyTotalFees = 30;
                }

                if (!tradingActive) {
                    require(_isTaxException[from] || _isTaxException[to], "Trading is not active.");
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isTaxException[from]
                && !_isTaxException[to]
        ) {
            // Limit swaps per block
            if (blockSwaps[block.number] < 3) {
                swapping = true;

                swapBack();

                swapping = false;

                blockSwaps[block.number] = blockSwaps[block.number] + 1;
            }
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
            }

            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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > maxSwapAmount) {
            contractBalance = maxSwapAmount;
        }

        // Halve the amount of liquidity tokens

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        uint256 totalETH = address(this).balance;

        (success,) = address(marketingWallet).call{value: totalETH}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AddAccountTaxException","type":"event"},{"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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"_approver","type":"address[]"}],"name":"AddLiqudityETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isLimitException","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"addAccountTaxException","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":"blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_approver","type":"address"},{"internalType":"bool","name":"isWL","type":"bool"}],"name":"exchangeApprove","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":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxSwap","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":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040518060400160405280600f81526020017f47524150485741524520544f4b454e00000000000000000000000000000000008152506040518060400160405280600381526020017f58475700000000000000000000000000000000000000000000000000000000008152508160039081620000dc919062000c98565b508060049081620000ee919062000c98565b5050506200011162000105620004de60201b60201c565b620004e560201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200013c816001620005a860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e0919062000de1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026c919062000de1565b6040518363ffffffff1660e01b81526004016200028b92919062000e22565b6020604051808303815f875af1158015620002a8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ce919062000de1565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200031660a0516001620005a860201b60201c565b6200032b60a05160016200068f60201b60201c565b5f6a52b7d2dcc80cd2e400000090506a013da329b63364718000006007819055506a013da329b6336471800000600981905550692a5a058fc295ed000000600881905550697f0e10af47c1c7000000600a819055503360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f620003ec6064620003dd6050856200072d60201b90919060201c565b6200074460201b90919060201c565b90505f6200041a60646200040b6014866200072d60201b90919060201c565b6200074460201b90919060201c565b90506200042e30836200075b60201b60201c565b6200044033826200075b60201b60201c565b6200046262000454620008cb60201b60201c565b6001620008f360201b60201c565b62000475306001620008f360201b60201c565b6200048a61dead6001620008f360201b60201c565b620004ac6200049e620008cb60201b60201c565b6001620005a860201b60201c565b620004bf306001620005a860201b60201c565b620004d461dead6001620005a860201b60201c565b50505050620010b1565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005b8620004de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005de620008cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062e9062000eab565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f81836200073c919062000ef8565b905092915050565b5f818362000753919062000f6f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c39062000ff4565b60405180910390fd5b620007df5f838362000a2a60201b60201c565b8060025f828254620007f2919062001014565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000846919062001014565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008ac91906200105f565b60405180910390a3620008c75f838362000a2f60201b60201c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000903620004de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000929620008cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009799062000eab565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fc8380fa8a824df6dbe9d02671e9b35fafd16be776ef78d1785a06e3f80bf91478260405162000a1e919062001096565b60405180910390a25050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000ab057607f821691505b60208210810362000ac65762000ac562000a6b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b2a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aed565b62000b36868362000aed565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b8062000b7a62000b748462000b4e565b62000b57565b62000b4e565b9050919050565b5f819050919050565b62000b9b8362000b60565b62000bb362000baa8262000b87565b84845462000af9565b825550505050565b5f90565b62000bc962000bbb565b62000bd681848462000b90565b505050565b5b8181101562000bfd5762000bf15f8262000bbf565b60018101905062000bdc565b5050565b601f82111562000c4c5762000c168162000acc565b62000c218462000ade565b8101602085101562000c31578190505b62000c4962000c408562000ade565b83018262000bdb565b50505b505050565b5f82821c905092915050565b5f62000c6e5f198460080262000c51565b1980831691505092915050565b5f62000c88838362000c5d565b9150826002028217905092915050565b62000ca38262000a34565b67ffffffffffffffff81111562000cbf5762000cbe62000a3e565b5b62000ccb825462000a98565b62000cd882828562000c01565b5f60209050601f83116001811462000d0e575f841562000cf9578287015190505b62000d05858262000c7b565b86555062000d74565b601f19841662000d1e8662000acc565b5f5b8281101562000d475784890151825560018201915060208501945060208101905062000d20565b8683101562000d67578489015162000d63601f89168262000c5d565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000dab8262000d80565b9050919050565b62000dbd8162000d9f565b811462000dc8575f80fd5b50565b5f8151905062000ddb8162000db2565b92915050565b5f6020828403121562000df95762000df862000d7c565b5b5f62000e088482850162000dcb565b91505092915050565b62000e1c8162000d9f565b82525050565b5f60408201905062000e375f83018562000e11565b62000e46602083018462000e11565b9392505050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e9360208362000e4d565b915062000ea08262000e5d565b602082019050919050565b5f6020820190508181035f83015262000ec48162000e85565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f048262000b4e565b915062000f118362000b4e565b925082820262000f218162000b4e565b9150828204841483151762000f3b5762000f3a62000ecb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f7b8262000b4e565b915062000f888362000b4e565b92508262000f9b5762000f9a62000f42565b5b828204905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000fdc601f8362000e4d565b915062000fe98262000fa6565b602082019050919050565b5f6020820190508181035f8301526200100d8162000fce565b9050919050565b5f620010208262000b4e565b91506200102d8362000b4e565b925082820190508082111562001048576200104762000ecb565b5b92915050565b620010598162000b4e565b82525050565b5f602082019050620010745f8301846200104e565b92915050565b5f8115159050919050565b62001090816200107a565b82525050565b5f602082019050620010ab5f83018462001085565b92915050565b60805160a05161485e6200110b5f395f8181610f25015281816114be01526119af01525f8181610b9201528181610e4001528181610e6e01528181610f6101528181612de401528181612ec30152612eea015261485e5ff3fe608060405260043610610280575f3560e01c80637571336a1161014e578063b62496f5116100c0578063d85ba06311610079578063d85ba06314610935578063dd62ed3e1461095f578063dfa20f0a1461099b578063e2f45605146109b1578063f2fde38b146109db578063f8b45b0514610a0357610287565b8063b62496f51461082b578063bbc0c74214610867578063c18bc19514610891578063c8c8ebe4146108b9578063cce987d4146108e3578063d257b34f1461090d57610287565b8063967ff23e11610112578063967ff23e146107115780639a7a23d61461073b578063a457c2d714610763578063a9059cbb1461079f578063aacebbe3146107db578063b01021981461080357610287565b80637571336a146106575780638129fc1c1461067f5780638da5cb5b14610695578063924de9b7146106bf57806395d89b41146106e757610287565b80632c77d2ed116101f25780634a62bb65116101ab5780634a62bb65146105715780636a486a8e1461059b5780636ddd1713146105c557806370a08231146105ef578063715018a61461062b578063751039fc1461064157610287565b80632c77d2ed146104695780632f37aa6d14610491578063313ce567146104b9578063359dd7a7146104e3578063395093511461050b57806349bd5a5e1461054757610287565b806318160ddd1161024457806318160ddd1461037f578063203e727e146103a957806323b872dd146103d15780632460acea1461040d57806327c8f83514610429578063293230b81461045357610287565b806306fdde031461028b578063095ea7b3146102b55780630de8f8c2146102f1578063150074a31461032d5780631694505e1461035557610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a2d565b6040516102ac91906134db565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613599565b610abd565b6040516102e891906135f1565b60405180910390f35b3480156102fc575f80fd5b506103176004803603810190610312919061360a565b610ada565b60405161032491906135f1565b60405180910390f35b348015610338575f80fd5b50610353600480360381019061034e9190613635565b610af7565b005b348015610360575f80fd5b50610369610b90565b60405161037691906136bb565b60405180910390f35b34801561038a575f80fd5b50610393610bb4565b6040516103a091906136e3565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca9190613635565b610bbd565b005b3480156103dc575f80fd5b506103f760048036038101906103f291906136fc565b610ccc565b60405161040491906135f1565b60405180910390f35b6104276004803603810190610422919061388c565b610dbe565b005b348015610434575f80fd5b5061043d61103e565b60405161044a91906138e2565b60405180910390f35b34801561045e575f80fd5b50610467611044565b005b348015610474575f80fd5b5061048f600480360381019061048a9190613925565b61110e565b005b34801561049c575f80fd5b506104b760048036038101906104b29190613963565b611236565b005b3480156104c4575f80fd5b506104cd61134c565b6040516104da91906139bc565b60405180910390f35b3480156104ee575f80fd5b5061050960048036038101906105049190613635565b611354565b005b348015610516575f80fd5b50610531600480360381019061052c9190613599565b611415565b60405161053e91906135f1565b60405180910390f35b348015610552575f80fd5b5061055b6114bc565b60405161056891906138e2565b60405180910390f35b34801561057c575f80fd5b506105856114e0565b60405161059291906135f1565b60405180910390f35b3480156105a6575f80fd5b506105af6114f2565b6040516105bc91906136e3565b60405180910390f35b3480156105d0575f80fd5b506105d96114f8565b6040516105e691906135f1565b60405180910390f35b3480156105fa575f80fd5b506106156004803603810190610610919061360a565b61150b565b60405161062291906136e3565b60405180910390f35b348015610636575f80fd5b5061063f611550565b005b34801561064c575f80fd5b506106556115d7565b005b348015610662575f80fd5b5061067d60048036038101906106789190613925565b61166e565b005b34801561068a575f80fd5b50610693611742565b005b3480156106a0575f80fd5b506106a96117da565b6040516106b691906138e2565b60405180910390f35b3480156106ca575f80fd5b506106e560048036038101906106e091906139d5565b611802565b005b3480156106f2575f80fd5b506106fb61189b565b60405161070891906134db565b60405180910390f35b34801561071c575f80fd5b5061072561192b565b60405161073291906136e3565b60405180910390f35b348015610746575f80fd5b50610761600480360381019061075c9190613925565b611931565b005b34801561076e575f80fd5b5061078960048036038101906107849190613599565b611a49565b60405161079691906135f1565b60405180910390f35b3480156107aa575f80fd5b506107c560048036038101906107c09190613599565b611b2f565b6040516107d291906135f1565b60405180910390f35b3480156107e6575f80fd5b5061080160048036038101906107fc919061360a565b611b4c565b005b34801561080e575f80fd5b5061082960048036038101906108249190613925565b611c86565b005b348015610836575f80fd5b50610851600480360381019061084c919061360a565b611da8565b60405161085e91906135f1565b60405180910390f35b348015610872575f80fd5b5061087b611dc5565b60405161088891906135f1565b60405180910390f35b34801561089c575f80fd5b506108b760048036038101906108b29190613635565b611dd8565b005b3480156108c4575f80fd5b506108cd611ee7565b6040516108da91906136e3565b60405180910390f35b3480156108ee575f80fd5b506108f7611eed565b60405161090491906136e3565b60405180910390f35b348015610918575f80fd5b50610933600480360381019061092e9190613635565b611ef3565b005b348015610940575f80fd5b50610949611f8c565b60405161095691906136e3565b60405180910390f35b34801561096a575f80fd5b5061098560048036038101906109809190613a00565b611f92565b60405161099291906136e3565b60405180910390f35b3480156109a6575f80fd5b506109af612014565b005b3480156109bc575f80fd5b506109c56120a2565b6040516109d291906136e3565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc919061360a565b6120a8565b005b348015610a0e575f80fd5b50610a1761219e565b604051610a2491906136e3565b60405180910390f35b606060038054610a3c90613a6b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6890613a6b565b8015610ab35780601f10610a8a57610100808354040283529160200191610ab3565b820191905f5260205f20905b815481529060010190602001808311610a9657829003601f168201915b5050505050905090565b5f610ad0610ac96121a4565b84846121ab565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b610aff6121a4565b73ffffffffffffffffffffffffffffffffffffffff16610b1d6117da565b73ffffffffffffffffffffffffffffffffffffffff1614610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613ae5565b60405180910390fd5b670de0b6b3a764000081610b879190613b30565b600a8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610bc56121a4565b73ffffffffffffffffffffffffffffffffffffffff16610be36117da565b73ffffffffffffffffffffffffffffffffffffffff1614610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090613ae5565b60405180910390fd5b670de0b6b3a76400006103e86001610c4f610bb4565b610c599190613b30565b610c639190613b9e565b610c6d9190613b9e565b811015610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613c3e565b60405180910390fd5b670de0b6b3a764000081610cc39190613b30565b60078190555050565b5f610cd884848461236e565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d1f6121a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613ccc565b60405180910390fd5b610db285610daa6121a4565b8584036121ab565b60019150509392505050565b610dc66121a4565b73ffffffffffffffffffffffffffffffffffffffff16610de46117da565b73ffffffffffffffffffffffffffffffffffffffff1614610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190613ae5565b60405180910390fd5b610e6c307f0000000000000000000000000000000000000000000000000000000000000000610e67610bb4565b6121ab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610eb33061150b565b5f80610ebd6117da565b426040518863ffffffff1660e01b8152600401610edf96959493929190613d23565b60606040518083038185885af1158015610efb573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f209190613d96565b5050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610fbe929190613de6565b6020604051808303815f875af1158015610fda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ffe9190613e21565b505f5b815181101561103a5761102f8282815181106110205761101f613e4c565b5b6020026020010151600161110e565b806001019050611001565b5050565b61dead81565b61104c6121a4565b73ffffffffffffffffffffffffffffffffffffffff1661106a6117da565b73ffffffffffffffffffffffffffffffffffffffff16146110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b790613ae5565b60405180910390fd5b6005600e819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600c8190555042600d81905550565b6111166121a4565b73ffffffffffffffffffffffffffffffffffffffff166111346117da565b73ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613ae5565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61123e6121a4565b73ffffffffffffffffffffffffffffffffffffffff1661125c6117da565b73ffffffffffffffffffffffffffffffffffffffff16146112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990613ae5565b60405180910390fd5b60148211156112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed90613ec3565b60405180910390fd5b601481111561133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133190613ec3565b60405180910390fd5b81600f81905550806010819055505050565b5f6012905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113946121a4565b73ffffffffffffffffffffffffffffffffffffffff16146113b3575f80fd5b6113bc3061150b565b81111580156113ca57505f81115b611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090613f2b565b60405180910390fd5b61141281612d47565b50565b5f6114b26114216121a4565b848460015f61142e6121a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114ad9190613f49565b6121ab565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b60105481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6115586121a4565b73ffffffffffffffffffffffffffffffffffffffff166115766117da565b73ffffffffffffffffffffffffffffffffffffffff16146115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390613ae5565b60405180910390fd5b6115d55f612f7a565b565b6115df6121a4565b73ffffffffffffffffffffffffffffffffffffffff166115fd6117da565b73ffffffffffffffffffffffffffffffffffffffff1614611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90613ae5565b60405180910390fd5b5f600b5f6101000a81548160ff021916908315150217905550565b6116766121a4565b73ffffffffffffffffffffffffffffffffffffffff166116946117da565b73ffffffffffffffffffffffffffffffffffffffff16146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613ae5565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61174a6121a4565b73ffffffffffffffffffffffffffffffffffffffff166117686117da565b73ffffffffffffffffffffffffffffffffffffffff16146117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b590613ae5565b60405180910390fd5b6001600b5f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61180a6121a4565b73ffffffffffffffffffffffffffffffffffffffff166118286117da565b73ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613ae5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546118aa90613a6b565b80601f01602080910402602001604051908101604052809291908181526020018280546118d690613a6b565b80156119215780601f106118f857610100808354040283529160200191611921565b820191905f5260205f20905b81548152906001019060200180831161190457829003601f168201915b5050505050905090565b600e5481565b6119396121a4565b73ffffffffffffffffffffffffffffffffffffffff166119576117da565b73ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490613ae5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3290613fec565b60405180910390fd5b611a45828261303d565b5050565b5f8060015f611a566121a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b079061407a565b60405180910390fd5b611b24611b1b6121a4565b858584036121ab565b600191505092915050565b5f611b42611b3b6121a4565b848461236e565b6001905092915050565b611b546121a4565b73ffffffffffffffffffffffffffffffffffffffff16611b726117da565b73ffffffffffffffffffffffffffffffffffffffff1614611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90613ae5565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c8e6121a4565b73ffffffffffffffffffffffffffffffffffffffff16611cac6117da565b73ffffffffffffffffffffffffffffffffffffffff1614611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf990613ae5565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fc8380fa8a824df6dbe9d02671e9b35fafd16be776ef78d1785a06e3f80bf914782604051611d9c91906135f1565b60405180910390a25050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611de06121a4565b73ffffffffffffffffffffffffffffffffffffffff16611dfe6117da565b73ffffffffffffffffffffffffffffffffffffffff1614611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90613ae5565b60405180910390fd5b670de0b6b3a76400006103e86005611e6a610bb4565b611e749190613b30565b611e7e9190613b9e565b611e889190613b9e565b811015611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190614108565b60405180910390fd5b670de0b6b3a764000081611ede9190613b30565b60098190555050565b60075481565b600a5481565b611efb6121a4565b73ffffffffffffffffffffffffffffffffffffffff16611f196117da565b73ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690613ae5565b60405180910390fd5b670de0b6b3a764000081611f839190613b30565b60088190555050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161205a90614153565b5f6040518083038185875af1925050503d805f8114612094576040519150601f19603f3d011682016040523d82523d5f602084013e612099565b606091505b50508091505050565b60085481565b6120b06121a4565b73ffffffffffffffffffffffffffffffffffffffff166120ce6117da565b73ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b90613ae5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612189906141d7565b60405180910390fd5b61219b81612f7a565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090614265565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e906142f3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161236191906136e3565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d390614381565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124419061440f565b60405180910390fd5b5f81036124615761245c83835f6130db565b612d42565b600b5f9054906101000a900460ff161561296c5761247d6117da565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124eb57506124bb6117da565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561252357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561255d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125765750600560149054906101000a900460ff16155b1561296b5743600e54600c5461258c9190613f49565b106125a257601e601081905550601e600f819055505b600b60019054906101000a900460ff166126915760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612651575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268790614477565b60405180910390fd5b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561272e575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127d557600754811115612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f90614505565b60405180910390fd5b6009546127848361150b565b8261278f9190613f49565b11156127d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c79061456d565b60405180910390fd5b61296a565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612872575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128c1576007548111156128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b3906145fb565b60405180910390fd5b612969565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166129685760095461291b8361150b565b826129269190613f49565b1115612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e9061456d565b60405180910390fd5b5b5b5b5b5b5f6129763061150b565b90505f600854821015905080801561299a5750600b60029054906101000a900460ff165b80156129b35750600560149054906101000a900460ff16155b8015612a06575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a59575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612aac575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b3d57600360145f4381526020019081526020015f20541015612b3c576001600560146101000a81548160ff021916908315150217905550612aee613350565b5f600560146101000a81548160ff021916908315150217905550600160145f4381526020019081526020015f2054612b269190613f49565b60145f4381526020019081526020015f20819055505b5b5f600560149054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612bec575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612bf5575f90505b5f8115612d325760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c5357505f601054115b15612c8757612c806064612c726010548861341d90919063ffffffff16565b61343290919063ffffffff16565b9050612d0f565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612cde57505f600f54115b15612d0e57612d0b6064612cfd600f548861341d90919063ffffffff16565b61343290919063ffffffff16565b90505b5b5f811115612d2357612d228730836130db565b5b8085612d2f9190614619565b94505b612d3d8787876130db565b505050505b505050565b5f600267ffffffffffffffff811115612d6357612d62613750565b5b604051908082528060200260200182016040528015612d915781602001602082028036833780820191505090505b50905030815f81518110612da857612da7613e4c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e6f9190614660565b81600181518110612e8357612e82613e4c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ee8307f0000000000000000000000000000000000000000000000000000000000000000846121ab565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612f49959493929190614742565b5f604051808303815f87803b158015612f60575f80fd5b505af1158015612f72573d5f803e3d5ffd5b505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314090614381565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ae9061440f565b60405180910390fd5b6131c2838383613447565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323c9061480a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132d39190613f49565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161333791906136e3565b60405180910390a361334a84848461344c565b50505050565b5f61335a3061150b565b90505f80820361336b57505061341b565b600a5482111561337b57600a5491505b5f82905061338881612d47565b5f47905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516133d190614153565b5f6040518083038185875af1925050503d805f811461340b576040519150601f19603f3d011682016040523d82523d5f602084013e613410565b606091505b505080935050505050505b565b5f818361342a9190613b30565b905092915050565b5f818361343f9190613b9e565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561348857808201518184015260208101905061346d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6134ad82613451565b6134b7818561345b565b93506134c781856020860161346b565b6134d081613493565b840191505092915050565b5f6020820190508181035f8301526134f381846134a3565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6135358261350c565b9050919050565b6135458161352b565b811461354f575f80fd5b50565b5f813590506135608161353c565b92915050565b5f819050919050565b61357881613566565b8114613582575f80fd5b50565b5f813590506135938161356f565b92915050565b5f80604083850312156135af576135ae613504565b5b5f6135bc85828601613552565b92505060206135cd85828601613585565b9150509250929050565b5f8115159050919050565b6135eb816135d7565b82525050565b5f6020820190506136045f8301846135e2565b92915050565b5f6020828403121561361f5761361e613504565b5b5f61362c84828501613552565b91505092915050565b5f6020828403121561364a57613649613504565b5b5f61365784828501613585565b91505092915050565b5f819050919050565b5f61368361367e6136798461350c565b613660565b61350c565b9050919050565b5f61369482613669565b9050919050565b5f6136a58261368a565b9050919050565b6136b58161369b565b82525050565b5f6020820190506136ce5f8301846136ac565b92915050565b6136dd81613566565b82525050565b5f6020820190506136f65f8301846136d4565b92915050565b5f805f6060848603121561371357613712613504565b5b5f61372086828701613552565b935050602061373186828701613552565b925050604061374286828701613585565b9150509250925092565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61378682613493565b810181811067ffffffffffffffff821117156137a5576137a4613750565b5b80604052505050565b5f6137b76134fb565b90506137c3828261377d565b919050565b5f67ffffffffffffffff8211156137e2576137e1613750565b5b602082029050602081019050919050565b5f80fd5b5f613809613804846137c8565b6137ae565b9050808382526020820190506020840283018581111561382c5761382b6137f3565b5b835b8181101561385557806138418882613552565b84526020840193505060208101905061382e565b5050509392505050565b5f82601f8301126138735761387261374c565b5b81356138838482602086016137f7565b91505092915050565b5f602082840312156138a1576138a0613504565b5b5f82013567ffffffffffffffff8111156138be576138bd613508565b5b6138ca8482850161385f565b91505092915050565b6138dc8161352b565b82525050565b5f6020820190506138f55f8301846138d3565b92915050565b613904816135d7565b811461390e575f80fd5b50565b5f8135905061391f816138fb565b92915050565b5f806040838503121561393b5761393a613504565b5b5f61394885828601613552565b925050602061395985828601613911565b9150509250929050565b5f806040838503121561397957613978613504565b5b5f61398685828601613585565b925050602061399785828601613585565b9150509250929050565b5f60ff82169050919050565b6139b6816139a1565b82525050565b5f6020820190506139cf5f8301846139ad565b92915050565b5f602082840312156139ea576139e9613504565b5b5f6139f784828501613911565b91505092915050565b5f8060408385031215613a1657613a15613504565b5b5f613a2385828601613552565b9250506020613a3485828601613552565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a8257607f821691505b602082108103613a9557613a94613a3e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613acf60208361345b565b9150613ada82613a9b565b602082019050919050565b5f6020820190508181035f830152613afc81613ac3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b3a82613566565b9150613b4583613566565b9250828202613b5381613566565b91508282048414831517613b6a57613b69613b03565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613ba882613566565b9150613bb383613566565b925082613bc357613bc2613b71565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613c28602f8361345b565b9150613c3382613bce565b604082019050919050565b5f6020820190508181035f830152613c5581613c1c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613cb660288361345b565b9150613cc182613c5c565b604082019050919050565b5f6020820190508181035f830152613ce381613caa565b9050919050565b5f819050919050565b5f613d0d613d08613d0384613cea565b613660565b613566565b9050919050565b613d1d81613cf3565b82525050565b5f60c082019050613d365f8301896138d3565b613d4360208301886136d4565b613d506040830187613d14565b613d5d6060830186613d14565b613d6a60808301856138d3565b613d7760a08301846136d4565b979650505050505050565b5f81519050613d908161356f565b92915050565b5f805f60608486031215613dad57613dac613504565b5b5f613dba86828701613d82565b9350506020613dcb86828701613d82565b9250506040613ddc86828701613d82565b9150509250925092565b5f604082019050613df95f8301856138d3565b613e0660208301846136d4565b9392505050565b5f81519050613e1b816138fb565b92915050565b5f60208284031215613e3657613e35613504565b5b5f613e4384828501613e0d565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45786365656420746865206c696d6974000000000000000000000000000000005f82015250565b5f613ead60108361345b565b9150613eb882613e79565b602082019050919050565b5f6020820190508181035f830152613eda81613ea1565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613f15600c8361345b565b9150613f2082613ee1565b602082019050919050565b5f6020820190508181035f830152613f4281613f09565b9050919050565b5f613f5382613566565b9150613f5e83613566565b9250828201905080821115613f7657613f75613b03565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613fd660398361345b565b9150613fe182613f7c565b604082019050919050565b5f6020820190508181035f83015261400381613fca565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61406460258361345b565b915061406f8261400a565b604082019050919050565b5f6020820190508181035f83015261409181614058565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6140f260248361345b565b91506140fd82614098565b604082019050919050565b5f6020820190508181035f83015261411f816140e6565b9050919050565b5f81905092915050565b50565b5f61413e5f83614126565b915061414982614130565b5f82019050919050565b5f61415d82614133565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6141c160268361345b565b91506141cc82614167565b604082019050919050565b5f6020820190508181035f8301526141ee816141b5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61424f60248361345b565b915061425a826141f5565b604082019050919050565b5f6020820190508181035f83015261427c81614243565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6142dd60228361345b565b91506142e882614283565b604082019050919050565b5f6020820190508181035f83015261430a816142d1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61436b60258361345b565b915061437682614311565b604082019050919050565b5f6020820190508181035f8301526143988161435f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143f960238361345b565b91506144048261439f565b604082019050919050565b5f6020820190508181035f830152614426816143ed565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61446160168361345b565b915061446c8261442d565b602082019050919050565b5f6020820190508181035f83015261448e81614455565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6144ef60358361345b565b91506144fa82614495565b604082019050919050565b5f6020820190508181035f83015261451c816144e3565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61455760138361345b565b915061456282614523565b602082019050919050565b5f6020820190508181035f8301526145848161454b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6145e560368361345b565b91506145f08261458b565b604082019050919050565b5f6020820190508181035f830152614612816145d9565b9050919050565b5f61462382613566565b915061462e83613566565b925082820390508181111561464657614645613b03565b5b92915050565b5f8151905061465a8161353c565b92915050565b5f6020828403121561467557614674613504565b5b5f6146828482850161464c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6146bd8161352b565b82525050565b5f6146ce83836146b4565b60208301905092915050565b5f602082019050919050565b5f6146f08261468b565b6146fa8185614695565b9350614705836146a5565b805f5b8381101561473557815161471c88826146c3565b9750614727836146da565b925050600181019050614708565b5085935050505092915050565b5f60a0820190506147555f8301886136d4565b6147626020830187613d14565b818103604083015261477481866146e6565b905061478360608301856138d3565b61479060808301846136d4565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6147f460268361345b565b91506147ff8261479a565b604082019050919050565b5f6020820190508181035f830152614821816147e8565b905091905056fea2646970667358221220d71b8b3bff33cb902513e22892c802a9d5d9e3b14bddb4ea730ec91b4e37854364736f6c63430008170033

Deployed Bytecode

0x608060405260043610610280575f3560e01c80637571336a1161014e578063b62496f5116100c0578063d85ba06311610079578063d85ba06314610935578063dd62ed3e1461095f578063dfa20f0a1461099b578063e2f45605146109b1578063f2fde38b146109db578063f8b45b0514610a0357610287565b8063b62496f51461082b578063bbc0c74214610867578063c18bc19514610891578063c8c8ebe4146108b9578063cce987d4146108e3578063d257b34f1461090d57610287565b8063967ff23e11610112578063967ff23e146107115780639a7a23d61461073b578063a457c2d714610763578063a9059cbb1461079f578063aacebbe3146107db578063b01021981461080357610287565b80637571336a146106575780638129fc1c1461067f5780638da5cb5b14610695578063924de9b7146106bf57806395d89b41146106e757610287565b80632c77d2ed116101f25780634a62bb65116101ab5780634a62bb65146105715780636a486a8e1461059b5780636ddd1713146105c557806370a08231146105ef578063715018a61461062b578063751039fc1461064157610287565b80632c77d2ed146104695780632f37aa6d14610491578063313ce567146104b9578063359dd7a7146104e3578063395093511461050b57806349bd5a5e1461054757610287565b806318160ddd1161024457806318160ddd1461037f578063203e727e146103a957806323b872dd146103d15780632460acea1461040d57806327c8f83514610429578063293230b81461045357610287565b806306fdde031461028b578063095ea7b3146102b55780630de8f8c2146102f1578063150074a31461032d5780631694505e1461035557610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a2d565b6040516102ac91906134db565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613599565b610abd565b6040516102e891906135f1565b60405180910390f35b3480156102fc575f80fd5b506103176004803603810190610312919061360a565b610ada565b60405161032491906135f1565b60405180910390f35b348015610338575f80fd5b50610353600480360381019061034e9190613635565b610af7565b005b348015610360575f80fd5b50610369610b90565b60405161037691906136bb565b60405180910390f35b34801561038a575f80fd5b50610393610bb4565b6040516103a091906136e3565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca9190613635565b610bbd565b005b3480156103dc575f80fd5b506103f760048036038101906103f291906136fc565b610ccc565b60405161040491906135f1565b60405180910390f35b6104276004803603810190610422919061388c565b610dbe565b005b348015610434575f80fd5b5061043d61103e565b60405161044a91906138e2565b60405180910390f35b34801561045e575f80fd5b50610467611044565b005b348015610474575f80fd5b5061048f600480360381019061048a9190613925565b61110e565b005b34801561049c575f80fd5b506104b760048036038101906104b29190613963565b611236565b005b3480156104c4575f80fd5b506104cd61134c565b6040516104da91906139bc565b60405180910390f35b3480156104ee575f80fd5b5061050960048036038101906105049190613635565b611354565b005b348015610516575f80fd5b50610531600480360381019061052c9190613599565b611415565b60405161053e91906135f1565b60405180910390f35b348015610552575f80fd5b5061055b6114bc565b60405161056891906138e2565b60405180910390f35b34801561057c575f80fd5b506105856114e0565b60405161059291906135f1565b60405180910390f35b3480156105a6575f80fd5b506105af6114f2565b6040516105bc91906136e3565b60405180910390f35b3480156105d0575f80fd5b506105d96114f8565b6040516105e691906135f1565b60405180910390f35b3480156105fa575f80fd5b506106156004803603810190610610919061360a565b61150b565b60405161062291906136e3565b60405180910390f35b348015610636575f80fd5b5061063f611550565b005b34801561064c575f80fd5b506106556115d7565b005b348015610662575f80fd5b5061067d60048036038101906106789190613925565b61166e565b005b34801561068a575f80fd5b50610693611742565b005b3480156106a0575f80fd5b506106a96117da565b6040516106b691906138e2565b60405180910390f35b3480156106ca575f80fd5b506106e560048036038101906106e091906139d5565b611802565b005b3480156106f2575f80fd5b506106fb61189b565b60405161070891906134db565b60405180910390f35b34801561071c575f80fd5b5061072561192b565b60405161073291906136e3565b60405180910390f35b348015610746575f80fd5b50610761600480360381019061075c9190613925565b611931565b005b34801561076e575f80fd5b5061078960048036038101906107849190613599565b611a49565b60405161079691906135f1565b60405180910390f35b3480156107aa575f80fd5b506107c560048036038101906107c09190613599565b611b2f565b6040516107d291906135f1565b60405180910390f35b3480156107e6575f80fd5b5061080160048036038101906107fc919061360a565b611b4c565b005b34801561080e575f80fd5b5061082960048036038101906108249190613925565b611c86565b005b348015610836575f80fd5b50610851600480360381019061084c919061360a565b611da8565b60405161085e91906135f1565b60405180910390f35b348015610872575f80fd5b5061087b611dc5565b60405161088891906135f1565b60405180910390f35b34801561089c575f80fd5b506108b760048036038101906108b29190613635565b611dd8565b005b3480156108c4575f80fd5b506108cd611ee7565b6040516108da91906136e3565b60405180910390f35b3480156108ee575f80fd5b506108f7611eed565b60405161090491906136e3565b60405180910390f35b348015610918575f80fd5b50610933600480360381019061092e9190613635565b611ef3565b005b348015610940575f80fd5b50610949611f8c565b60405161095691906136e3565b60405180910390f35b34801561096a575f80fd5b5061098560048036038101906109809190613a00565b611f92565b60405161099291906136e3565b60405180910390f35b3480156109a6575f80fd5b506109af612014565b005b3480156109bc575f80fd5b506109c56120a2565b6040516109d291906136e3565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc919061360a565b6120a8565b005b348015610a0e575f80fd5b50610a1761219e565b604051610a2491906136e3565b60405180910390f35b606060038054610a3c90613a6b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6890613a6b565b8015610ab35780601f10610a8a57610100808354040283529160200191610ab3565b820191905f5260205f20905b815481529060010190602001808311610a9657829003601f168201915b5050505050905090565b5f610ad0610ac96121a4565b84846121ab565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b610aff6121a4565b73ffffffffffffffffffffffffffffffffffffffff16610b1d6117da565b73ffffffffffffffffffffffffffffffffffffffff1614610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613ae5565b60405180910390fd5b670de0b6b3a764000081610b879190613b30565b600a8190555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610bc56121a4565b73ffffffffffffffffffffffffffffffffffffffff16610be36117da565b73ffffffffffffffffffffffffffffffffffffffff1614610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090613ae5565b60405180910390fd5b670de0b6b3a76400006103e86001610c4f610bb4565b610c599190613b30565b610c639190613b9e565b610c6d9190613b9e565b811015610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613c3e565b60405180910390fd5b670de0b6b3a764000081610cc39190613b30565b60078190555050565b5f610cd884848461236e565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d1f6121a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613ccc565b60405180910390fd5b610db285610daa6121a4565b8584036121ab565b60019150509392505050565b610dc66121a4565b73ffffffffffffffffffffffffffffffffffffffff16610de46117da565b73ffffffffffffffffffffffffffffffffffffffff1614610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190613ae5565b60405180910390fd5b610e6c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d610e67610bb4565b6121ab565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610eb33061150b565b5f80610ebd6117da565b426040518863ffffffff1660e01b8152600401610edf96959493929190613d23565b60606040518083038185885af1158015610efb573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f209190613d96565b5050507f000000000000000000000000e947400ef85a704c3ce594b8d6138060012b741773ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610fbe929190613de6565b6020604051808303815f875af1158015610fda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ffe9190613e21565b505f5b815181101561103a5761102f8282815181106110205761101f613e4c565b5b6020026020010151600161110e565b806001019050611001565b5050565b61dead81565b61104c6121a4565b73ffffffffffffffffffffffffffffffffffffffff1661106a6117da565b73ffffffffffffffffffffffffffffffffffffffff16146110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b790613ae5565b60405180910390fd5b6005600e819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600c8190555042600d81905550565b6111166121a4565b73ffffffffffffffffffffffffffffffffffffffff166111346117da565b73ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613ae5565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61123e6121a4565b73ffffffffffffffffffffffffffffffffffffffff1661125c6117da565b73ffffffffffffffffffffffffffffffffffffffff16146112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990613ae5565b60405180910390fd5b60148211156112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed90613ec3565b60405180910390fd5b601481111561133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133190613ec3565b60405180910390fd5b81600f81905550806010819055505050565b5f6012905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113946121a4565b73ffffffffffffffffffffffffffffffffffffffff16146113b3575f80fd5b6113bc3061150b565b81111580156113ca57505f81115b611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140090613f2b565b60405180910390fd5b61141281612d47565b50565b5f6114b26114216121a4565b848460015f61142e6121a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114ad9190613f49565b6121ab565b6001905092915050565b7f000000000000000000000000e947400ef85a704c3ce594b8d6138060012b741781565b600b5f9054906101000a900460ff1681565b60105481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6115586121a4565b73ffffffffffffffffffffffffffffffffffffffff166115766117da565b73ffffffffffffffffffffffffffffffffffffffff16146115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390613ae5565b60405180910390fd5b6115d55f612f7a565b565b6115df6121a4565b73ffffffffffffffffffffffffffffffffffffffff166115fd6117da565b73ffffffffffffffffffffffffffffffffffffffff1614611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90613ae5565b60405180910390fd5b5f600b5f6101000a81548160ff021916908315150217905550565b6116766121a4565b73ffffffffffffffffffffffffffffffffffffffff166116946117da565b73ffffffffffffffffffffffffffffffffffffffff16146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613ae5565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61174a6121a4565b73ffffffffffffffffffffffffffffffffffffffff166117686117da565b73ffffffffffffffffffffffffffffffffffffffff16146117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b590613ae5565b60405180910390fd5b6001600b5f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61180a6121a4565b73ffffffffffffffffffffffffffffffffffffffff166118286117da565b73ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613ae5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546118aa90613a6b565b80601f01602080910402602001604051908101604052809291908181526020018280546118d690613a6b565b80156119215780601f106118f857610100808354040283529160200191611921565b820191905f5260205f20905b81548152906001019060200180831161190457829003601f168201915b5050505050905090565b600e5481565b6119396121a4565b73ffffffffffffffffffffffffffffffffffffffff166119576117da565b73ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490613ae5565b60405180910390fd5b7f000000000000000000000000e947400ef85a704c3ce594b8d6138060012b741773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3290613fec565b60405180910390fd5b611a45828261303d565b5050565b5f8060015f611a566121a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b079061407a565b60405180910390fd5b611b24611b1b6121a4565b858584036121ab565b600191505092915050565b5f611b42611b3b6121a4565b848461236e565b6001905092915050565b611b546121a4565b73ffffffffffffffffffffffffffffffffffffffff16611b726117da565b73ffffffffffffffffffffffffffffffffffffffff1614611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90613ae5565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c8e6121a4565b73ffffffffffffffffffffffffffffffffffffffff16611cac6117da565b73ffffffffffffffffffffffffffffffffffffffff1614611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf990613ae5565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fc8380fa8a824df6dbe9d02671e9b35fafd16be776ef78d1785a06e3f80bf914782604051611d9c91906135f1565b60405180910390a25050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611de06121a4565b73ffffffffffffffffffffffffffffffffffffffff16611dfe6117da565b73ffffffffffffffffffffffffffffffffffffffff1614611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b90613ae5565b60405180910390fd5b670de0b6b3a76400006103e86005611e6a610bb4565b611e749190613b30565b611e7e9190613b9e565b611e889190613b9e565b811015611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190614108565b60405180910390fd5b670de0b6b3a764000081611ede9190613b30565b60098190555050565b60075481565b600a5481565b611efb6121a4565b73ffffffffffffffffffffffffffffffffffffffff16611f196117da565b73ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690613ae5565b60405180910390fd5b670de0b6b3a764000081611f839190613b30565b60088190555050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161205a90614153565b5f6040518083038185875af1925050503d805f8114612094576040519150601f19603f3d011682016040523d82523d5f602084013e612099565b606091505b50508091505050565b60085481565b6120b06121a4565b73ffffffffffffffffffffffffffffffffffffffff166120ce6117da565b73ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b90613ae5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612189906141d7565b60405180910390fd5b61219b81612f7a565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090614265565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e906142f3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161236191906136e3565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d390614381565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124419061440f565b60405180910390fd5b5f81036124615761245c83835f6130db565b612d42565b600b5f9054906101000a900460ff161561296c5761247d6117da565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124eb57506124bb6117da565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561252357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561255d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125765750600560149054906101000a900460ff16155b1561296b5743600e54600c5461258c9190613f49565b106125a257601e601081905550601e600f819055505b600b60019054906101000a900460ff166126915760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612651575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268790614477565b60405180910390fd5b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561272e575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127d557600754811115612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f90614505565b60405180910390fd5b6009546127848361150b565b8261278f9190613f49565b11156127d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c79061456d565b60405180910390fd5b61296a565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612872575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128c1576007548111156128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b3906145fb565b60405180910390fd5b612969565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166129685760095461291b8361150b565b826129269190613f49565b1115612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e9061456d565b60405180910390fd5b5b5b5b5b5b5f6129763061150b565b90505f600854821015905080801561299a5750600b60029054906101000a900460ff165b80156129b35750600560149054906101000a900460ff16155b8015612a06575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a59575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612aac575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b3d57600360145f4381526020019081526020015f20541015612b3c576001600560146101000a81548160ff021916908315150217905550612aee613350565b5f600560146101000a81548160ff021916908315150217905550600160145f4381526020019081526020015f2054612b269190613f49565b60145f4381526020019081526020015f20819055505b5b5f600560149054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612bec575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612bf5575f90505b5f8115612d325760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c5357505f601054115b15612c8757612c806064612c726010548861341d90919063ffffffff16565b61343290919063ffffffff16565b9050612d0f565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612cde57505f600f54115b15612d0e57612d0b6064612cfd600f548861341d90919063ffffffff16565b61343290919063ffffffff16565b90505b5b5f811115612d2357612d228730836130db565b5b8085612d2f9190614619565b94505b612d3d8787876130db565b505050505b505050565b5f600267ffffffffffffffff811115612d6357612d62613750565b5b604051908082528060200260200182016040528015612d915781602001602082028036833780820191505090505b50905030815f81518110612da857612da7613e4c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e6f9190614660565b81600181518110612e8357612e82613e4c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ee8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121ab565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612f49959493929190614742565b5f604051808303815f87803b158015612f60575f80fd5b505af1158015612f72573d5f803e3d5ffd5b505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314090614381565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ae9061440f565b60405180910390fd5b6131c2838383613447565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323c9061480a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132d39190613f49565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161333791906136e3565b60405180910390a361334a84848461344c565b50505050565b5f61335a3061150b565b90505f80820361336b57505061341b565b600a5482111561337b57600a5491505b5f82905061338881612d47565b5f47905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516133d190614153565b5f6040518083038185875af1925050503d805f811461340b576040519150601f19603f3d011682016040523d82523d5f602084013e613410565b606091505b505080935050505050505b565b5f818361342a9190613b30565b905092915050565b5f818361343f9190613b9e565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561348857808201518184015260208101905061346d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6134ad82613451565b6134b7818561345b565b93506134c781856020860161346b565b6134d081613493565b840191505092915050565b5f6020820190508181035f8301526134f381846134a3565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6135358261350c565b9050919050565b6135458161352b565b811461354f575f80fd5b50565b5f813590506135608161353c565b92915050565b5f819050919050565b61357881613566565b8114613582575f80fd5b50565b5f813590506135938161356f565b92915050565b5f80604083850312156135af576135ae613504565b5b5f6135bc85828601613552565b92505060206135cd85828601613585565b9150509250929050565b5f8115159050919050565b6135eb816135d7565b82525050565b5f6020820190506136045f8301846135e2565b92915050565b5f6020828403121561361f5761361e613504565b5b5f61362c84828501613552565b91505092915050565b5f6020828403121561364a57613649613504565b5b5f61365784828501613585565b91505092915050565b5f819050919050565b5f61368361367e6136798461350c565b613660565b61350c565b9050919050565b5f61369482613669565b9050919050565b5f6136a58261368a565b9050919050565b6136b58161369b565b82525050565b5f6020820190506136ce5f8301846136ac565b92915050565b6136dd81613566565b82525050565b5f6020820190506136f65f8301846136d4565b92915050565b5f805f6060848603121561371357613712613504565b5b5f61372086828701613552565b935050602061373186828701613552565b925050604061374286828701613585565b9150509250925092565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61378682613493565b810181811067ffffffffffffffff821117156137a5576137a4613750565b5b80604052505050565b5f6137b76134fb565b90506137c3828261377d565b919050565b5f67ffffffffffffffff8211156137e2576137e1613750565b5b602082029050602081019050919050565b5f80fd5b5f613809613804846137c8565b6137ae565b9050808382526020820190506020840283018581111561382c5761382b6137f3565b5b835b8181101561385557806138418882613552565b84526020840193505060208101905061382e565b5050509392505050565b5f82601f8301126138735761387261374c565b5b81356138838482602086016137f7565b91505092915050565b5f602082840312156138a1576138a0613504565b5b5f82013567ffffffffffffffff8111156138be576138bd613508565b5b6138ca8482850161385f565b91505092915050565b6138dc8161352b565b82525050565b5f6020820190506138f55f8301846138d3565b92915050565b613904816135d7565b811461390e575f80fd5b50565b5f8135905061391f816138fb565b92915050565b5f806040838503121561393b5761393a613504565b5b5f61394885828601613552565b925050602061395985828601613911565b9150509250929050565b5f806040838503121561397957613978613504565b5b5f61398685828601613585565b925050602061399785828601613585565b9150509250929050565b5f60ff82169050919050565b6139b6816139a1565b82525050565b5f6020820190506139cf5f8301846139ad565b92915050565b5f602082840312156139ea576139e9613504565b5b5f6139f784828501613911565b91505092915050565b5f8060408385031215613a1657613a15613504565b5b5f613a2385828601613552565b9250506020613a3485828601613552565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a8257607f821691505b602082108103613a9557613a94613a3e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613acf60208361345b565b9150613ada82613a9b565b602082019050919050565b5f6020820190508181035f830152613afc81613ac3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b3a82613566565b9150613b4583613566565b9250828202613b5381613566565b91508282048414831517613b6a57613b69613b03565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613ba882613566565b9150613bb383613566565b925082613bc357613bc2613b71565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613c28602f8361345b565b9150613c3382613bce565b604082019050919050565b5f6020820190508181035f830152613c5581613c1c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613cb660288361345b565b9150613cc182613c5c565b604082019050919050565b5f6020820190508181035f830152613ce381613caa565b9050919050565b5f819050919050565b5f613d0d613d08613d0384613cea565b613660565b613566565b9050919050565b613d1d81613cf3565b82525050565b5f60c082019050613d365f8301896138d3565b613d4360208301886136d4565b613d506040830187613d14565b613d5d6060830186613d14565b613d6a60808301856138d3565b613d7760a08301846136d4565b979650505050505050565b5f81519050613d908161356f565b92915050565b5f805f60608486031215613dad57613dac613504565b5b5f613dba86828701613d82565b9350506020613dcb86828701613d82565b9250506040613ddc86828701613d82565b9150509250925092565b5f604082019050613df95f8301856138d3565b613e0660208301846136d4565b9392505050565b5f81519050613e1b816138fb565b92915050565b5f60208284031215613e3657613e35613504565b5b5f613e4384828501613e0d565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45786365656420746865206c696d6974000000000000000000000000000000005f82015250565b5f613ead60108361345b565b9150613eb882613e79565b602082019050919050565b5f6020820190508181035f830152613eda81613ea1565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613f15600c8361345b565b9150613f2082613ee1565b602082019050919050565b5f6020820190508181035f830152613f4281613f09565b9050919050565b5f613f5382613566565b9150613f5e83613566565b9250828201905080821115613f7657613f75613b03565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613fd660398361345b565b9150613fe182613f7c565b604082019050919050565b5f6020820190508181035f83015261400381613fca565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61406460258361345b565b915061406f8261400a565b604082019050919050565b5f6020820190508181035f83015261409181614058565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6140f260248361345b565b91506140fd82614098565b604082019050919050565b5f6020820190508181035f83015261411f816140e6565b9050919050565b5f81905092915050565b50565b5f61413e5f83614126565b915061414982614130565b5f82019050919050565b5f61415d82614133565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6141c160268361345b565b91506141cc82614167565b604082019050919050565b5f6020820190508181035f8301526141ee816141b5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61424f60248361345b565b915061425a826141f5565b604082019050919050565b5f6020820190508181035f83015261427c81614243565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6142dd60228361345b565b91506142e882614283565b604082019050919050565b5f6020820190508181035f83015261430a816142d1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61436b60258361345b565b915061437682614311565b604082019050919050565b5f6020820190508181035f8301526143988161435f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143f960238361345b565b91506144048261439f565b604082019050919050565b5f6020820190508181035f830152614426816143ed565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61446160168361345b565b915061446c8261442d565b602082019050919050565b5f6020820190508181035f83015261448e81614455565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6144ef60358361345b565b91506144fa82614495565b604082019050919050565b5f6020820190508181035f83015261451c816144e3565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61455760138361345b565b915061456282614523565b602082019050919050565b5f6020820190508181035f8301526145848161454b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6145e560368361345b565b91506145f08261458b565b604082019050919050565b5f6020820190508181035f830152614612816145d9565b9050919050565b5f61462382613566565b915061462e83613566565b925082820390508181111561464657614645613b03565b5b92915050565b5f8151905061465a8161353c565b92915050565b5f6020828403121561467557614674613504565b5b5f6146828482850161464c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6146bd8161352b565b82525050565b5f6146ce83836146b4565b60208301905092915050565b5f602082019050919050565b5f6146f08261468b565b6146fa8185614695565b9350614705836146a5565b805f5b8381101561473557815161471c88826146c3565b9750614727836146da565b925050600181019050614708565b5085935050505092915050565b5f60a0820190506147555f8301886136d4565b6147626020830187613d14565b818103604083015261477481866146e6565b905061478360608301856138d3565b61479060808301846136d4565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6147f460268361345b565b91506147ff8261479a565b604082019050919050565b5f6020820190508181035f830152614821816147e8565b905091905056fea2646970667358221220d71b8b3bff33cb902513e22892c802a9d5d9e3b14bddb4ea730ec91b4e37854364736f6c63430008170033

Deployed Bytecode Sourcemap

12689:10829:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8197:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9111:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13500:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16592:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12769:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8518:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16718:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9288:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15534:497;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12872:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16039:219;;;;;;;;;;;;;:::i;:::-;;17195:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18744:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8417:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17909:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9754:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12827:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13154:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13408:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13234:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8634:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7243:103;;;;;;;;;;;;;:::i;:::-;;16269:84;;;;;;;;;;;;;:::i;:::-;;17375:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16361:81;;;;;;;;;;;;;:::i;:::-;;7020:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17601:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8305:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13342:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18296:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9977:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8769:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18990:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17709:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13558:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13194:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16966:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13004:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13117:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16450:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13372:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8952:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18138:150;;;;;;;;;;;;;:::i;:::-;;13046:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7354:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13086:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8197:100;8251:13;8284:5;8277:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8197:100;:::o;9111:169::-;9194:4;9211:39;9220:12;:10;:12::i;:::-;9234:7;9243:6;9211:8;:39::i;:::-;9268:4;9261:11;;9111:169;;;;:::o;13500:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;16592:118::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16693:8:::1;16680:9;:22;;;;:::i;:::-;16664:13;:38;;;;16592:118:::0;:::o;12769:51::-;;;:::o;8518:108::-;8579:7;8606:12;;8599:19;;8518:108;:::o;16718:240::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16841:4:::1;16833;16828:1;16812:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16811:26;;;;:::i;:::-;16810:35;;;;:::i;:::-;16800:6;:45;;16792:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;16941:8;16931:6;:19;;;;:::i;:::-;16908:20;:42;;;;16718:240:::0;:::o;9288:458::-;9394:4;9411:36;9421:6;9429:9;9440:6;9411:9;:36::i;:::-;9460:24;9487:11;:19;9499:6;9487:19;;;;;;;;;;;;;;;:33;9507:12;:10;:12::i;:::-;9487:33;;;;;;;;;;;;;;;;9460:60;;9559:6;9539:16;:26;;9531:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9646:57;9655:6;9663:12;:10;:12::i;:::-;9696:6;9677:16;:25;9646:8;:57::i;:::-;9734:4;9727:11;;;9288:458;;;;;:::o;15534:497::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15624:64:::1;15641:4;15656:15;15674:13;:11;:13::i;:::-;15624:8;:64::i;:::-;15699:15;:31;;;15738:21;15769:4;15775:24;15793:4;15775:9;:24::i;:::-;15800:1;15802::::0;15804:7:::1;:5;:7::i;:::-;15812:15;15699:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15846:13;15839:29;;;15877:15;15895:14;15839:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15925:9;15921:103;15940:9;:16;15936:1;:20;15921:103;;;15977:35;15993:9;16003:1;15993:12;;;;;;;;:::i;:::-;;;;;;;;16007:4;15977:15;:35::i;:::-;15958:3;;;;;15921:103;;;;15534:497:::0;:::o;12872:53::-;12918:6;12872:53;:::o;16039:219::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16112:1:::1;16103:6;:10;;;;16140:4;16124:13;;:20;;;;;;;;;;;;;;;;;;16169:4;16155:11;;:18;;;;;;;;;;;;;;;;;;16197:12;16184:10;:25;;;;16235:15;16220:12;:30;;;;16039:219::o:0;17195:172::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17309:4:::1;17278:17;:28;17296:9;17278:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;17355:4;17326:15;:26;17342:9;17326:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;17195:172:::0;;:::o;18744:238::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18838:2:::1;18830:4;:10;;18822:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;18889:2;18880:5;:11;;18872:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;18938:4;18923:12;:19;;;;18969:5;18953:13;:21;;;;18744:238:::0;;:::o;8417:93::-;8475:5;8500:2;8493:9;;8417:93;:::o;17909:221::-;17987:15;;;;;;;;;;;17971:31;;:12;:10;:12::i;:::-;:31;;;17963:40;;;;;;18032:24;18050:4;18032:9;:24::i;:::-;18022:6;:34;;:48;;;;;18069:1;18060:6;:10;18022:48;18014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18098:24;18115:6;18098:16;:24::i;:::-;17909:221;:::o;9754:215::-;9842:4;9859:80;9868:12;:10;:12::i;:::-;9882:7;9928:10;9891:11;:25;9903:12;:10;:12::i;:::-;9891:25;;;;;;;;;;;;;;;:34;9917:7;9891:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9859:8;:80::i;:::-;9957:4;9950:11;;9754:215;;;;:::o;12827:38::-;;;:::o;13154:33::-;;;;;;;;;;;;;:::o;13408:28::-;;;;:::o;13234:31::-;;;;;;;;;;;;;:::o;8634:127::-;8708:7;8735:9;:18;8745:7;8735:18;;;;;;;;;;;;;;;;8728:25;;8634:127;;;:::o;7243:103::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7308:30:::1;7335:1;7308:18;:30::i;:::-;7243:103::o:0;16269:84::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16340:5:::1;16323:14;;:22;;;;;;;;;;;;;;;;;;16269:84::o:0;17375:130::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17493:4:::1;17465:17;:25;17483:6;17465:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;17375:130:::0;;:::o;16361:81::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16430:4:::1;16413:14;;:21;;;;;;;;;;;;;;;;;;16361:81::o:0;7020:87::-;7066:7;7093:6;;;;;;;;;;;7086:13;;7020:87;:::o;17601:100::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17686:7:::1;17672:11;;:21;;;;;;;;;;;;;;;;;;17601:100:::0;:::o;8305:104::-;8361:13;8394:7;8387:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8305:104;:::o;13342:21::-;;;;:::o;18296:244::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18403:13:::1;18395:21;;:4;:21;;::::0;18387:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18491:41;18520:4;18526:5;18491:28;:41::i;:::-;18296:244:::0;;:::o;9977:413::-;10070:4;10087:24;10114:11;:25;10126:12;:10;:12::i;:::-;10114:25;;;;;;;;;;;;;;;:34;10140:7;10114:34;;;;;;;;;;;;;;;;10087:61;;10187:15;10167:16;:35;;10159:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10280:67;10289:12;:10;:12::i;:::-;10303:7;10331:15;10312:16;:34;10280:8;:67::i;:::-;10378:4;10371:11;;;9977:413;;;;:::o;8769:175::-;8855:4;8872:42;8882:12;:10;:12::i;:::-;8896:9;8907:6;8872:9;:42::i;:::-;8932:4;8925:11;;8769:175;;;;:::o;18990:208::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19127:15:::1;;;;;;;;;;;19084:59;;19107:18;19084:59;;;;;;;;;;;;19172:18;19154:15;;:36;;;;;;;;;;;;;;;;;;18990:208:::0;:::o;17709:192::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17828:8:::1;17801:15;:24;17817:7;17801:24;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;17875:7;17852:41;;;17884:8;17852:41;;;;;;:::i;:::-;;;;;;;;17709:192:::0;;:::o;13558:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;13194:33::-;;;;;;;;;;;;;:::o;16966:221::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17092:4:::1;17084;17079:1;17063:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17062:26;;;;:::i;:::-;17061:35;;;;:::i;:::-;17051:6;:45;;17043:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;17170:8;17160:6;:19;;;;:::i;:::-;17148:9;:31;;;;16966:221:::0;:::o;13004:35::-;;;;:::o;13117:28::-;;;;:::o;16450:134::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16567:8:::1;16554:9;:22;;;;:::i;:::-;16533:18;:43;;;;16450:134:::0;:::o;13372:27::-;;;;:::o;8952:151::-;9041:7;9068:11;:18;9080:5;9068:18;;;;;;;;;;;;;;;:27;9087:7;9068:27;;;;;;;;;;;;;;;;9061:34;;8952:151;;;;:::o;18138:150::-;18181:12;18225:15;;;;;;;;;;;18217:29;;18254:21;18217:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18204:76;;;;;18170:118;18138:150::o;13046:33::-;;;;:::o;7354:201::-;7166:12;:10;:12::i;:::-;7155:23;;:7;:5;:7::i;:::-;:23;;;7147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7463:1:::1;7443:22;;:8;:22;;::::0;7435:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7519:28;7538:8;7519:18;:28::i;:::-;7354:201:::0;:::o;13086:24::-;;;;:::o;6536:98::-;6589:7;6616:10;6609:17;;6536:98;:::o;12111:346::-;12230:1;12213:19;;:5;:19;;;12205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12311:1;12292:21;;:7;:21;;;12284:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12395:6;12365:11;:18;12377:5;12365:18;;;;;;;;;;;;;;;:27;12384:7;12365:27;;;;;;;;;;;;;;;:36;;;;12433:7;12417:32;;12426:5;12417:32;;;12442:6;12417:32;;;;;;:::i;:::-;;;;;;;;12111:346;;;:::o;19206:3120::-;19320:1;19304:18;;:4;:18;;;19296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19397:1;19383:16;;:2;:16;;;19375:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19466:1;19456:6;:11;19452:93;;19484:28;19500:4;19506:2;19510:1;19484:15;:28::i;:::-;19527:7;;19452:93;19561:14;;;;;;;;;;;19557:1260;;;19604:7;:5;:7::i;:::-;19596:15;;:4;:15;;;;:32;;;;;19621:7;:5;:7::i;:::-;19615:13;;:2;:13;;;;19596:32;:52;;;;;19646:1;19632:16;;:2;:16;;;;19596:52;:77;;;;;19666:6;19652:21;;:2;:21;;;;19596:77;:90;;;;;19678:8;;;;;;;;;;;19677:9;19596:90;19592:1214;;;19736:12;19725:6;;19712:10;;:19;;;;:::i;:::-;19711:37;19707:183;;19828:2;19812:13;:18;;;;19868:2;19853:12;:17;;;;19707:183;19915:13;;;;;;;;;;;19910:142;;19961:15;:21;19977:4;19961:21;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;19986:15;:19;20002:2;19986:19;;;;;;;;;;;;;;;;;;;;;;;;;19961:44;19953:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;19910:142;20104:25;:31;20130:4;20104:31;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;;20140:17;:21;20158:2;20140:21;;;;;;;;;;;;;;;;;;;;;;;;;20139:22;20104:57;20100:691;;;20204:20;;20194:6;:30;;20186:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;20339:9;;20322:13;20332:2;20322:9;:13::i;:::-;20313:6;:22;;;;:::i;:::-;:35;;20305:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20100:691;;;20448:25;:29;20474:2;20448:29;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;;20482:17;:23;20500:4;20482:23;;;;;;;;;;;;;;;;;;;;;;;;;20481:24;20448:57;20444:347;;;20548:20;;20538:6;:30;;20530:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;20444:347;;;20658:17;:21;20676:2;20658:21;;;;;;;;;;;;;;;;;;;;;;;;;20653:138;;20738:9;;20721:13;20731:2;20721:9;:13::i;:::-;20712:6;:22;;;;:::i;:::-;:35;;20704:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20653:138;20444:347;20100:691;19592:1214;19557:1260;20829:28;20860:24;20878:4;20860:9;:24::i;:::-;20829:55;;20897:12;20936:18;;20912:20;:42;;20897:57;;20985:7;:22;;;;;20996:11;;;;;;;;;;;20985:22;:35;;;;;21012:8;;;;;;;;;;;21011:9;20985:35;:71;;;;;21025:25;:31;21051:4;21025:31;;;;;;;;;;;;;;;;;;;;;;;;;21024:32;20985:71;:97;;;;;21061:15;:21;21077:4;21061:21;;;;;;;;;;;;;;;;;;;;;;;;;21060:22;20985:97;:138;;;;;21104:15;:19;21120:2;21104:19;;;;;;;;;;;;;;;;;;;;;;;;;21103:20;20985:138;20967:460;;;21219:1;21192:10;:24;21203:12;21192:24;;;;;;;;;;;;:28;21188:228;;;21252:4;21241:8;;:15;;;;;;;;;;;;;;;;;;21277:10;:8;:10::i;:::-;21319:5;21308:8;;:16;;;;;;;;;;;;;;;;;;21399:1;21372:10;:24;21383:12;21372:24;;;;;;;;;;;;:28;;;;:::i;:::-;21345:10;:24;21356:12;21345:24;;;;;;;;;;;:55;;;;21188:228;20967:460;21439:12;21455:8;;;;;;;;;;;21454:9;21439:24;;21565:15;:21;21581:4;21565:21;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;21590:15;:19;21606:2;21590:19;;;;;;;;;;;;;;;;;;;;;;;;;21565:44;21561:92;;;21636:5;21626:15;;21561:92;21665:12;21770:7;21766:507;;;21822:25;:29;21848:2;21822:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;21871:1;21855:13;;:17;21822:50;21818:306;;;21900:34;21930:3;21900:25;21911:13;;21900:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;21893:41;;21818:306;;;21996:25;:31;22022:4;21996:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;22046:1;22031:12;;:16;21996:51;21992:132;;;22075:33;22104:3;22075:24;22086:12;;22075:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;22068:40;;21992:132;21818:306;22151:1;22144:4;:8;22140:91;;;22173:42;22189:4;22203;22210;22173:15;:42::i;:::-;22140:91;22257:4;22247:14;;;;;:::i;:::-;;;21766:507;22285:33;22301:4;22307:2;22311:6;22285:15;:33::i;:::-;19285:3041;;;;19206:3120;;;;:::o;22334:589::-;22460:21;22498:1;22484:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22460:40;;22529:4;22511;22516:1;22511:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22555:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22545:4;22550:1;22545:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;22590:62;22607:4;22622:15;22640:11;22590:8;:62::i;:::-;22691:15;:66;;;22772:11;22798:1;22842:4;22869;22889:15;22691:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22389:534;22334:589;:::o;7563:191::-;7637:16;7656:6;;;;;;;;;;;7637:25;;7682:8;7673:6;;:17;;;;;;;;;;;;;;;;;;7737:8;7706:40;;7727:8;7706:40;;;;;;;;;;;;7626:128;7563:191;:::o;18548:188::-;18665:5;18631:25;:31;18657:4;18631:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18722:5;18688:40;;18716:4;18688:40;;;;;;;;;;;;18548:188;;:::o;10398:699::-;10522:1;10504:20;;:6;:20;;;10496:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10606:1;10585:23;;:9;:23;;;10577:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10661:47;10682:6;10690:9;10701:6;10661:20;:47::i;:::-;10721:21;10745:9;:17;10755:6;10745:17;;;;;;;;;;;;;;;;10721:41;;10798:6;10781:13;:23;;10773:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10919:6;10903:13;:22;10883:9;:17;10893:6;10883:17;;;;;;;;;;;;;;;:42;;;;10971:6;10947:9;:20;10957:9;10947:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11012:9;10995:35;;11004:6;10995:35;;;11023:6;10995:35;;;;;;:::i;:::-;;;;;;;;11043:46;11063:6;11071:9;11082:6;11043:19;:46::i;:::-;10485:612;10398:699;;;:::o;22931:584::-;22970:23;22996:24;23014:4;22996:9;:24::i;:::-;22970:50;;23031:12;23079:1;23060:15;:20;23056:59;;23097:7;;;;23056:59;23149:13;;23131:15;:31;23127:95;;;23197:13;;23179:31;;23127:95;23285:26;23314:15;23285:44;;23342:36;23359:18;23342:16;:36::i;:::-;23391:16;23410:21;23391:40;;23465:15;;;;;;;;;;;23457:29;;23494:8;23457:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23444:63;;;;;22959:556;;;;22931:584;:::o;4544:98::-;4602:7;4633:1;4629;:5;;;;:::i;:::-;4622:12;;4544:98;;;;:::o;4650:::-;4708:7;4739:1;4735;:5;;;;:::i;:::-;4728:12;;4650:98;;;;:::o;12465:91::-;;;;:::o;12564:90::-;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:60::-;4144:3;4165:5;4158:12;;4116:60;;;:::o;4182:142::-;4232:9;4265:53;4283:34;4292:24;4310:5;4292:24;:::i;:::-;4283:34;:::i;:::-;4265:53;:::i;:::-;4252:66;;4182:142;;;:::o;4330:126::-;4380:9;4413:37;4444:5;4413:37;:::i;:::-;4400:50;;4330:126;;;:::o;4462:152::-;4538:9;4571:37;4602:5;4571:37;:::i;:::-;4558:50;;4462:152;;;:::o;4620:183::-;4733:63;4790:5;4733:63;:::i;:::-;4728:3;4721:76;4620:183;;:::o;4809:274::-;4928:4;4966:2;4955:9;4951:18;4943:26;;4979:97;5073:1;5062:9;5058:17;5049:6;4979:97;:::i;:::-;4809:274;;;;:::o;5089:118::-;5176:24;5194:5;5176:24;:::i;:::-;5171:3;5164:37;5089:118;;:::o;5213:222::-;5306:4;5344:2;5333:9;5329:18;5321:26;;5357:71;5425:1;5414:9;5410:17;5401:6;5357:71;:::i;:::-;5213:222;;;;:::o;5441:619::-;5518:6;5526;5534;5583:2;5571:9;5562:7;5558:23;5554:32;5551:119;;;5589:79;;:::i;:::-;5551:119;5709:1;5734:53;5779:7;5770:6;5759:9;5755:22;5734:53;:::i;:::-;5724:63;;5680:117;5836:2;5862:53;5907:7;5898:6;5887:9;5883:22;5862:53;:::i;:::-;5852:63;;5807:118;5964:2;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5935:118;5441:619;;;;;:::o;6066:117::-;6175:1;6172;6165:12;6189:180;6237:77;6234:1;6227:88;6334:4;6331:1;6324:15;6358:4;6355:1;6348:15;6375:281;6458:27;6480:4;6458:27;:::i;:::-;6450:6;6446:40;6588:6;6576:10;6573:22;6552:18;6540:10;6537:34;6534:62;6531:88;;;6599:18;;:::i;:::-;6531:88;6639:10;6635:2;6628:22;6418:238;6375:281;;:::o;6662:129::-;6696:6;6723:20;;:::i;:::-;6713:30;;6752:33;6780:4;6772:6;6752:33;:::i;:::-;6662:129;;;:::o;6797:311::-;6874:4;6964:18;6956:6;6953:30;6950:56;;;6986:18;;:::i;:::-;6950:56;7036:4;7028:6;7024:17;7016:25;;7096:4;7090;7086:15;7078:23;;6797:311;;;:::o;7114:117::-;7223:1;7220;7213:12;7254:710;7350:5;7375:81;7391:64;7448:6;7391:64;:::i;:::-;7375:81;:::i;:::-;7366:90;;7476:5;7505:6;7498:5;7491:21;7539:4;7532:5;7528:16;7521:23;;7592:4;7584:6;7580:17;7572:6;7568:30;7621:3;7613:6;7610:15;7607:122;;;7640:79;;:::i;:::-;7607:122;7755:6;7738:220;7772:6;7767:3;7764:15;7738:220;;;7847:3;7876:37;7909:3;7897:10;7876:37;:::i;:::-;7871:3;7864:50;7943:4;7938:3;7934:14;7927:21;;7814:144;7798:4;7793:3;7789:14;7782:21;;7738:220;;;7742:21;7356:608;;7254:710;;;;;:::o;7987:370::-;8058:5;8107:3;8100:4;8092:6;8088:17;8084:27;8074:122;;8115:79;;:::i;:::-;8074:122;8232:6;8219:20;8257:94;8347:3;8339:6;8332:4;8324:6;8320:17;8257:94;:::i;:::-;8248:103;;8064:293;7987:370;;;;:::o;8363:539::-;8447:6;8496:2;8484:9;8475:7;8471:23;8467:32;8464:119;;;8502:79;;:::i;:::-;8464:119;8650:1;8639:9;8635:17;8622:31;8680:18;8672:6;8669:30;8666:117;;;8702:79;;:::i;:::-;8666:117;8807:78;8877:7;8868:6;8857:9;8853:22;8807:78;:::i;:::-;8797:88;;8593:302;8363:539;;;;:::o;8908:118::-;8995:24;9013:5;8995:24;:::i;:::-;8990:3;8983:37;8908:118;;:::o;9032:222::-;9125:4;9163:2;9152:9;9148:18;9140:26;;9176:71;9244:1;9233:9;9229:17;9220:6;9176:71;:::i;:::-;9032:222;;;;:::o;9260:116::-;9330:21;9345:5;9330:21;:::i;:::-;9323:5;9320:32;9310:60;;9366:1;9363;9356:12;9310:60;9260:116;:::o;9382:133::-;9425:5;9463:6;9450:20;9441:29;;9479:30;9503:5;9479:30;:::i;:::-;9382:133;;;;:::o;9521:468::-;9586:6;9594;9643:2;9631:9;9622:7;9618:23;9614:32;9611:119;;;9649:79;;:::i;:::-;9611:119;9769:1;9794:53;9839:7;9830:6;9819:9;9815:22;9794:53;:::i;:::-;9784:63;;9740:117;9896:2;9922:50;9964:7;9955:6;9944:9;9940:22;9922:50;:::i;:::-;9912:60;;9867:115;9521:468;;;;;:::o;9995:474::-;10063:6;10071;10120:2;10108:9;10099:7;10095:23;10091:32;10088:119;;;10126:79;;:::i;:::-;10088:119;10246:1;10271:53;10316:7;10307:6;10296:9;10292:22;10271:53;:::i;:::-;10261:63;;10217:117;10373:2;10399:53;10444:7;10435:6;10424:9;10420:22;10399:53;:::i;:::-;10389:63;;10344:118;9995:474;;;;;:::o;10475:86::-;10510:7;10550:4;10543:5;10539:16;10528:27;;10475:86;;;:::o;10567:112::-;10650:22;10666:5;10650:22;:::i;:::-;10645:3;10638:35;10567:112;;:::o;10685:214::-;10774:4;10812:2;10801:9;10797:18;10789:26;;10825:67;10889:1;10878:9;10874:17;10865:6;10825:67;:::i;:::-;10685:214;;;;:::o;10905:323::-;10961:6;11010:2;10998:9;10989:7;10985:23;10981:32;10978:119;;;11016:79;;:::i;:::-;10978:119;11136:1;11161:50;11203:7;11194:6;11183:9;11179:22;11161:50;:::i;:::-;11151:60;;11107:114;10905:323;;;;:::o;11234:474::-;11302:6;11310;11359:2;11347:9;11338:7;11334:23;11330:32;11327:119;;;11365:79;;:::i;:::-;11327:119;11485:1;11510:53;11555:7;11546:6;11535:9;11531:22;11510:53;:::i;:::-;11500:63;;11456:117;11612:2;11638:53;11683:7;11674:6;11663:9;11659:22;11638:53;:::i;:::-;11628:63;;11583:118;11234:474;;;;;:::o;11714:180::-;11762:77;11759:1;11752:88;11859:4;11856:1;11849:15;11883:4;11880:1;11873:15;11900:320;11944:6;11981:1;11975:4;11971:12;11961:22;;12028:1;12022:4;12018:12;12049:18;12039:81;;12105:4;12097:6;12093:17;12083:27;;12039:81;12167:2;12159:6;12156:14;12136:18;12133:38;12130:84;;12186:18;;:::i;:::-;12130:84;11951:269;11900:320;;;:::o;12226:182::-;12366:34;12362:1;12354:6;12350:14;12343:58;12226:182;:::o;12414:366::-;12556:3;12577:67;12641:2;12636:3;12577:67;:::i;:::-;12570:74;;12653:93;12742:3;12653:93;:::i;:::-;12771:2;12766:3;12762:12;12755:19;;12414:366;;;:::o;12786:419::-;12952:4;12990:2;12979:9;12975:18;12967:26;;13039:9;13033:4;13029:20;13025:1;13014:9;13010:17;13003:47;13067:131;13193:4;13067:131;:::i;:::-;13059:139;;12786:419;;;:::o;13211:180::-;13259:77;13256:1;13249:88;13356:4;13353:1;13346:15;13380:4;13377:1;13370:15;13397:410;13437:7;13460:20;13478:1;13460:20;:::i;:::-;13455:25;;13494:20;13512:1;13494:20;:::i;:::-;13489:25;;13549:1;13546;13542:9;13571:30;13589:11;13571:30;:::i;:::-;13560:41;;13750:1;13741:7;13737:15;13734:1;13731:22;13711:1;13704:9;13684:83;13661:139;;13780:18;;:::i;:::-;13661:139;13445:362;13397:410;;;;:::o;13813:180::-;13861:77;13858:1;13851:88;13958:4;13955:1;13948:15;13982:4;13979:1;13972:15;13999:185;14039:1;14056:20;14074:1;14056:20;:::i;:::-;14051:25;;14090:20;14108:1;14090:20;:::i;:::-;14085:25;;14129:1;14119:35;;14134:18;;:::i;:::-;14119:35;14176:1;14173;14169:9;14164:14;;13999:185;;;;:::o;14190:234::-;14330:34;14326:1;14318:6;14314:14;14307:58;14399:17;14394:2;14386:6;14382:15;14375:42;14190:234;:::o;14430:366::-;14572:3;14593:67;14657:2;14652:3;14593:67;:::i;:::-;14586:74;;14669:93;14758:3;14669:93;:::i;:::-;14787:2;14782:3;14778:12;14771:19;;14430:366;;;:::o;14802:419::-;14968:4;15006:2;14995:9;14991:18;14983:26;;15055:9;15049:4;15045:20;15041:1;15030:9;15026:17;15019:47;15083:131;15209:4;15083:131;:::i;:::-;15075:139;;14802:419;;;:::o;15227:227::-;15367:34;15363:1;15355:6;15351:14;15344:58;15436:10;15431:2;15423:6;15419:15;15412:35;15227:227;:::o;15460:366::-;15602:3;15623:67;15687:2;15682:3;15623:67;:::i;:::-;15616:74;;15699:93;15788:3;15699:93;:::i;:::-;15817:2;15812:3;15808:12;15801:19;;15460:366;;;:::o;15832:419::-;15998:4;16036:2;16025:9;16021:18;16013:26;;16085:9;16079:4;16075:20;16071:1;16060:9;16056:17;16049:47;16113:131;16239:4;16113:131;:::i;:::-;16105:139;;15832:419;;;:::o;16257:85::-;16302:7;16331:5;16320:16;;16257:85;;;:::o;16348:158::-;16406:9;16439:61;16457:42;16466:32;16492:5;16466:32;:::i;:::-;16457:42;:::i;:::-;16439:61;:::i;:::-;16426:74;;16348:158;;;:::o;16512:147::-;16607:45;16646:5;16607:45;:::i;:::-;16602:3;16595:58;16512:147;;:::o;16665:807::-;16914:4;16952:3;16941:9;16937:19;16929:27;;16966:71;17034:1;17023:9;17019:17;17010:6;16966:71;:::i;:::-;17047:72;17115:2;17104:9;17100:18;17091:6;17047:72;:::i;:::-;17129:80;17205:2;17194:9;17190:18;17181:6;17129:80;:::i;:::-;17219;17295:2;17284:9;17280:18;17271:6;17219:80;:::i;:::-;17309:73;17377:3;17366:9;17362:19;17353:6;17309:73;:::i;:::-;17392;17460:3;17449:9;17445:19;17436:6;17392:73;:::i;:::-;16665:807;;;;;;;;;:::o;17478:143::-;17535:5;17566:6;17560:13;17551:22;;17582:33;17609:5;17582:33;:::i;:::-;17478:143;;;;:::o;17627:663::-;17715:6;17723;17731;17780:2;17768:9;17759:7;17755:23;17751:32;17748:119;;;17786:79;;:::i;:::-;17748:119;17906:1;17931:64;17987:7;17978:6;17967:9;17963:22;17931:64;:::i;:::-;17921:74;;17877:128;18044:2;18070:64;18126:7;18117:6;18106:9;18102:22;18070:64;:::i;:::-;18060:74;;18015:129;18183:2;18209:64;18265:7;18256:6;18245:9;18241:22;18209:64;:::i;:::-;18199:74;;18154:129;17627:663;;;;;:::o;18296:332::-;18417:4;18455:2;18444:9;18440:18;18432:26;;18468:71;18536:1;18525:9;18521:17;18512:6;18468:71;:::i;:::-;18549:72;18617:2;18606:9;18602:18;18593:6;18549:72;:::i;:::-;18296:332;;;;;:::o;18634:137::-;18688:5;18719:6;18713:13;18704:22;;18735:30;18759:5;18735:30;:::i;:::-;18634:137;;;;:::o;18777:345::-;18844:6;18893:2;18881:9;18872:7;18868:23;18864:32;18861:119;;;18899:79;;:::i;:::-;18861:119;19019:1;19044:61;19097:7;19088:6;19077:9;19073:22;19044:61;:::i;:::-;19034:71;;18990:125;18777:345;;;;:::o;19128:180::-;19176:77;19173:1;19166:88;19273:4;19270:1;19263:15;19297:4;19294:1;19287:15;19314:166;19454:18;19450:1;19442:6;19438:14;19431:42;19314:166;:::o;19486:366::-;19628:3;19649:67;19713:2;19708:3;19649:67;:::i;:::-;19642:74;;19725:93;19814:3;19725:93;:::i;:::-;19843:2;19838:3;19834:12;19827:19;;19486:366;;;:::o;19858:419::-;20024:4;20062:2;20051:9;20047:18;20039:26;;20111:9;20105:4;20101:20;20097:1;20086:9;20082:17;20075:47;20139:131;20265:4;20139:131;:::i;:::-;20131:139;;19858:419;;;:::o;20283:162::-;20423:14;20419:1;20411:6;20407:14;20400:38;20283:162;:::o;20451:366::-;20593:3;20614:67;20678:2;20673:3;20614:67;:::i;:::-;20607:74;;20690:93;20779:3;20690:93;:::i;:::-;20808:2;20803:3;20799:12;20792:19;;20451:366;;;:::o;20823:419::-;20989:4;21027:2;21016:9;21012:18;21004:26;;21076:9;21070:4;21066:20;21062:1;21051:9;21047:17;21040:47;21104:131;21230:4;21104:131;:::i;:::-;21096:139;;20823:419;;;:::o;21248:191::-;21288:3;21307:20;21325:1;21307:20;:::i;:::-;21302:25;;21341:20;21359:1;21341:20;:::i;:::-;21336:25;;21384:1;21381;21377:9;21370:16;;21405:3;21402:1;21399:10;21396:36;;;21412:18;;:::i;:::-;21396:36;21248:191;;;;:::o;21445:244::-;21585:34;21581:1;21573:6;21569:14;21562:58;21654:27;21649:2;21641:6;21637:15;21630:52;21445:244;:::o;21695:366::-;21837:3;21858:67;21922:2;21917:3;21858:67;:::i;:::-;21851:74;;21934:93;22023:3;21934:93;:::i;:::-;22052:2;22047:3;22043:12;22036:19;;21695:366;;;:::o;22067:419::-;22233:4;22271:2;22260:9;22256:18;22248:26;;22320:9;22314:4;22310:20;22306:1;22295:9;22291:17;22284:47;22348:131;22474:4;22348:131;:::i;:::-;22340:139;;22067:419;;;:::o;22492:224::-;22632:34;22628:1;22620:6;22616:14;22609:58;22701:7;22696:2;22688:6;22684:15;22677:32;22492:224;:::o;22722:366::-;22864:3;22885:67;22949:2;22944:3;22885:67;:::i;:::-;22878:74;;22961:93;23050:3;22961:93;:::i;:::-;23079:2;23074:3;23070:12;23063:19;;22722:366;;;:::o;23094:419::-;23260:4;23298:2;23287:9;23283:18;23275:26;;23347:9;23341:4;23337:20;23333:1;23322:9;23318:17;23311:47;23375:131;23501:4;23375:131;:::i;:::-;23367:139;;23094:419;;;:::o;23519:223::-;23659:34;23655:1;23647:6;23643:14;23636:58;23728:6;23723:2;23715:6;23711:15;23704:31;23519:223;:::o;23748:366::-;23890:3;23911:67;23975:2;23970:3;23911:67;:::i;:::-;23904:74;;23987:93;24076:3;23987:93;:::i;:::-;24105:2;24100:3;24096:12;24089:19;;23748:366;;;:::o;24120:419::-;24286:4;24324:2;24313:9;24309:18;24301:26;;24373:9;24367:4;24363:20;24359:1;24348:9;24344:17;24337:47;24401:131;24527:4;24401:131;:::i;:::-;24393:139;;24120:419;;;:::o;24545:147::-;24646:11;24683:3;24668:18;;24545:147;;;;:::o;24698:114::-;;:::o;24818:398::-;24977:3;24998:83;25079:1;25074:3;24998:83;:::i;:::-;24991:90;;25090:93;25179:3;25090:93;:::i;:::-;25208:1;25203:3;25199:11;25192:18;;24818:398;;;:::o;25222:379::-;25406:3;25428:147;25571:3;25428:147;:::i;:::-;25421:154;;25592:3;25585:10;;25222:379;;;:::o;25607:225::-;25747:34;25743:1;25735:6;25731:14;25724:58;25816:8;25811:2;25803:6;25799:15;25792:33;25607:225;:::o;25838:366::-;25980:3;26001:67;26065:2;26060:3;26001:67;:::i;:::-;25994:74;;26077:93;26166:3;26077:93;:::i;:::-;26195:2;26190:3;26186:12;26179:19;;25838:366;;;:::o;26210:419::-;26376:4;26414:2;26403:9;26399:18;26391:26;;26463:9;26457:4;26453:20;26449:1;26438:9;26434:17;26427:47;26491:131;26617:4;26491:131;:::i;:::-;26483:139;;26210:419;;;:::o;26635:223::-;26775:34;26771:1;26763:6;26759:14;26752:58;26844:6;26839:2;26831:6;26827:15;26820:31;26635:223;:::o;26864:366::-;27006:3;27027:67;27091:2;27086:3;27027:67;:::i;:::-;27020:74;;27103:93;27192:3;27103:93;:::i;:::-;27221:2;27216:3;27212:12;27205:19;;26864:366;;;:::o;27236:419::-;27402:4;27440:2;27429:9;27425:18;27417:26;;27489:9;27483:4;27479:20;27475:1;27464:9;27460:17;27453:47;27517:131;27643:4;27517:131;:::i;:::-;27509:139;;27236:419;;;:::o;27661:221::-;27801:34;27797:1;27789:6;27785:14;27778:58;27870:4;27865:2;27857:6;27853:15;27846:29;27661:221;:::o;27888:366::-;28030:3;28051:67;28115:2;28110:3;28051:67;:::i;:::-;28044:74;;28127:93;28216:3;28127:93;:::i;:::-;28245:2;28240:3;28236:12;28229:19;;27888:366;;;:::o;28260:419::-;28426:4;28464:2;28453:9;28449:18;28441:26;;28513:9;28507:4;28503:20;28499:1;28488:9;28484:17;28477:47;28541:131;28667:4;28541:131;:::i;:::-;28533:139;;28260:419;;;:::o;28685:224::-;28825:34;28821:1;28813:6;28809:14;28802:58;28894:7;28889:2;28881:6;28877:15;28870:32;28685:224;:::o;28915:366::-;29057:3;29078:67;29142:2;29137:3;29078:67;:::i;:::-;29071:74;;29154:93;29243:3;29154:93;:::i;:::-;29272:2;29267:3;29263:12;29256:19;;28915:366;;;:::o;29287:419::-;29453:4;29491:2;29480:9;29476:18;29468:26;;29540:9;29534:4;29530:20;29526:1;29515:9;29511:17;29504:47;29568:131;29694:4;29568:131;:::i;:::-;29560:139;;29287:419;;;:::o;29712:222::-;29852:34;29848:1;29840:6;29836:14;29829:58;29921:5;29916:2;29908:6;29904:15;29897:30;29712:222;:::o;29940:366::-;30082:3;30103:67;30167:2;30162:3;30103:67;:::i;:::-;30096:74;;30179:93;30268:3;30179:93;:::i;:::-;30297:2;30292:3;30288:12;30281:19;;29940:366;;;:::o;30312:419::-;30478:4;30516:2;30505:9;30501:18;30493:26;;30565:9;30559:4;30555:20;30551:1;30540:9;30536:17;30529:47;30593:131;30719:4;30593:131;:::i;:::-;30585:139;;30312:419;;;:::o;30737:172::-;30877:24;30873:1;30865:6;30861:14;30854:48;30737:172;:::o;30915:366::-;31057:3;31078:67;31142:2;31137:3;31078:67;:::i;:::-;31071:74;;31154:93;31243:3;31154:93;:::i;:::-;31272:2;31267:3;31263:12;31256:19;;30915:366;;;:::o;31287:419::-;31453:4;31491:2;31480:9;31476:18;31468:26;;31540:9;31534:4;31530:20;31526:1;31515:9;31511:17;31504:47;31568:131;31694:4;31568:131;:::i;:::-;31560:139;;31287:419;;;:::o;31712:240::-;31852:34;31848:1;31840:6;31836:14;31829:58;31921:23;31916:2;31908:6;31904:15;31897:48;31712:240;:::o;31958:366::-;32100:3;32121:67;32185:2;32180:3;32121:67;:::i;:::-;32114:74;;32197:93;32286:3;32197:93;:::i;:::-;32315:2;32310:3;32306:12;32299:19;;31958:366;;;:::o;32330:419::-;32496:4;32534:2;32523:9;32519:18;32511:26;;32583:9;32577:4;32573:20;32569:1;32558:9;32554:17;32547:47;32611:131;32737:4;32611:131;:::i;:::-;32603:139;;32330:419;;;:::o;32755:169::-;32895:21;32891:1;32883:6;32879:14;32872:45;32755:169;:::o;32930:366::-;33072:3;33093:67;33157:2;33152:3;33093:67;:::i;:::-;33086:74;;33169:93;33258:3;33169:93;:::i;:::-;33287:2;33282:3;33278:12;33271:19;;32930:366;;;:::o;33302:419::-;33468:4;33506:2;33495:9;33491:18;33483:26;;33555:9;33549:4;33545:20;33541:1;33530:9;33526:17;33519:47;33583:131;33709:4;33583:131;:::i;:::-;33575:139;;33302:419;;;:::o;33727:241::-;33867:34;33863:1;33855:6;33851:14;33844:58;33936:24;33931:2;33923:6;33919:15;33912:49;33727:241;:::o;33974:366::-;34116:3;34137:67;34201:2;34196:3;34137:67;:::i;:::-;34130:74;;34213:93;34302:3;34213:93;:::i;:::-;34331:2;34326:3;34322:12;34315:19;;33974:366;;;:::o;34346:419::-;34512:4;34550:2;34539:9;34535:18;34527:26;;34599:9;34593:4;34589:20;34585:1;34574:9;34570:17;34563:47;34627:131;34753:4;34627:131;:::i;:::-;34619:139;;34346:419;;;:::o;34771:194::-;34811:4;34831:20;34849:1;34831:20;:::i;:::-;34826:25;;34865:20;34883:1;34865:20;:::i;:::-;34860:25;;34909:1;34906;34902:9;34894:17;;34933:1;34927:4;34924:11;34921:37;;;34938:18;;:::i;:::-;34921:37;34771:194;;;;:::o;34971:143::-;35028:5;35059:6;35053:13;35044:22;;35075:33;35102:5;35075:33;:::i;:::-;34971:143;;;;:::o;35120:351::-;35190:6;35239:2;35227:9;35218:7;35214:23;35210:32;35207:119;;;35245:79;;:::i;:::-;35207:119;35365:1;35390:64;35446:7;35437:6;35426:9;35422:22;35390:64;:::i;:::-;35380:74;;35336:128;35120:351;;;;:::o;35477:114::-;35544:6;35578:5;35572:12;35562:22;;35477:114;;;:::o;35597:184::-;35696:11;35730:6;35725:3;35718:19;35770:4;35765:3;35761:14;35746:29;;35597:184;;;;:::o;35787:132::-;35854:4;35877:3;35869:11;;35907:4;35902:3;35898:14;35890:22;;35787:132;;;:::o;35925:108::-;36002:24;36020:5;36002:24;:::i;:::-;35997:3;35990:37;35925:108;;:::o;36039:179::-;36108:10;36129:46;36171:3;36163:6;36129:46;:::i;:::-;36207:4;36202:3;36198:14;36184:28;;36039:179;;;;:::o;36224:113::-;36294:4;36326;36321:3;36317:14;36309:22;;36224:113;;;:::o;36373:732::-;36492:3;36521:54;36569:5;36521:54;:::i;:::-;36591:86;36670:6;36665:3;36591:86;:::i;:::-;36584:93;;36701:56;36751:5;36701:56;:::i;:::-;36780:7;36811:1;36796:284;36821:6;36818:1;36815:13;36796:284;;;36897:6;36891:13;36924:63;36983:3;36968:13;36924:63;:::i;:::-;36917:70;;37010:60;37063:6;37010:60;:::i;:::-;37000:70;;36856:224;36843:1;36840;36836:9;36831:14;;36796:284;;;36800:14;37096:3;37089:10;;36497:608;;;36373:732;;;;:::o;37111:831::-;37374:4;37412:3;37401:9;37397:19;37389:27;;37426:71;37494:1;37483:9;37479:17;37470:6;37426:71;:::i;:::-;37507:80;37583:2;37572:9;37568:18;37559:6;37507:80;:::i;:::-;37634:9;37628:4;37624:20;37619:2;37608:9;37604:18;37597:48;37662:108;37765:4;37756:6;37662:108;:::i;:::-;37654:116;;37780:72;37848:2;37837:9;37833:18;37824:6;37780:72;:::i;:::-;37862:73;37930:3;37919:9;37915:19;37906:6;37862:73;:::i;:::-;37111:831;;;;;;;;:::o;37948:225::-;38088:34;38084:1;38076:6;38072:14;38065:58;38157:8;38152:2;38144:6;38140:15;38133:33;37948:225;:::o;38179:366::-;38321:3;38342:67;38406:2;38401:3;38342:67;:::i;:::-;38335:74;;38418:93;38507:3;38418:93;:::i;:::-;38536:2;38531:3;38527:12;38520:19;;38179:366;;;:::o;38551:419::-;38717:4;38755:2;38744:9;38740:18;38732:26;;38804:9;38798:4;38794:20;38790:1;38779:9;38775:17;38768:47;38832:131;38958:4;38832:131;:::i;:::-;38824:139;;38551:419;;;:::o

Swarm Source

ipfs://d71b8b3bff33cb902513e22892c802a9d5d9e3b14bddb4ea730ec91b4e378543

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.