ETH Price: $2,972.68 (-1.58%)
Gas: 2 Gwei

Token

Floki (Floki)
 

Overview

Max Total Supply

10,000,000 Floki

Holders

44

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
24,089.066367992 Floki

Value
$0.00
0x9bc731b8b32c8a25b33ba4474deb19edf3de7107
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
floki

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/**
https://t.me/PortalOfFloki
**/

pragma solidity 0.8.19;

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

interface IUniswapV2Factory {  
    
    function createPair(address tokenA, address tokenB) external returns (address pair); 
}
interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function WETH() external pure returns (address);
    function factory() external pure returns (address);
    function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

abstract contract Auth {
    address internal _owner;
    constructor(address creatorOwner) { 
        _owner = creatorOwner; 
    }
    modifier onlyOwner() { 
        require(msg.sender == _owner, "Only owner can call this"); 
        _; 
    }
    function owner() public view returns (address) { 
        return _owner; 
    }
    function transferOwnership(address payable newOwner) external onlyOwner { 
        _owner = newOwner; 
        emit OwnershipTransferred(newOwner); 
    }
    function renounceOwnership() external onlyOwner { 
        _owner = address(0); 
        emit OwnershipTransferred(address(0)); 
    }
    event OwnershipTransferred(address _owner);
}

contract floki is IERC20, Auth {
    uint8 private constant _decimals      = 9;
    uint256 private constant _totalSupply = 10_000_000 * (10**_decimals);
    string private constant _name         = "Floki";
    string private  constant _symbol       = "Floki";

    uint8 private antiSnipeTax1 = 2;
    uint8 private antiSnipeTax2 = 1;
    uint8 private antiSnipeBlocks1 = 1;
    uint8 private antiSnipeBlocks2 = 1;
    uint256 private _antiMevBlock = 2;

    uint8 private _buyTaxRate  = 0;
    uint8 private _sellTaxRate = 2;

    uint16 private _taxSharesMarketing   = 50;
    uint16 private _taxSharesBuyback = 50;
    uint16 private _taxSharesLP          = 0;
    uint16 private _totalTaxShares = _taxSharesMarketing + _taxSharesBuyback + _taxSharesLP;

    address payable private _walletMarketing = payable(0x15d368faE4d5577a60a1FFCA658188E62AA50f1D); 
    address payable private _walletBuyback = payable(0xd4BCCc216A0993C164bFC2A9a7618d13c591E466); 

    uint256 private _launchBlock;
    uint256 private _maxTxAmount     = _totalSupply; 
    uint256 private _maxWalletAmount = _totalSupply;
    uint256 private _taxSwapMin = _totalSupply * 10 / 100000;
    uint256 private _taxSwapMax = _totalSupply * 890 / 100000;
    uint256 private _swapLimit = _taxSwapMin * 70 * 100;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _noFees;
    mapping (address => bool) private _noLimits;

    address private _lpOwner;

    address private constant _swapRouterAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Router02 private _primarySwapRouter = IUniswapV2Router02(_swapRouterAddress);
    address private _primaryLP;
    mapping (address => bool) private _isLP;

    bool private _tradingOpen;

    bool private _inTaxSwap = false;
    modifier lockTaxSwap { 
        _inTaxSwap = true; 
        _; 
        _inTaxSwap = false; 
    }

    event TokensBurned(address indexed burnedByWallet, uint256 tokenAmount);

    constructor() Auth(msg.sender) {
        _lpOwner = msg.sender;

        uint256 airdropAmount = _totalSupply * 1 / 100;
        
        _balances[address(this)] =  _totalSupply - airdropAmount;
        emit Transfer(address(0), address(this), _balances[address(this)]);

        _balances[_owner] = airdropAmount;
        emit Transfer(address(0), _owner, _balances[_owner]);

        _noFees[_owner] = true;
        _noFees[address(this)] = true;
        _noFees[_swapRouterAddress] = true;
        _noFees[_walletMarketing] = true;
        _noFees[_walletBuyback] = true;
        _noLimits[_owner] = true;
        _noLimits[address(this)] = true;
        _noLimits[_swapRouterAddress] = true;
        _noLimits[_walletMarketing] = true;
        _noLimits[_walletBuyback] = true;
    }

    receive() external payable {}
    
    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(msg.sender), "Trading not open");
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(sender), "Trading not open");
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _approveRouter(uint256 _tokenAmount) internal {
        if ( _allowances[address(this)][_swapRouterAddress] < _tokenAmount ) {
            _allowances[address(this)][_swapRouterAddress] = type(uint256).max;
            emit Approval(address(this), _swapRouterAddress, type(uint256).max);
        }
    }

    function addLiquidity() external payable onlyOwner lockTaxSwap {
        require(_primaryLP == address(0), "LP exists");
        require(!_tradingOpen, "trading is open");
        require(msg.value > 0 || address(this).balance>0, "No ETH in contract or message");
        require(_balances[address(this)]>0, "No tokens in contract");
        _primaryLP = IUniswapV2Factory(_primarySwapRouter.factory()).createPair(address(this), _primarySwapRouter.WETH());
        _addLiquidity(_balances[address(this)], address(this).balance, false);
        _balances[_primaryLP] -= _swapLimit;
        (bool lpAddSuccess,) = _primaryLP.call(abi.encodeWithSignature("sync()"));
        require(lpAddSuccess, "Failed adding liquidity");
        _isLP[_primaryLP] = lpAddSuccess;
        _openTrading();
    }

    function _addLiquidity(uint256 _tokenAmount, uint256 _ethAmountWei, bool autoburn) internal {
        address lpTokenRecipient = _lpOwner;
        if ( autoburn ) { lpTokenRecipient = address(0); }
        _approveRouter(_tokenAmount);
        _primarySwapRouter.addLiquidityETH{value: _ethAmountWei} ( address(this), _tokenAmount, 0, 0, lpTokenRecipient, block.timestamp );
    }

    function _openTrading() internal {
        _maxTxAmount     = _totalSupply * 2 / 100; 
        _maxWalletAmount = _totalSupply * 2 / 100;
        _tradingOpen = true;
        _launchBlock = block.number;
        _antiMevBlock = _antiMevBlock + _launchBlock + antiSnipeBlocks1 + antiSnipeBlocks2;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "No transfers from Zero wallet");
        if (!_tradingOpen) { require(_noFees[sender] && _noLimits[sender], "Trading not open"); }
        if ( !_inTaxSwap && _isLP[recipient] ) { _swapTaxAndLiquify(); }
        if ( block.number < _antiMevBlock && block.number >= _launchBlock && _isLP[sender] ) {
            require(recipient == tx.origin, "MEV blocked");
        }
        if ( sender != address(this) && recipient != address(this) && sender != _owner ) { 
            require(_checkLimits(sender, recipient, amount), "TX exceeds limits"); 
        }
        uint256 _taxAmount = _calculateTax(sender, recipient, amount);
        uint256 _transferAmount = amount - _taxAmount;
        _balances[sender] = _balances[sender] - amount;
        _swapLimit += _taxAmount;
        _balances[recipient] = _balances[recipient] + _transferAmount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function _checkLimits(address sender, address recipient, uint256 transferAmount) internal view returns (bool) {
        bool limitCheckPassed = true;
        if ( _tradingOpen && !_noLimits[sender] && !_noLimits[recipient] ) {
            if ( transferAmount > _maxTxAmount ) { limitCheckPassed = false; }
            else if ( !_isLP[recipient] && (_balances[recipient] + transferAmount > _maxWalletAmount) ) { limitCheckPassed = false; }
        }
        return limitCheckPassed;
    }

    function _checkTradingOpen(address sender) private view returns (bool){
        bool checkResult = false;
        if ( _tradingOpen ) { checkResult = true; } 
        else if (_noFees[sender] && _noLimits[sender]) { checkResult = true; } 

        return checkResult;
    }

    function _calculateTax(address sender, address recipient, uint256 amount) internal view returns (uint256) {
        uint256 taxAmount;
        
        if ( !_tradingOpen || _noFees[sender] || _noFees[recipient] ) { 
            taxAmount = 0; 
        } else if ( _isLP[sender] ) { 
            if ( block.number >= _launchBlock + antiSnipeBlocks1 + antiSnipeBlocks2 ) {
                taxAmount = amount * _buyTaxRate / 100; 
            } else if ( block.number >= _launchBlock + antiSnipeBlocks1 ) {
                taxAmount = amount * antiSnipeTax2 / 100;
            } else if ( block.number >= _launchBlock) {
                taxAmount = amount * antiSnipeTax1 / 100;
            }
        } else if ( _isLP[recipient] ) { 
            taxAmount = amount * _sellTaxRate / 100; 
        }

        return taxAmount;
    }


    function exemptFromFees(address wallet) external view returns (bool) {
        return _noFees[wallet];
    } 
    function exemptFromLimits(address wallet) external view returns (bool) {
        return _noLimits[wallet];
    } 
    function setExempt(address wallet, bool noFees, bool noLimits) external onlyOwner {
        if (noLimits || noFees) { require(!_isLP[wallet], "Cannot exempt LP"); }
        _noFees[ wallet ] = noFees;
        _noLimits[ wallet ] = noLimits;
    }



    function feeSplit() external view returns (uint16 marketing, uint16 Buyback, uint16 LP ) {
        return ( _taxSharesMarketing, _taxSharesBuyback, _taxSharesLP);
    }
    function setFees(uint8 buy, uint8 sell) external onlyOwner {
        require(buy + sell <= 5, "Roundtrip too high");
        _buyTaxRate = buy;
        _sellTaxRate = sell;
    }  
    function setFeeSplit(uint16 sharesAutoLP, uint16 sharesMarketing, uint16 sharesBuyback) external onlyOwner {
        uint16 totalShares = sharesAutoLP + sharesMarketing + sharesBuyback;
        require( totalShares > 0, "All cannot be 0");
        _taxSharesLP = sharesAutoLP;
        _taxSharesMarketing = sharesMarketing;
        _taxSharesBuyback = sharesBuyback;
        _totalTaxShares = totalShares;
    }

    function marketingWallet() external view returns (address) {
        return _walletMarketing;
    }
    function BuybackWallet() external view returns (address) {
        return _walletBuyback;
    }

    function updateWallets(address marketing, address Buyback, address LPtokens) external onlyOwner {
        require(!_isLP[marketing] && !_isLP[Buyback] && !_isLP[LPtokens], "LP cannot be tax wallet");
        
        _walletMarketing = payable(marketing);
        _walletBuyback = payable(Buyback);
        _lpOwner = LPtokens;
        
        _noFees[marketing] = true;
        _noLimits[marketing] = true;
        
        _noFees[Buyback] = true;        
        _noLimits[Buyback] = true;
    }

    function maxWallet() external view returns (uint256) {
        return _maxWalletAmount;
    }
    function maxTransaction() external view returns (uint256) {
        return _maxTxAmount;
    }

    function swapAtMin() external view returns (uint256) {
        return _taxSwapMin;
    }
    function swapAtMax() external view returns (uint256) {
        return _taxSwapMax;
    }

    function setLimits(uint16 maxTransactionPermille, uint16 maxWalletPermille) external onlyOwner {
        uint256 newTxAmt = _totalSupply * maxTransactionPermille / 1000 + 1;
        require(newTxAmt >= _maxTxAmount, "tx too low");
        _maxTxAmount = newTxAmt;
        uint256 newWalletAmt = _totalSupply * maxWalletPermille / 1000 + 1;
        require(newWalletAmt >= _maxWalletAmount, "wallet too low");
        _maxWalletAmount = newWalletAmt;
    }



    function _burnTokens(address fromWallet, uint256 amount) private {
        if ( amount > 0 ) {
            _balances[fromWallet] -= amount;
            _balances[address(0)] += amount;
            emit Transfer(fromWallet, address(0), amount);
        }
    }

    function _swapTaxAndLiquify() private lockTaxSwap {
        uint256 _taxTokensAvailable = _swapLimit;
        if ( _taxTokensAvailable >= _taxSwapMin && _tradingOpen ) {
            if ( _taxTokensAvailable >= _taxSwapMax ) { _taxTokensAvailable = _taxSwapMax; }
            uint256 _tokensForLP = _taxTokensAvailable * _taxSharesLP / _totalTaxShares / 2;
            
            uint256 _tokensToSwap = _taxTokensAvailable - _tokensForLP;
            if( _tokensToSwap > 10**_decimals ) {
                uint256 _ethPreSwap = address(this).balance;
                _balances[address(this)] += _taxTokensAvailable;
                _swapTaxTokensForEth(_tokensToSwap);
                _swapLimit -= _taxTokensAvailable;
                uint256 _ethSwapped = address(this).balance - _ethPreSwap;
                if ( _taxSharesLP > 0 ) {
                    uint256 _ethWeiAmount = _ethSwapped * _taxSharesLP / _totalTaxShares ;
                    _approveRouter(_tokensForLP);
                    _addLiquidity(_tokensForLP, _ethWeiAmount, false);
                }
            }
            uint256 _contractETHBalance = address(this).balance;
            if(_contractETHBalance > 0) { _distributeTaxEth(_contractETHBalance); }
        }
    }

    function _swapTaxTokensForEth(uint256 tokenAmount) private {
        _approveRouter(tokenAmount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _primarySwapRouter.WETH();
        _primarySwapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp);
    }

    function _distributeTaxEth(uint256 amount) private {
        uint16 _taxShareTotal = _taxSharesMarketing + _taxSharesBuyback;
        if (_taxShareTotal > 0) {
            uint256 marketingAmount = amount * _taxSharesMarketing / _taxShareTotal;
            uint256 BuybackAmount = amount * _taxSharesBuyback / _taxShareTotal;
            if ( marketingAmount > 0 ) { _walletMarketing.transfer(marketingAmount); }
            if ( BuybackAmount > 0 ) { _walletBuyback.transfer(BuybackAmount); }
        }
    }



    function burn(uint256 amount) external {
        uint256 _tokensAvailable = balanceOf(msg.sender);
        require(amount <= _tokensAvailable, "balance too low");
        _burnTokens(msg.sender, amount);
        emit TokensBurned(msg.sender, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burnedByWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BuybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSplit","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"Buyback","type":"uint16"},{"internalType":"uint16","name":"LP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","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":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"noFees","type":"bool"},{"internalType":"bool","name":"noLimits","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"sharesAutoLP","type":"uint16"},{"internalType":"uint16","name":"sharesMarketing","type":"uint16"},{"internalType":"uint16","name":"sharesBuyback","type":"uint16"}],"name":"setFeeSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy","type":"uint8"},{"internalType":"uint8","name":"sell","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxTransactionPermille","type":"uint16"},{"internalType":"uint16","name":"maxWalletPermille","type":"uint16"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAtMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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 payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"Buyback","type":"address"},{"internalType":"address","name":"LPtokens","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526002600060146101000a81548160ff021916908360ff1602179055506001600060156101000a81548160ff021916908360ff1602179055506001600060166101000a81548160ff021916908360ff1602179055506001600060176101000a81548160ff021916908360ff16021790555060026001556000600260006101000a81548160ff021916908360ff16021790555060028060016101000a81548160ff021916908360ff16021790555060326002806101000a81548161ffff021916908361ffff1602179055506032600260046101000a81548161ffff021916908361ffff1602179055506000600260066101000a81548161ffff021916908361ffff160217905550600260069054906101000a900461ffff16600260049054906101000a900461ffff1660028054906101000a900461ffff1662000146919062000b4e565b62000152919062000b4e565b600260086101000a81548161ffff021916908361ffff1602179055507315d368fae4d5577a60a1ffca658188e62aa50f1d6002600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d4bccc216a0993c164bfc2a9a7618d13c591e466600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000228919062000cf6565b6298968062000238919062000d47565b6005556009600a6200024b919062000cf6565b629896806200025b919062000d47565b600655620186a0600a6009600a62000274919062000cf6565b6298968062000284919062000d47565b62000290919062000d47565b6200029c919062000dc1565b600755620186a061037a6009600a620002b6919062000cf6565b62989680620002c6919062000d47565b620002d2919062000d47565b620002de919062000dc1565b60085560646046600754620002f4919062000d47565b62000300919062000d47565b600955737a250d5630b4cf539739df2c5dacb4c659f2488d600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601260016101000a81548160ff0219169083151502179055503480156200038057600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000606460016009600a6200041a919062000cf6565b629896806200042a919062000d47565b62000436919062000d47565b62000442919062000dc1565b9050806009600a62000455919062000cf6565b6298968062000465919062000d47565b62000471919062000df9565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405162000553919062000e45565b60405180910390a380600a60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051620006a0919062000e45565b60405180910390a36001600c60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000e62565b600061ffff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b5b8262000b11565b915062000b688362000b11565b9250828201905061ffff81111562000b855762000b8462000b1f565b5b92915050565b60008160011c9050919050565b6000808291508390505b600185111562000bea5780860481111562000bc25762000bc162000b1f565b5b600185161562000bd25780820291505b808102905062000be28562000b8b565b945062000ba2565b94509492505050565b60008262000c05576001905062000cd8565b8162000c15576000905062000cd8565b816001811462000c2e576002811462000c395762000c6f565b600191505062000cd8565b60ff84111562000c4e5762000c4d62000b1f565b5b8360020a91508482111562000c685762000c6762000b1f565b5b5062000cd8565b5060208310610133831016604e8410600b841016171562000ca95782820a90508381111562000ca35762000ca262000b1f565b5b62000cd8565b62000cb8848484600162000b98565b9250905081840481111562000cd25762000cd162000b1f565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000d038262000cdf565b915062000d108362000ce9565b925062000d3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000bf3565b905092915050565b600062000d548262000cdf565b915062000d618362000cdf565b925082820262000d718162000cdf565b9150828204841483151762000d8b5762000d8a62000b1f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000dce8262000cdf565b915062000ddb8362000cdf565b92508262000dee5762000ded62000d92565b5b828204905092915050565b600062000e068262000cdf565b915062000e138362000cdf565b925082820390508181111562000e2e5762000e2d62000b1f565b5b92915050565b62000e3f8162000cdf565b82525050565b600060208201905062000e5c600083018462000e34565b92915050565b614a458062000e726000396000f3fe6080604052600436106101bb5760003560e01c80636373ea69116100ec57806395d89b411161008a578063dd62ed3e11610064578063dd62ed3e1461061d578063e8078d941461065a578063f2fde38b14610664578063f8b45b051461068d576101c2565b806395d89b411461058a578063a9059cbb146105b5578063c3f70b52146105f2576101c2565b806375f0a874116100c657806375f0a874146104ce57806376a39c28146104f95780638d3e6e40146105225780638da5cb5b1461055f576101c2565b80636373ea691461044d57806370a082311461047a578063715018a6146104b7576101c2565b8063368f4800116101595780634d4ce935116101335780634d4ce935146103935780634fcd2446146103be57806357ff135a146103e75780635a90a49e14610410576101c2565b8063368f48001461031657806342966c681461033f57806346b8983414610368576101c2565b8063147c9f6d11610195578063147c9f6d1461025a57806318160ddd1461028357806323b872dd146102ae578063313ce567146102eb576101c2565b806306fdde03146101c7578063095ea7b3146101f25780630c0789c71461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc6106b8565b6040516101e9919061369f565b60405180910390f35b3480156101fe57600080fd5b506102196004803603810190610214919061375a565b6106f5565b60405161022691906137b5565b60405180910390f35b34801561023b57600080fd5b506102446107e7565b60405161025191906137df565b60405180910390f35b34801561026657600080fd5b50610281600480360381019061027c91906137fa565b610811565b005b34801561028f57600080fd5b50610298610c00565b6040516102a5919061385c565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613877565b610c23565b6040516102e291906137b5565b60405180910390f35b3480156102f757600080fd5b50610300610e2d565b60405161030d91906138e6565b60405180910390f35b34801561032257600080fd5b5061033d6004803603810190610338919061393b565b610e36565b005b34801561034b57600080fd5b506103666004803603810190610361919061397b565b610ff2565b005b34801561037457600080fd5b5061037d61109e565b60405161038a919061385c565b60405180910390f35b34801561039f57600080fd5b506103a86110a8565b6040516103b5919061385c565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906139d4565b6110b2565b005b3480156103f357600080fd5b5061040e60048036038101906104099190613a40565b6111cc565b005b34801561041c57600080fd5b5061043760048036038101906104329190613a93565b6113a9565b60405161044491906137b5565b60405180910390f35b34801561045957600080fd5b506104626113ff565b60405161047193929190613acf565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613a93565b611440565b6040516104ae919061385c565b60405180910390f35b3480156104c357600080fd5b506104cc611489565b005b3480156104da57600080fd5b506104e3611592565b6040516104f091906137df565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190613b06565b6115bc565b005b34801561052e57600080fd5b5061054960048036038101906105449190613a93565b611725565b60405161055691906137b5565b60405180910390f35b34801561056b57600080fd5b5061057461177b565b60405161058191906137df565b60405180910390f35b34801561059657600080fd5b5061059f6117a4565b6040516105ac919061369f565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d7919061375a565b6117e1565b6040516105e991906137b5565b60405180910390f35b3480156105fe57600080fd5b5061060761183e565b604051610614919061385c565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613b59565b611848565b604051610651919061385c565b60405180910390f35b6106626118cf565b005b34801561067057600080fd5b5061068b60048036038101906106869190613bd7565b611fbc565b005b34801561069957600080fd5b506106a26120c4565b6040516106af919061385c565b60405180910390f35b60606040518060400160405280600581526020017f466c6f6b69000000000000000000000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516107d5919061385c565b60405180910390a36001905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461089f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089690613c50565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156109435750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156109995750601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90613cbc565b60405180910390fd5b826002600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60006009600a610c109190613e3e565b62989680610c1e9190613e89565b905090565b6000610c2e846120ce565b610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490613f17565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e195781600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d989190613f37565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610e248484846121a9565b90509392505050565b60006009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613c50565b60405180910390fd5b600060016103e88461ffff166009600a610ede9190613e3e565b62989680610eec9190613e89565b610ef69190613e89565b610f009190613f9a565b610f0a9190613fcb565b9050600554811015610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f489061404b565b60405180910390fd5b80600581905550600060016103e88461ffff166009600a610f729190613e3e565b62989680610f809190613e89565b610f8a9190613e89565b610f949190613f9a565b610f9e9190613fcb565b9050600654811015610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc906140b7565b60405180910390fd5b8060068190555050505050565b6000610ffd33611440565b905080821115611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614123565b60405180910390fd5b61104c3383612735565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb683604051611092919061385c565b60405180910390a25050565b6000600754905090565b6000600854905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790613c50565b60405180910390fd5b6005818361114e9190614143565b60ff161115611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611189906141c4565b60405180910390fd5b81600260006101000a81548160ff021916908360ff16021790555080600260016101000a81548160ff021916908360ff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125190613c50565b60405180910390fd5b80806112635750815b156112f657601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90614230565b60405180910390fd5b5b81600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600060028054906101000a900461ffff16600260049054906101000a900461ffff16600260069054906101000a900461ffff16925092509250909192565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613c50565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163600060405161158891906137df565b60405180910390a1565b60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190613c50565b60405180910390fd5b60008183856116599190614250565b6116639190614250565b905060008161ffff16116116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a3906142d2565b60405180910390fd5b83600260066101000a81548161ffff021916908361ffff160217905550826002806101000a81548161ffff021916908361ffff16021790555081600260046101000a81548161ffff021916908361ffff16021790555080600260086101000a81548161ffff021916908361ffff16021790555050505050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f466c6f6b69000000000000000000000000000000000000000000000000000000815250905090565b60006117ec336120ce565b61182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613f17565b60405180910390fd5b6118363384846121a9565b905092915050565b6000600554905090565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461195d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195490613c50565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a009061433e565b60405180910390fd5b601260009054906101000a900460ff1615611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a50906143aa565b60405180910390fd5b6000341180611a685750600047115b611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90614416565b60405180910390fd5b6000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090614482565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bba91906144b7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6791906144b7565b6040518363ffffffff1660e01b8152600401611c849291906144e4565b6020604051808303816000875af1158015611ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc791906144b7565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d52600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054476000612855565b600954600a6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc59190613f37565b925050819055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527ffff6cae9000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611e979190614554565b6000604051808303816000865af19150503d8060008114611ed4576040519150601f19603f3d011682016040523d82523d6000602084013e611ed9565b606091505b5050905080611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f14906145b7565b60405180910390fd5b8060116000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611f9e612943565b506000601260016101000a81548160ff021916908315150217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461204a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204190613c50565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516120b99190614636565b60405180910390a150565b6000600654905090565b60008060009050601260009054906101000a900460ff16156120f357600190506121a0565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121955750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561219f57600190505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612219576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122109061469d565b60405180910390fd5b601260009054906101000a900460ff1661230f57600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122cf5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61230e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230590613f17565b60405180910390fd5b5b601260019054906101000a900460ff161580156123755750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561238357612382612a2b565b5b6001544310801561239657506004544310155b80156123eb5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561245f573273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461245e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245590614709565b60405180910390fd5b5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156124c757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561251f575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561256f5761252f848484612c33565b61256e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256590614775565b60405180910390fd5b5b600061257c858585612dca565b90506000818461258c9190613f37565b905083600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125d99190613f37565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816009600082825461262e9190613fcb565b9250508190555080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126809190613fcb565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612720919061385c565b60405180910390a36001925050509392505050565b60008111156128515780600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461278d9190613f37565b9250508190555080600a60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e39190613fcb565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612848919061385c565b60405180910390a35b5050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050811561288757600090505b6128908461307a565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b81526004016128f7969594939291906147d0565b60606040518083038185885af1158015612915573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061293a9190614846565b50505050505050565b606460026009600a6129559190613e3e565b629896806129639190613e89565b61296d9190613e89565b6129779190613f9a565b600581905550606460026009600a61298f9190613e3e565b6298968061299d9190613e89565b6129a79190613e89565b6129b19190613f9a565b6006819055506001601260006101000a81548160ff02191690831515021790555043600481905550600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff16600454600154612a0f9190613fcb565b612a199190613fcb565b612a239190613fcb565b600181905550565b6001601260016101000a81548160ff021916908315150217905550600060095490506007548110158015612a6b5750601260009054906101000a900460ff165b15612c15576008548110612a7f5760085490505b600060028060089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff1684612ab79190613e89565b612ac19190613f9a565b612acb9190613f9a565b905060008183612adb9190613f37565b90506009600a612aeb9190613e3e565b811115612bf957600047905083600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b469190613fcb565b92505081905550612b5682613264565b8360096000828254612b689190613f37565b9250508190555060008147612b7d9190613f37565b90506000600260069054906101000a900461ffff1661ffff161115612bf6576000600260089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff1683612bd39190613e89565b612bdd9190613f9a565b9050612be88561307a565b612bf485826000612855565b505b50505b60004790506000811115612c1157612c1081613483565b5b5050505b506000601260016101000a81548160ff021916908315150217905550565b60008060019050601260009054906101000a900460ff168015612ca05750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cf65750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dbf57600554831115612d0e5760009050612dbe565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612db3575060065483600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db19190613fcb565b115b15612dbd57600090505b5b5b809150509392505050565b600080601260009054906101000a900460ff161580612e325750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612e865750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e94576000905061306f565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612fee57600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff16600454612f199190613fcb565b612f239190613fcb565b4310612f5a576064600260009054906101000a900460ff1660ff1684612f499190613e89565b612f539190613f9a565b9050612fe9565b600060169054906101000a900460ff1660ff16600454612f7a9190613fcb565b4310612fb1576064600060159054906101000a900460ff1660ff1684612fa09190613e89565b612faa9190613f9a565b9050612fe8565b6004544310612fe7576064600060149054906101000a900460ff1660ff1684612fda9190613e89565b612fe49190613f9a565b90505b5b5b61306e565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561306d576064600260019054906101000a900460ff1660ff16846130609190613e89565b61306a9190613f9a565b90505b5b5b809150509392505050565b80600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613261577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051613258919061385c565b60405180910390a35b50565b61326d8161307a565b6000600267ffffffffffffffff81111561328a57613289614899565b5b6040519080825280602002602001820160405280156132b85781602001602082028036833780820191505090505b50905030816000815181106132d0576132cf6148c8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339b91906144b7565b816001815181106133af576133ae6148c8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161344d9594939291906149b5565b600060405180830381600087803b15801561346757600080fd5b505af115801561347b573d6000803e3d6000fd5b505050505050565b6000600260049054906101000a900461ffff1660028054906101000a900461ffff166134af9190614250565b905060008161ffff16111561360b5760008161ffff1660028054906101000a900461ffff1661ffff16846134e39190613e89565b6134ed9190613f9a565b905060008261ffff16600260049054906101000a900461ffff1661ffff16856135169190613e89565b6135209190613f9a565b90506000821115613595576002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613593573d6000803e3d6000fd5b505b600081111561360857600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613606573d6000803e3d6000fd5b505b50505b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561364957808201518184015260208101905061362e565b60008484015250505050565b6000601f19601f8301169050919050565b60006136718261360f565b61367b818561361a565b935061368b81856020860161362b565b61369481613655565b840191505092915050565b600060208201905081810360008301526136b98184613666565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136f1826136c6565b9050919050565b613701816136e6565b811461370c57600080fd5b50565b60008135905061371e816136f8565b92915050565b6000819050919050565b61373781613724565b811461374257600080fd5b50565b6000813590506137548161372e565b92915050565b60008060408385031215613771576137706136c1565b5b600061377f8582860161370f565b925050602061379085828601613745565b9150509250929050565b60008115159050919050565b6137af8161379a565b82525050565b60006020820190506137ca60008301846137a6565b92915050565b6137d9816136e6565b82525050565b60006020820190506137f460008301846137d0565b92915050565b600080600060608486031215613813576138126136c1565b5b60006138218682870161370f565b93505060206138328682870161370f565b92505060406138438682870161370f565b9150509250925092565b61385681613724565b82525050565b6000602082019050613871600083018461384d565b92915050565b6000806000606084860312156138905761388f6136c1565b5b600061389e8682870161370f565b93505060206138af8682870161370f565b92505060406138c086828701613745565b9150509250925092565b600060ff82169050919050565b6138e0816138ca565b82525050565b60006020820190506138fb60008301846138d7565b92915050565b600061ffff82169050919050565b61391881613901565b811461392357600080fd5b50565b6000813590506139358161390f565b92915050565b60008060408385031215613952576139516136c1565b5b600061396085828601613926565b925050602061397185828601613926565b9150509250929050565b600060208284031215613991576139906136c1565b5b600061399f84828501613745565b91505092915050565b6139b1816138ca565b81146139bc57600080fd5b50565b6000813590506139ce816139a8565b92915050565b600080604083850312156139eb576139ea6136c1565b5b60006139f9858286016139bf565b9250506020613a0a858286016139bf565b9150509250929050565b613a1d8161379a565b8114613a2857600080fd5b50565b600081359050613a3a81613a14565b92915050565b600080600060608486031215613a5957613a586136c1565b5b6000613a678682870161370f565b9350506020613a7886828701613a2b565b9250506040613a8986828701613a2b565b9150509250925092565b600060208284031215613aa957613aa86136c1565b5b6000613ab78482850161370f565b91505092915050565b613ac981613901565b82525050565b6000606082019050613ae46000830186613ac0565b613af16020830185613ac0565b613afe6040830184613ac0565b949350505050565b600080600060608486031215613b1f57613b1e6136c1565b5b6000613b2d86828701613926565b9350506020613b3e86828701613926565b9250506040613b4f86828701613926565b9150509250925092565b60008060408385031215613b7057613b6f6136c1565b5b6000613b7e8582860161370f565b9250506020613b8f8582860161370f565b9150509250929050565b6000613ba4826136c6565b9050919050565b613bb481613b99565b8114613bbf57600080fd5b50565b600081359050613bd181613bab565b92915050565b600060208284031215613bed57613bec6136c1565b5b6000613bfb84828501613bc2565b91505092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000600082015250565b6000613c3a60188361361a565b9150613c4582613c04565b602082019050919050565b60006020820190508181036000830152613c6981613c2d565b9050919050565b7f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000600082015250565b6000613ca660178361361a565b9150613cb182613c70565b602082019050919050565b60006020820190508181036000830152613cd581613c99565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613d6257808604811115613d3e57613d3d613cdc565b5b6001851615613d4d5780820291505b8081029050613d5b85613d0b565b9450613d22565b94509492505050565b600082613d7b5760019050613e37565b81613d895760009050613e37565b8160018114613d9f5760028114613da957613dd8565b6001915050613e37565b60ff841115613dbb57613dba613cdc565b5b8360020a915084821115613dd257613dd1613cdc565b5b50613e37565b5060208310610133831016604e8410600b8410161715613e0d5782820a905083811115613e0857613e07613cdc565b5b613e37565b613e1a8484846001613d18565b92509050818404811115613e3157613e30613cdc565b5b81810290505b9392505050565b6000613e4982613724565b9150613e54836138ca565b9250613e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d6b565b905092915050565b6000613e9482613724565b9150613e9f83613724565b9250828202613ead81613724565b91508282048414831517613ec457613ec3613cdc565b5b5092915050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b6000613f0160108361361a565b9150613f0c82613ecb565b602082019050919050565b60006020820190508181036000830152613f3081613ef4565b9050919050565b6000613f4282613724565b9150613f4d83613724565b9250828203905081811115613f6557613f64613cdc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa582613724565b9150613fb083613724565b925082613fc057613fbf613f6b565b5b828204905092915050565b6000613fd682613724565b9150613fe183613724565b9250828201905080821115613ff957613ff8613cdc565b5b92915050565b7f747820746f6f206c6f7700000000000000000000000000000000000000000000600082015250565b6000614035600a8361361a565b915061404082613fff565b602082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f77616c6c657420746f6f206c6f77000000000000000000000000000000000000600082015250565b60006140a1600e8361361a565b91506140ac8261406b565b602082019050919050565b600060208201905081810360008301526140d081614094565b9050919050565b7f62616c616e636520746f6f206c6f770000000000000000000000000000000000600082015250565b600061410d600f8361361a565b9150614118826140d7565b602082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b600061414e826138ca565b9150614159836138ca565b9250828201905060ff81111561417257614171613cdc565b5b92915050565b7f526f756e647472697020746f6f20686967680000000000000000000000000000600082015250565b60006141ae60128361361a565b91506141b982614178565b602082019050919050565b600060208201905081810360008301526141dd816141a1565b9050919050565b7f43616e6e6f74206578656d7074204c5000000000000000000000000000000000600082015250565b600061421a60108361361a565b9150614225826141e4565b602082019050919050565b600060208201905081810360008301526142498161420d565b9050919050565b600061425b82613901565b915061426683613901565b9250828201905061ffff8111156142805761427f613cdc565b5b92915050565b7f416c6c2063616e6e6f7420626520300000000000000000000000000000000000600082015250565b60006142bc600f8361361a565b91506142c782614286565b602082019050919050565b600060208201905081810360008301526142eb816142af565b9050919050565b7f4c50206578697374730000000000000000000000000000000000000000000000600082015250565b600061432860098361361a565b9150614333826142f2565b602082019050919050565b600060208201905081810360008301526143578161431b565b9050919050565b7f74726164696e67206973206f70656e0000000000000000000000000000000000600082015250565b6000614394600f8361361a565b915061439f8261435e565b602082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f4e6f2045544820696e20636f6e7472616374206f72206d657373616765000000600082015250565b6000614400601d8361361a565b915061440b826143ca565b602082019050919050565b6000602082019050818103600083015261442f816143f3565b9050919050565b7f4e6f20746f6b656e7320696e20636f6e74726163740000000000000000000000600082015250565b600061446c60158361361a565b915061447782614436565b602082019050919050565b6000602082019050818103600083015261449b8161445f565b9050919050565b6000815190506144b1816136f8565b92915050565b6000602082840312156144cd576144cc6136c1565b5b60006144db848285016144a2565b91505092915050565b60006040820190506144f960008301856137d0565b61450660208301846137d0565b9392505050565b600081519050919050565b600081905092915050565b600061452e8261450d565b6145388185614518565b935061454881856020860161362b565b80840191505092915050565b60006145608284614523565b915081905092915050565b7f4661696c656420616464696e67206c6971756964697479000000000000000000600082015250565b60006145a160178361361a565b91506145ac8261456b565b602082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b6000819050919050565b60006145fc6145f76145f2846136c6565b6145d7565b6136c6565b9050919050565b600061460e826145e1565b9050919050565b600061462082614603565b9050919050565b61463081614615565b82525050565b600060208201905061464b6000830184614627565b92915050565b7f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000600082015250565b6000614687601d8361361a565b915061469282614651565b602082019050919050565b600060208201905081810360008301526146b68161467a565b9050919050565b7f4d455620626c6f636b6564000000000000000000000000000000000000000000600082015250565b60006146f3600b8361361a565b91506146fe826146bd565b602082019050919050565b60006020820190508181036000830152614722816146e6565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b600061475f60118361361a565b915061476a82614729565b602082019050919050565b6000602082019050818103600083015261478e81614752565b9050919050565b6000819050919050565b60006147ba6147b56147b084614795565b6145d7565b613724565b9050919050565b6147ca8161479f565b82525050565b600060c0820190506147e560008301896137d0565b6147f2602083018861384d565b6147ff60408301876147c1565b61480c60608301866147c1565b61481960808301856137d0565b61482660a083018461384d565b979650505050505050565b6000815190506148408161372e565b92915050565b60008060006060848603121561485f5761485e6136c1565b5b600061486d86828701614831565b935050602061487e86828701614831565b925050604061488f86828701614831565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61492c816136e6565b82525050565b600061493e8383614923565b60208301905092915050565b6000602082019050919050565b6000614962826148f7565b61496c8185614902565b935061497783614913565b8060005b838110156149a857815161498f8882614932565b975061499a8361494a565b92505060018101905061497b565b5085935050505092915050565b600060a0820190506149ca600083018861384d565b6149d760208301876147c1565b81810360408301526149e98186614957565b90506149f860608301856137d0565b614a05608083018461384d565b969550505050505056fea2646970667358221220a73bb37c5753b9f80c41e26e2ab147a3f2df035b4047372eb6aeac640cd0ecfc64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c80636373ea69116100ec57806395d89b411161008a578063dd62ed3e11610064578063dd62ed3e1461061d578063e8078d941461065a578063f2fde38b14610664578063f8b45b051461068d576101c2565b806395d89b411461058a578063a9059cbb146105b5578063c3f70b52146105f2576101c2565b806375f0a874116100c657806375f0a874146104ce57806376a39c28146104f95780638d3e6e40146105225780638da5cb5b1461055f576101c2565b80636373ea691461044d57806370a082311461047a578063715018a6146104b7576101c2565b8063368f4800116101595780634d4ce935116101335780634d4ce935146103935780634fcd2446146103be57806357ff135a146103e75780635a90a49e14610410576101c2565b8063368f48001461031657806342966c681461033f57806346b8983414610368576101c2565b8063147c9f6d11610195578063147c9f6d1461025a57806318160ddd1461028357806323b872dd146102ae578063313ce567146102eb576101c2565b806306fdde03146101c7578063095ea7b3146101f25780630c0789c71461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc6106b8565b6040516101e9919061369f565b60405180910390f35b3480156101fe57600080fd5b506102196004803603810190610214919061375a565b6106f5565b60405161022691906137b5565b60405180910390f35b34801561023b57600080fd5b506102446107e7565b60405161025191906137df565b60405180910390f35b34801561026657600080fd5b50610281600480360381019061027c91906137fa565b610811565b005b34801561028f57600080fd5b50610298610c00565b6040516102a5919061385c565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613877565b610c23565b6040516102e291906137b5565b60405180910390f35b3480156102f757600080fd5b50610300610e2d565b60405161030d91906138e6565b60405180910390f35b34801561032257600080fd5b5061033d6004803603810190610338919061393b565b610e36565b005b34801561034b57600080fd5b506103666004803603810190610361919061397b565b610ff2565b005b34801561037457600080fd5b5061037d61109e565b60405161038a919061385c565b60405180910390f35b34801561039f57600080fd5b506103a86110a8565b6040516103b5919061385c565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906139d4565b6110b2565b005b3480156103f357600080fd5b5061040e60048036038101906104099190613a40565b6111cc565b005b34801561041c57600080fd5b5061043760048036038101906104329190613a93565b6113a9565b60405161044491906137b5565b60405180910390f35b34801561045957600080fd5b506104626113ff565b60405161047193929190613acf565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613a93565b611440565b6040516104ae919061385c565b60405180910390f35b3480156104c357600080fd5b506104cc611489565b005b3480156104da57600080fd5b506104e3611592565b6040516104f091906137df565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190613b06565b6115bc565b005b34801561052e57600080fd5b5061054960048036038101906105449190613a93565b611725565b60405161055691906137b5565b60405180910390f35b34801561056b57600080fd5b5061057461177b565b60405161058191906137df565b60405180910390f35b34801561059657600080fd5b5061059f6117a4565b6040516105ac919061369f565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d7919061375a565b6117e1565b6040516105e991906137b5565b60405180910390f35b3480156105fe57600080fd5b5061060761183e565b604051610614919061385c565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613b59565b611848565b604051610651919061385c565b60405180910390f35b6106626118cf565b005b34801561067057600080fd5b5061068b60048036038101906106869190613bd7565b611fbc565b005b34801561069957600080fd5b506106a26120c4565b6040516106af919061385c565b60405180910390f35b60606040518060400160405280600581526020017f466c6f6b69000000000000000000000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516107d5919061385c565b60405180910390a36001905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461089f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089690613c50565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156109435750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156109995750601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90613cbc565b60405180910390fd5b826002600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60006009600a610c109190613e3e565b62989680610c1e9190613e89565b905090565b6000610c2e846120ce565b610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490613f17565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e195781600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d989190613f37565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610e248484846121a9565b90509392505050565b60006009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613c50565b60405180910390fd5b600060016103e88461ffff166009600a610ede9190613e3e565b62989680610eec9190613e89565b610ef69190613e89565b610f009190613f9a565b610f0a9190613fcb565b9050600554811015610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f489061404b565b60405180910390fd5b80600581905550600060016103e88461ffff166009600a610f729190613e3e565b62989680610f809190613e89565b610f8a9190613e89565b610f949190613f9a565b610f9e9190613fcb565b9050600654811015610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc906140b7565b60405180910390fd5b8060068190555050505050565b6000610ffd33611440565b905080821115611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614123565b60405180910390fd5b61104c3383612735565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb683604051611092919061385c565b60405180910390a25050565b6000600754905090565b6000600854905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790613c50565b60405180910390fd5b6005818361114e9190614143565b60ff161115611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611189906141c4565b60405180910390fd5b81600260006101000a81548160ff021916908360ff16021790555080600260016101000a81548160ff021916908360ff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125190613c50565b60405180910390fd5b80806112635750815b156112f657601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90614230565b60405180910390fd5b5b81600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600060028054906101000a900461ffff16600260049054906101000a900461ffff16600260069054906101000a900461ffff16925092509250909192565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613c50565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163600060405161158891906137df565b60405180910390a1565b60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190613c50565b60405180910390fd5b60008183856116599190614250565b6116639190614250565b905060008161ffff16116116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a3906142d2565b60405180910390fd5b83600260066101000a81548161ffff021916908361ffff160217905550826002806101000a81548161ffff021916908361ffff16021790555081600260046101000a81548161ffff021916908361ffff16021790555080600260086101000a81548161ffff021916908361ffff16021790555050505050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f466c6f6b69000000000000000000000000000000000000000000000000000000815250905090565b60006117ec336120ce565b61182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613f17565b60405180910390fd5b6118363384846121a9565b905092915050565b6000600554905090565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461195d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195490613c50565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a009061433e565b60405180910390fd5b601260009054906101000a900460ff1615611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a50906143aa565b60405180910390fd5b6000341180611a685750600047115b611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90614416565b60405180910390fd5b6000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090614482565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bba91906144b7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6791906144b7565b6040518363ffffffff1660e01b8152600401611c849291906144e4565b6020604051808303816000875af1158015611ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc791906144b7565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d52600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054476000612855565b600954600a6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc59190613f37565b925050819055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527ffff6cae9000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611e979190614554565b6000604051808303816000865af19150503d8060008114611ed4576040519150601f19603f3d011682016040523d82523d6000602084013e611ed9565b606091505b5050905080611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f14906145b7565b60405180910390fd5b8060116000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611f9e612943565b506000601260016101000a81548160ff021916908315150217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461204a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204190613c50565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516120b99190614636565b60405180910390a150565b6000600654905090565b60008060009050601260009054906101000a900460ff16156120f357600190506121a0565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121955750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561219f57600190505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612219576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122109061469d565b60405180910390fd5b601260009054906101000a900460ff1661230f57600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122cf5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61230e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230590613f17565b60405180910390fd5b5b601260019054906101000a900460ff161580156123755750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561238357612382612a2b565b5b6001544310801561239657506004544310155b80156123eb5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561245f573273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461245e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245590614709565b60405180910390fd5b5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156124c757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561251f575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561256f5761252f848484612c33565b61256e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256590614775565b60405180910390fd5b5b600061257c858585612dca565b90506000818461258c9190613f37565b905083600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125d99190613f37565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816009600082825461262e9190613fcb565b9250508190555080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126809190613fcb565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612720919061385c565b60405180910390a36001925050509392505050565b60008111156128515780600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461278d9190613f37565b9250508190555080600a60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e39190613fcb565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612848919061385c565b60405180910390a35b5050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050811561288757600090505b6128908461307a565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b81526004016128f7969594939291906147d0565b60606040518083038185885af1158015612915573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061293a9190614846565b50505050505050565b606460026009600a6129559190613e3e565b629896806129639190613e89565b61296d9190613e89565b6129779190613f9a565b600581905550606460026009600a61298f9190613e3e565b6298968061299d9190613e89565b6129a79190613e89565b6129b19190613f9a565b6006819055506001601260006101000a81548160ff02191690831515021790555043600481905550600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff16600454600154612a0f9190613fcb565b612a199190613fcb565b612a239190613fcb565b600181905550565b6001601260016101000a81548160ff021916908315150217905550600060095490506007548110158015612a6b5750601260009054906101000a900460ff165b15612c15576008548110612a7f5760085490505b600060028060089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff1684612ab79190613e89565b612ac19190613f9a565b612acb9190613f9a565b905060008183612adb9190613f37565b90506009600a612aeb9190613e3e565b811115612bf957600047905083600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b469190613fcb565b92505081905550612b5682613264565b8360096000828254612b689190613f37565b9250508190555060008147612b7d9190613f37565b90506000600260069054906101000a900461ffff1661ffff161115612bf6576000600260089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff1683612bd39190613e89565b612bdd9190613f9a565b9050612be88561307a565b612bf485826000612855565b505b50505b60004790506000811115612c1157612c1081613483565b5b5050505b506000601260016101000a81548160ff021916908315150217905550565b60008060019050601260009054906101000a900460ff168015612ca05750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cf65750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dbf57600554831115612d0e5760009050612dbe565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612db3575060065483600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db19190613fcb565b115b15612dbd57600090505b5b5b809150509392505050565b600080601260009054906101000a900460ff161580612e325750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612e865750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e94576000905061306f565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612fee57600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff16600454612f199190613fcb565b612f239190613fcb565b4310612f5a576064600260009054906101000a900460ff1660ff1684612f499190613e89565b612f539190613f9a565b9050612fe9565b600060169054906101000a900460ff1660ff16600454612f7a9190613fcb565b4310612fb1576064600060159054906101000a900460ff1660ff1684612fa09190613e89565b612faa9190613f9a565b9050612fe8565b6004544310612fe7576064600060149054906101000a900460ff1660ff1684612fda9190613e89565b612fe49190613f9a565b90505b5b5b61306e565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561306d576064600260019054906101000a900460ff1660ff16846130609190613e89565b61306a9190613f9a565b90505b5b5b809150509392505050565b80600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613261577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051613258919061385c565b60405180910390a35b50565b61326d8161307a565b6000600267ffffffffffffffff81111561328a57613289614899565b5b6040519080825280602002602001820160405280156132b85781602001602082028036833780820191505090505b50905030816000815181106132d0576132cf6148c8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339b91906144b7565b816001815181106133af576133ae6148c8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161344d9594939291906149b5565b600060405180830381600087803b15801561346757600080fd5b505af115801561347b573d6000803e3d6000fd5b505050505050565b6000600260049054906101000a900461ffff1660028054906101000a900461ffff166134af9190614250565b905060008161ffff16111561360b5760008161ffff1660028054906101000a900461ffff1661ffff16846134e39190613e89565b6134ed9190613f9a565b905060008261ffff16600260049054906101000a900461ffff1661ffff16856135169190613e89565b6135209190613f9a565b90506000821115613595576002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613593573d6000803e3d6000fd5b505b600081111561360857600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613606573d6000803e3d6000fd5b505b50505b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561364957808201518184015260208101905061362e565b60008484015250505050565b6000601f19601f8301169050919050565b60006136718261360f565b61367b818561361a565b935061368b81856020860161362b565b61369481613655565b840191505092915050565b600060208201905081810360008301526136b98184613666565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136f1826136c6565b9050919050565b613701816136e6565b811461370c57600080fd5b50565b60008135905061371e816136f8565b92915050565b6000819050919050565b61373781613724565b811461374257600080fd5b50565b6000813590506137548161372e565b92915050565b60008060408385031215613771576137706136c1565b5b600061377f8582860161370f565b925050602061379085828601613745565b9150509250929050565b60008115159050919050565b6137af8161379a565b82525050565b60006020820190506137ca60008301846137a6565b92915050565b6137d9816136e6565b82525050565b60006020820190506137f460008301846137d0565b92915050565b600080600060608486031215613813576138126136c1565b5b60006138218682870161370f565b93505060206138328682870161370f565b92505060406138438682870161370f565b9150509250925092565b61385681613724565b82525050565b6000602082019050613871600083018461384d565b92915050565b6000806000606084860312156138905761388f6136c1565b5b600061389e8682870161370f565b93505060206138af8682870161370f565b92505060406138c086828701613745565b9150509250925092565b600060ff82169050919050565b6138e0816138ca565b82525050565b60006020820190506138fb60008301846138d7565b92915050565b600061ffff82169050919050565b61391881613901565b811461392357600080fd5b50565b6000813590506139358161390f565b92915050565b60008060408385031215613952576139516136c1565b5b600061396085828601613926565b925050602061397185828601613926565b9150509250929050565b600060208284031215613991576139906136c1565b5b600061399f84828501613745565b91505092915050565b6139b1816138ca565b81146139bc57600080fd5b50565b6000813590506139ce816139a8565b92915050565b600080604083850312156139eb576139ea6136c1565b5b60006139f9858286016139bf565b9250506020613a0a858286016139bf565b9150509250929050565b613a1d8161379a565b8114613a2857600080fd5b50565b600081359050613a3a81613a14565b92915050565b600080600060608486031215613a5957613a586136c1565b5b6000613a678682870161370f565b9350506020613a7886828701613a2b565b9250506040613a8986828701613a2b565b9150509250925092565b600060208284031215613aa957613aa86136c1565b5b6000613ab78482850161370f565b91505092915050565b613ac981613901565b82525050565b6000606082019050613ae46000830186613ac0565b613af16020830185613ac0565b613afe6040830184613ac0565b949350505050565b600080600060608486031215613b1f57613b1e6136c1565b5b6000613b2d86828701613926565b9350506020613b3e86828701613926565b9250506040613b4f86828701613926565b9150509250925092565b60008060408385031215613b7057613b6f6136c1565b5b6000613b7e8582860161370f565b9250506020613b8f8582860161370f565b9150509250929050565b6000613ba4826136c6565b9050919050565b613bb481613b99565b8114613bbf57600080fd5b50565b600081359050613bd181613bab565b92915050565b600060208284031215613bed57613bec6136c1565b5b6000613bfb84828501613bc2565b91505092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000600082015250565b6000613c3a60188361361a565b9150613c4582613c04565b602082019050919050565b60006020820190508181036000830152613c6981613c2d565b9050919050565b7f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000600082015250565b6000613ca660178361361a565b9150613cb182613c70565b602082019050919050565b60006020820190508181036000830152613cd581613c99565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613d6257808604811115613d3e57613d3d613cdc565b5b6001851615613d4d5780820291505b8081029050613d5b85613d0b565b9450613d22565b94509492505050565b600082613d7b5760019050613e37565b81613d895760009050613e37565b8160018114613d9f5760028114613da957613dd8565b6001915050613e37565b60ff841115613dbb57613dba613cdc565b5b8360020a915084821115613dd257613dd1613cdc565b5b50613e37565b5060208310610133831016604e8410600b8410161715613e0d5782820a905083811115613e0857613e07613cdc565b5b613e37565b613e1a8484846001613d18565b92509050818404811115613e3157613e30613cdc565b5b81810290505b9392505050565b6000613e4982613724565b9150613e54836138ca565b9250613e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d6b565b905092915050565b6000613e9482613724565b9150613e9f83613724565b9250828202613ead81613724565b91508282048414831517613ec457613ec3613cdc565b5b5092915050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b6000613f0160108361361a565b9150613f0c82613ecb565b602082019050919050565b60006020820190508181036000830152613f3081613ef4565b9050919050565b6000613f4282613724565b9150613f4d83613724565b9250828203905081811115613f6557613f64613cdc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa582613724565b9150613fb083613724565b925082613fc057613fbf613f6b565b5b828204905092915050565b6000613fd682613724565b9150613fe183613724565b9250828201905080821115613ff957613ff8613cdc565b5b92915050565b7f747820746f6f206c6f7700000000000000000000000000000000000000000000600082015250565b6000614035600a8361361a565b915061404082613fff565b602082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f77616c6c657420746f6f206c6f77000000000000000000000000000000000000600082015250565b60006140a1600e8361361a565b91506140ac8261406b565b602082019050919050565b600060208201905081810360008301526140d081614094565b9050919050565b7f62616c616e636520746f6f206c6f770000000000000000000000000000000000600082015250565b600061410d600f8361361a565b9150614118826140d7565b602082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b600061414e826138ca565b9150614159836138ca565b9250828201905060ff81111561417257614171613cdc565b5b92915050565b7f526f756e647472697020746f6f20686967680000000000000000000000000000600082015250565b60006141ae60128361361a565b91506141b982614178565b602082019050919050565b600060208201905081810360008301526141dd816141a1565b9050919050565b7f43616e6e6f74206578656d7074204c5000000000000000000000000000000000600082015250565b600061421a60108361361a565b9150614225826141e4565b602082019050919050565b600060208201905081810360008301526142498161420d565b9050919050565b600061425b82613901565b915061426683613901565b9250828201905061ffff8111156142805761427f613cdc565b5b92915050565b7f416c6c2063616e6e6f7420626520300000000000000000000000000000000000600082015250565b60006142bc600f8361361a565b91506142c782614286565b602082019050919050565b600060208201905081810360008301526142eb816142af565b9050919050565b7f4c50206578697374730000000000000000000000000000000000000000000000600082015250565b600061432860098361361a565b9150614333826142f2565b602082019050919050565b600060208201905081810360008301526143578161431b565b9050919050565b7f74726164696e67206973206f70656e0000000000000000000000000000000000600082015250565b6000614394600f8361361a565b915061439f8261435e565b602082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f4e6f2045544820696e20636f6e7472616374206f72206d657373616765000000600082015250565b6000614400601d8361361a565b915061440b826143ca565b602082019050919050565b6000602082019050818103600083015261442f816143f3565b9050919050565b7f4e6f20746f6b656e7320696e20636f6e74726163740000000000000000000000600082015250565b600061446c60158361361a565b915061447782614436565b602082019050919050565b6000602082019050818103600083015261449b8161445f565b9050919050565b6000815190506144b1816136f8565b92915050565b6000602082840312156144cd576144cc6136c1565b5b60006144db848285016144a2565b91505092915050565b60006040820190506144f960008301856137d0565b61450660208301846137d0565b9392505050565b600081519050919050565b600081905092915050565b600061452e8261450d565b6145388185614518565b935061454881856020860161362b565b80840191505092915050565b60006145608284614523565b915081905092915050565b7f4661696c656420616464696e67206c6971756964697479000000000000000000600082015250565b60006145a160178361361a565b91506145ac8261456b565b602082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b6000819050919050565b60006145fc6145f76145f2846136c6565b6145d7565b6136c6565b9050919050565b600061460e826145e1565b9050919050565b600061462082614603565b9050919050565b61463081614615565b82525050565b600060208201905061464b6000830184614627565b92915050565b7f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000600082015250565b6000614687601d8361361a565b915061469282614651565b602082019050919050565b600060208201905081810360008301526146b68161467a565b9050919050565b7f4d455620626c6f636b6564000000000000000000000000000000000000000000600082015250565b60006146f3600b8361361a565b91506146fe826146bd565b602082019050919050565b60006020820190508181036000830152614722816146e6565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b600061475f60118361361a565b915061476a82614729565b602082019050919050565b6000602082019050818103600083015261478e81614752565b9050919050565b6000819050919050565b60006147ba6147b56147b084614795565b6145d7565b613724565b9050919050565b6147ca8161479f565b82525050565b600060c0820190506147e560008301896137d0565b6147f2602083018861384d565b6147ff60408301876147c1565b61480c60608301866147c1565b61481960808301856137d0565b61482660a083018461384d565b979650505050505050565b6000815190506148408161372e565b92915050565b60008060006060848603121561485f5761485e6136c1565b5b600061486d86828701614831565b935050602061487e86828701614831565b925050604061488f86828701614831565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61492c816136e6565b82525050565b600061493e8383614923565b60208301905092915050565b6000602082019050919050565b6000614962826148f7565b61496c8185614902565b935061497783614913565b8060005b838110156149a857815161498f8882614932565b975061499a8361494a565b92505060018101905061497b565b5085935050505092915050565b600060a0820190506149ca600083018861384d565b6149d760208301876147c1565b81810360408301526149e98186614957565b90506149f860608301856137d0565b614a05608083018461384d565b969550505050505056fea2646970667358221220a73bb37c5753b9f80c41e26e2ab147a3f2df035b4047372eb6aeac640cd0ecfc64736f6c63430008130033

Deployed Bytecode Sourcemap

2317:14642:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5565:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5903:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12746:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12851:511;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5295:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6360:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5389:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13769:462;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16695:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13575:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13671;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12023:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11585:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11347:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11847:170;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;5651:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2124:137;;;;;;;;;;;;;:::i;:::-;;12639:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12213:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11464:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1874:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5475:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6127:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13471:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5762:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7097:805;;;:::i;:::-;;1961:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13370:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5565:80;5613:13;5637:5;;;;;;;;;;;;;;;;;5630:12;;5565:80;:::o;5903:216::-;5978:4;6030:6;5995:11;:23;6007:10;5995:23;;;;;;;;;;;;;;;:32;6019:7;5995:32;;;;;;;;;;;;;;;:41;;;;6073:7;6052:37;;6061:10;6052:37;;;6082:6;6052:37;;;;;;:::i;:::-;;;;;;;;6107:4;6100:11;;5903:216;;;;:::o;12746:97::-;12794:7;12821:14;;;;;;;;;;;12814:21;;12746:97;:::o;12851:511::-;1811:6;;;;;;;;;;1797:20;;:10;:20;;;1789:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;12967:5:::1;:16;12973:9;12967:16;;;;;;;;;;;;;;;;;;;;;;;;;12966:17;:36;;;;;12988:5;:14;12994:7;12988:14;;;;;;;;;;;;;;;;;;;;;;;;;12987:15;12966:36;:56;;;;;13007:5;:15;13013:8;13007:15;;;;;;;;;;;;;;;;;;;;;;;;;13006:16;12966:56;12958:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;13098:9;13071:16;;:37;;;;;;;;;;;;;;;;;;13144:7;13119:14;;:33;;;;;;;;;;;;;;;;;;13174:8;13163;;:19;;;;;;;;;;;;;;;;;;13224:4;13203:7;:18;13211:9;13203:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;13262:4;13239:9;:20;13249:9;13239:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;13306:4;13287:7;:16;13295:7;13287:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;13350:4;13329:9;:18;13339:7;13329:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;12851:511:::0;;;:::o;5295:88::-;5350:7;2395:1;2457:2;:13;;;;:::i;:::-;2443:10;:28;;;;:::i;:::-;5361:19;;5295:88;:::o;6360:404::-;6460:4;6485:25;6503:6;6485:17;:25::i;:::-;6477:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;6580:17;6545:11;:19;6557:6;6545:19;;;;;;;;;;;;;;;:31;6565:10;6545:31;;;;;;;;;;;;;;;;:52;6542:157;;6681:6;6647:11;:19;6659:6;6647:19;;;;;;;;;;;;;;;:31;6667:10;6647:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;6613:11;:19;6625:6;6613:19;;;;;;;;;;;;;;;:31;6633:10;6613:31;;;;;;;;;;;;;;;:74;;;;6542:157;6716:40;6730:6;6738:9;6749:6;6716:13;:40::i;:::-;6709:47;;6360:404;;;;;:::o;5389:80::-;5441:5;2395:1;5450:16;;5389:80;:::o;13769:462::-;1811:6;;;;;;;;;;1797:20;;:10;:20;;;1789:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13875:16:::1;13941:1;13934:4;13909:22;13894:37;;2395:1;2457:2;:13;;;;:::i;:::-;2443:10;:28;;;;:::i;:::-;13894:37;;;;:::i;:::-;:44;;;;:::i;:::-;:48;;;;:::i;:::-;13875:67;;13973:12;;13961:8;:24;;13953:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;14026:8;14011:12;:23;;;;14045:20;14110:1;14103:4;14083:17;14068:32;;2395:1;2457:2;:13;;;;:::i;:::-;2443:10;:28;;;;:::i;:::-;14068:32;;;;:::i;:::-;:39;;;;:::i;:::-;:43;;;;:::i;:::-;14045:66;;14146:16;;14130:12;:32;;14122:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;14211:12;14192:16;:31;;;;13864:367;;13769:462:::0;;:::o;16695:261::-;16745:24;16772:21;16782:10;16772:9;:21::i;:::-;16745:48;;16822:16;16812:6;:26;;16804:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;16869:31;16881:10;16893:6;16869:11;:31::i;:::-;16929:10;16916:32;;;16941:6;16916:32;;;;;;:::i;:::-;;;;;;;;16734:222;16695:261;:::o;13575:90::-;13619:7;13646:11;;13639:18;;13575:90;:::o;13671:::-;13715:7;13742:11;;13735:18;;13671:90;:::o;12023:182::-;1811:6;;;;;;;;;;1797:20;;:10;:20;;;1789:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;12115:1:::1;12107:4;12101:3;:10;;;;:::i;:::-;:15;;;;12093:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;12164:3;12150:11;;:17;;;;;;;;;;;;;;;;;;12193:4;12178:12;;:19;;;;;;;;;;;;;;;;;;12023:182:::0;;:::o;11585:250::-;1811:6;;;;;;;;;;1797:20;;:10;:20;;;1789:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11682:8:::1;:18;;;;11694:6;11682:18;11678:72;;;11713:5;:13;11719:6;11713:13;;;;;;;;;;;;;;;;;;;;;;;;;11712:14;11704:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;11678:72;11780:6;11760:7;:17;11769:6;11760:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;11819:8;11797:9;:19;11808:6;11797:19;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;11585:250:::0;;;:::o;11347:110::-;11410:4;11434:7;:15;11442:6;11434:15;;;;;;;;;;;;;;;;;;;;;;;;;11427:22;;11347:110;;;:::o;11847:170::-;11890:16;11908:14;11924:9;11956:19;;;;;;;;;;11977:17;;;;;;;;;;;11996:12;;;;;;;;;;;11947:62;;;;;;11847:170;;;:::o;5651:105::-;5717:7;5735:9;:18;5745:7;5735:18;;;;;;;;;;;;;;;;5728:25;;5651:105;;;:::o;2124:137::-;1811:6;;;;;;;;;;1797:20;;:10;:20;;;1789:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;2201:1:::1;2184:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2220:32;2249:1;2220:32;;;;;;:::i;:::-;;;;;;;;2124:137::o:0;12639:101::-;12689:7;12716:16;;;;;;;;;;;12709:23;;12639:101;:::o;12213:418::-;1811:6;;;;;;;;;;1797:20;;:10;:20;;;1789:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;12331:18:::1;12385:13;12367:15;12352:12;:30;;;;:::i;:::-;:46;;;;:::i;:::-;12331:67;;12432:1;12418:11;:15;;;12409:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;12479:12;12464;;:27;;;;;;;;;;;;;;;;;;12524:15;12502:19;::::0;:37:::1;;;;;;;;;;;;;;;;;;12570:13;12550:17;;:33;;;;;;;;;;;;;;;;;;12612:11;12594:15;;:29;;;;;;;;;;;;;;;;;;12320:311;12213:418:::0;;;:::o;11464:114::-;11529:4;11553:9;:17;11563:6;11553:17;;;;;;;;;;;;;;;;;;;;;;;;;11546:24;;11464:114;;;:::o;1874:81::-;1912:7;1940:6;;;;;;;;;;;1933:13;;1874:81;:::o;5475:84::-;5525:13;5549:7;;;;;;;;;;;;;;;;;5542:14;;5475:84;:::o;6127:225::-;6207:4;6232:29;6250:10;6232:17;:29::i;:::-;6224:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6300:44;6314:10;6326:9;6337:6;6300:13;:44::i;:::-;6293:51;;6127:225;;;;:::o;13471:96::-;13520:7;13547:12;;13540:19;;13471:96;:::o;5762:133::-;5846:7;5864:11;:19;5876:6;5864:19;;;;;;;;;;;;;;;:28;5884:7;5864:28;;;;;;;;;;;;;;;;5857:35;;5762:133;;;;:::o;7097:805::-;1811:6;;;;;;;;;;1797:20;;:10;:20;;;1789:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4293:4:::1;4280:10;;:17;;;;;;;;;;;;;;;;;;7201:1:::2;7179:24;;:10;;;;;;;;;;;:24;;;7171:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;7237:12;;;;;;;;;;;7236:13;7228:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7300:1;7288:9;:13;:40;;;;7327:1;7305:21;:23;7288:40;7280:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;7406:1;7381:9;:24;7399:4;7381:24;;;;;;;;;;;;;;;;:26;7373:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7475:18;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7457:58;;;7524:4;7531:18;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7457:100;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7444:10;;:113;;;;;;;;;;;;;;;;;;7568:69;7582:9;:24;7600:4;7582:24;;;;;;;;;;;;;;;;7608:21;7631:5;7568:13;:69::i;:::-;7673:10;;7648:9;:21;7658:10;;;;;;;;;;;7648:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;7695:17;7717:10;;;;;;;;;;;:15;;7733:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7717:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7694:73;;;7786:12;7778:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;7857:12;7837:5;:17;7843:10;;;;;;;;;;;7837:17;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;7880:14;:12;:14::i;:::-;7160:742;4335:5:::1;4322:10;;:18;;;;;;;;;;;;;;;;;;7097:805::o:0;1961:157::-;1811:6;;;;;;;;;;1797:20;;:10;:20;;;1789:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;2054:8:::1;2045:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2079:30;2100:8;2079:30;;;;;;:::i;:::-;;;;;;;;1961:157:::0;:::o;13370:95::-;13414:7;13441:16;;13434:23;;13370:95;:::o;10203:279::-;10268:4;10284:16;10303:5;10284:24;;10324:12;;;;;;;;;;;10319:124;;;10355:4;10341:18;;10319:124;;;10382:7;:15;10390:6;10382:15;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;10401:9;:17;10411:6;10401:17;;;;;;;;;;;;;;;;;;;;;;;;;10382:36;10378:65;;;10436:4;10422:18;;10378:65;10319:124;10463:11;10456:18;;;10203:279;;;:::o;8618:1074::-;8710:4;8753:1;8735:20;;:6;:20;;;8727:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8805:12;;;;;;;;;;;8800:89;;8829:7;:15;8837:6;8829:15;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;8848:9;:17;8858:6;8848:17;;;;;;;;;;;;;;;;;;;;;;;;;8829:36;8821:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8800:89;8905:10;;;;;;;;;;;8904:11;:31;;;;;8919:5;:16;8925:9;8919:16;;;;;;;;;;;;;;;;;;;;;;;;;8904:31;8899:64;;;8940:20;:18;:20::i;:::-;8899:64;8993:13;;8978:12;:28;:60;;;;;9026:12;;9010;:28;;8978:60;:77;;;;;9042:5;:13;9048:6;9042:13;;;;;;;;;;;;;;;;;;;;;;;;;8978:77;8973:158;;;9094:9;9081:22;;:9;:22;;;9073:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8973:158;9164:4;9146:23;;:6;:23;;;;:53;;;;;9194:4;9173:26;;:9;:26;;;;9146:53;:73;;;;;9213:6;;;;;;;;;;9203:16;;:6;:16;;;;9146:73;9141:179;;;9246:39;9259:6;9267:9;9278:6;9246:12;:39::i;:::-;9238:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;9141:179;9330:18;9351:40;9365:6;9373:9;9384:6;9351:13;:40::i;:::-;9330:61;;9402:23;9437:10;9428:6;:19;;;;:::i;:::-;9402:45;;9498:6;9478:9;:17;9488:6;9478:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;9458:9;:17;9468:6;9458:17;;;;;;;;;;;;;;;:46;;;;9529:10;9515;;:24;;;;;;;:::i;:::-;;;;;;;;9596:15;9573:9;:20;9583:9;9573:20;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;9550:9;:20;9560:9;9550:20;;;;;;;;;;;;;;;:61;;;;9644:9;9627:35;;9636:6;9627:35;;;9655:6;9627:35;;;;;;:::i;:::-;;;;;;;;9680:4;9673:11;;;;8618:1074;;;;;:::o;14243:265::-;14333:1;14324:6;:10;14319:182;;;14377:6;14352:9;:21;14362:10;14352:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;14423:6;14398:9;:21;14416:1;14398:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;14478:1;14449:40;;14458:10;14449:40;;;14482:6;14449:40;;;;;;:::i;:::-;;;;;;;;14319:182;14243:265;;:::o;7910:385::-;8013:24;8040:8;;;;;;;;;;;8013:35;;8064:8;8059:50;;;8104:1;8077:29;;8059:50;8119:28;8134:12;8119:14;:28::i;:::-;8158:18;;;;;;;;;;;:34;;;8200:13;8225:4;8232:12;8246:1;8249;8252:16;8270:15;8158:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;8002:293;7910:385;;;:::o;8303:307::-;8385:3;8381:1;2395;2457:2;:13;;;;:::i;:::-;2443:10;:28;;;;:::i;:::-;8366:16;;;;:::i;:::-;:22;;;;:::i;:::-;8347:12;:41;;;;8438:3;8434:1;2395;2457:2;:13;;;;:::i;:::-;2443:10;:28;;;;:::i;:::-;8419:16;;;;:::i;:::-;:22;;;;:::i;:::-;8400:16;:41;;;;8467:4;8452:12;;:19;;;;;;;;;;;;;;;;;;8497:12;8482;:27;;;;8586:16;;;;;;;;;;;8536:66;;8567:16;;;;;;;;;;;8536:47;;8552:12;;8536:13;;:28;;;;:::i;:::-;:47;;;;:::i;:::-;:66;;;;:::i;:::-;8520:13;:82;;;;8303:307::o;14516:1268::-;4293:4;4280:10;;:17;;;;;;;;;;;;;;;;;;14577:27:::1;14607:10;;14577:40;;14656:11;;14633:19;:34;;:50;;;;;14671:12;;;;;;;;;;;14633:50;14628:1149;;;14729:11;;14706:19;:34;14701:80;;14767:11;;14745:33;;14701:80;14795:20;14873:1;14855:15:::0;::::1;;;;;;;;;;14818:52;;14840:12;;;;;;;;;;;14818:34;;:19;:34;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;;;:::i;:::-;14795:79;;14903:21;14949:12;14927:19;:34;;;;:::i;:::-;14903:58;;2395:1;14996:2;:13;;;;:::i;:::-;14980;:29;14976:639;;;15031:19;15053:21;15031:43;;15121:19;15093:9;:24;15111:4;15093:24;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;15159:35;15180:13;15159:20;:35::i;:::-;15227:19;15213:10;;:33;;;;;;;:::i;:::-;;;;;;;;15265:19;15311:11;15287:21;:35;;;;:::i;:::-;15265:57;;15361:1;15346:12;;;;;;;;;;;:16;;;15341:259;;;15388:21;15441:15;;;;;;;;;;;15412:44;;15426:12;;;;;;;;;;;15412:26;;:11;:26;;;;:::i;:::-;:44;;;;:::i;:::-;15388:68;;15480:28;15495:12;15480:14;:28::i;:::-;15531:49;15545:12;15559:13;15574:5;15531:13;:49::i;:::-;15365:235;15341:259;15012:603;;14976:639;15629:27;15659:21;15629:51;;15720:1;15698:19;:23;15695:71;;;15725:38;15743:19;15725:17;:38::i;:::-;15695:71;14686:1091;;;14628:1149;14566:1218;4335:5:::0;4322:10;;:18;;;;;;;;;;;;;;;;;;14516:1268::o;9700:495::-;9804:4;9821:21;9845:4;9821:28;;9865:12;;;;;;;;;;;:34;;;;;9882:9;:17;9892:6;9882:17;;;;;;;;;;;;;;;;;;;;;;;;;9881:18;9865:34;:59;;;;;9904:9;:20;9914:9;9904:20;;;;;;;;;;;;;;;;;;;;;;;;;9903:21;9865:59;9860:294;;;9964:12;;9947:14;:29;9942:201;;;10000:5;9981:24;;9942:201;;;10033:5;:16;10039:9;10033:16;;;;;;;;;;;;;;;;;;;;;;;;;10032:17;:79;;;;;10094:16;;10077:14;10054:9;:20;10064:9;10054:20;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:56;10032:79;10027:116;;;10135:5;10116:24;;10027:116;9942:201;9860:294;10171:16;10164:23;;;9700:495;;;;;:::o;10490:847::-;10587:7;10607:17;10651:12;;;;;;;;;;;10650:13;:32;;;;10667:7;:15;10675:6;10667:15;;;;;;;;;;;;;;;;;;;;;;;;;10650:32;:54;;;;10686:7;:18;10694:9;10686:18;;;;;;;;;;;;;;;;;;;;;;;;;10650:54;10645:656;;;10735:1;10723:13;;10645:656;;;10760:5;:13;10766:6;10760:13;;;;;;;;;;;;;;;;;;;;;;;;;10755:546;;;10847:16;;;;;;;;;;;10813:50;;10828:16;;;;;;;;;;;10813:31;;:12;;:31;;;;:::i;:::-;:50;;;;:::i;:::-;10797:12;:66;10792:400;;10920:3;10906:11;;;;;;;;;;;10897:20;;:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;10885:38;;10792:400;;;10982:16;;;;;;;;;;;10967:31;;:12;;:31;;;;:::i;:::-;10951:12;:47;10946:246;;11057:3;11041:13;;;;;;;;;;;11032:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;11020:40;;10946:246;;;11103:12;;11087;:28;11082:110;;11173:3;11157:13;;;;;;;;;;;11148:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;11136:40;;11082:110;10946:246;10792:400;10755:546;;;11214:5;:16;11220:9;11214:16;;;;;;;;;;;;;;;;;;;;;;;;;11209:92;;;11285:3;11270:12;;;;;;;;;;;11261:21;;:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;11249:39;;11209:92;10755:546;10645:656;11320:9;11313:16;;;10490:847;;;;;:::o;6772:317::-;6892:12;6843:11;:26;6863:4;6843:26;;;;;;;;;;;;;;;:46;3951:42;6843:46;;;;;;;;;;;;;;;;:61;6838:244;;;6971:17;6922:11;:26;6942:4;6922:26;;;;;;;;;;;;;;;:46;3951:42;6922:46;;;;;;;;;;;;;;;:66;;;;3951:42;7008:62;;7025:4;7008:62;;;7052:17;7008:62;;;;;;:::i;:::-;;;;;;;;6838:244;6772:317;:::o;15792:366::-;15862:27;15877:11;15862:14;:27::i;:::-;15900:21;15938:1;15924:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15900:40;;15969:4;15951;15956:1;15951:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15995:18;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15985:4;15990:1;15985:7;;;;;;;;:::i;:::-;;;;;;;:35;;;;;;;;;;;16031:18;;;;;;;;;;;:69;;;16101:11;16113:1;16115:4;16128;16134:15;16031:119;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15851:307;15792:366;:::o;16166:517::-;16228:21;16274:17;;;;;;;;;;;16252:19;;;;;;;;;;:39;;;;:::i;:::-;16228:63;;16323:1;16306:14;:18;;;16302:374;;;16341:23;16398:14;16367:45;;16376:19;;;;;;;;;;16367:28;;:6;:28;;;;:::i;:::-;:45;;;;:::i;:::-;16341:71;;16427:21;16480:14;16451:43;;16460:17;;;;;;;;;;;16451:26;;:6;:26;;;;:::i;:::-;:43;;;;:::i;:::-;16427:67;;16532:1;16514:15;:19;16509:74;;;16538:16;;;;;;;;;;;:25;;:42;16564:15;16538:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16509:74;16618:1;16602:13;:17;16597:68;;;16624:14;;;;;;;;;;;:23;;:38;16648:13;16624:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16597:68;16326:350;;16302:374;16217:466;16166:517;:::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;1430:117::-;1539:1;1536;1529: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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:619::-;4852:6;4860;4868;4917:2;4905:9;4896:7;4892:23;4888:32;4885:119;;;4923:79;;:::i;:::-;4885:119;5043:1;5068:53;5113:7;5104:6;5093:9;5089:22;5068:53;:::i;:::-;5058:63;;5014:117;5170:2;5196:53;5241:7;5232:6;5221:9;5217:22;5196:53;:::i;:::-;5186:63;;5141:118;5298:2;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5269:118;4775:619;;;;;:::o;5400:86::-;5435:7;5475:4;5468:5;5464:16;5453:27;;5400:86;;;:::o;5492:112::-;5575:22;5591:5;5575:22;:::i;:::-;5570:3;5563:35;5492:112;;:::o;5610:214::-;5699:4;5737:2;5726:9;5722:18;5714:26;;5750:67;5814:1;5803:9;5799:17;5790:6;5750:67;:::i;:::-;5610:214;;;;:::o;5830:89::-;5866:7;5906:6;5899:5;5895:18;5884:29;;5830:89;;;:::o;5925:120::-;5997:23;6014:5;5997:23;:::i;:::-;5990:5;5987:34;5977:62;;6035:1;6032;6025:12;5977:62;5925:120;:::o;6051:137::-;6096:5;6134:6;6121:20;6112:29;;6150:32;6176:5;6150:32;:::i;:::-;6051:137;;;;:::o;6194:470::-;6260:6;6268;6317:2;6305:9;6296:7;6292:23;6288:32;6285:119;;;6323:79;;:::i;:::-;6285:119;6443:1;6468:52;6512:7;6503:6;6492:9;6488:22;6468:52;:::i;:::-;6458:62;;6414:116;6569:2;6595:52;6639:7;6630:6;6619:9;6615:22;6595:52;:::i;:::-;6585:62;;6540:117;6194:470;;;;;:::o;6670:329::-;6729:6;6778:2;6766:9;6757:7;6753:23;6749:32;6746:119;;;6784:79;;:::i;:::-;6746:119;6904:1;6929:53;6974:7;6965:6;6954:9;6950:22;6929:53;:::i;:::-;6919:63;;6875:117;6670:329;;;;:::o;7005:118::-;7076:22;7092:5;7076:22;:::i;:::-;7069:5;7066:33;7056:61;;7113:1;7110;7103:12;7056:61;7005:118;:::o;7129:135::-;7173:5;7211:6;7198:20;7189:29;;7227:31;7252:5;7227:31;:::i;:::-;7129:135;;;;:::o;7270:466::-;7334:6;7342;7391:2;7379:9;7370:7;7366:23;7362:32;7359:119;;;7397:79;;:::i;:::-;7359:119;7517:1;7542:51;7585:7;7576:6;7565:9;7561:22;7542:51;:::i;:::-;7532:61;;7488:115;7642:2;7668:51;7711:7;7702:6;7691:9;7687:22;7668:51;:::i;:::-;7658:61;;7613:116;7270:466;;;;;:::o;7742:116::-;7812:21;7827:5;7812:21;:::i;:::-;7805:5;7802:32;7792:60;;7848:1;7845;7838:12;7792:60;7742:116;:::o;7864:133::-;7907:5;7945:6;7932:20;7923:29;;7961:30;7985:5;7961:30;:::i;:::-;7864:133;;;;:::o;8003:607::-;8074:6;8082;8090;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8265:1;8290:53;8335:7;8326:6;8315:9;8311:22;8290:53;:::i;:::-;8280:63;;8236:117;8392:2;8418:50;8460:7;8451:6;8440:9;8436:22;8418:50;:::i;:::-;8408:60;;8363:115;8517:2;8543:50;8585:7;8576:6;8565:9;8561:22;8543:50;:::i;:::-;8533:60;;8488:115;8003:607;;;;;:::o;8616:329::-;8675:6;8724:2;8712:9;8703:7;8699:23;8695:32;8692:119;;;8730:79;;:::i;:::-;8692:119;8850:1;8875:53;8920:7;8911:6;8900:9;8896:22;8875:53;:::i;:::-;8865:63;;8821:117;8616:329;;;;:::o;8951:115::-;9036:23;9053:5;9036:23;:::i;:::-;9031:3;9024:36;8951:115;;:::o;9072:430::-;9215:4;9253:2;9242:9;9238:18;9230:26;;9266:69;9332:1;9321:9;9317:17;9308:6;9266:69;:::i;:::-;9345:70;9411:2;9400:9;9396:18;9387:6;9345:70;:::i;:::-;9425;9491:2;9480:9;9476:18;9467:6;9425:70;:::i;:::-;9072:430;;;;;;:::o;9508:613::-;9582:6;9590;9598;9647:2;9635:9;9626:7;9622:23;9618:32;9615:119;;;9653:79;;:::i;:::-;9615:119;9773:1;9798:52;9842:7;9833:6;9822:9;9818:22;9798:52;:::i;:::-;9788:62;;9744:116;9899:2;9925:52;9969:7;9960:6;9949:9;9945:22;9925:52;:::i;:::-;9915:62;;9870:117;10026:2;10052:52;10096:7;10087:6;10076:9;10072:22;10052:52;:::i;:::-;10042:62;;9997:117;9508:613;;;;;:::o;10127:474::-;10195:6;10203;10252:2;10240:9;10231:7;10227:23;10223:32;10220:119;;;10258:79;;:::i;:::-;10220:119;10378:1;10403:53;10448:7;10439:6;10428:9;10424:22;10403:53;:::i;:::-;10393:63;;10349:117;10505:2;10531:53;10576:7;10567:6;10556:9;10552:22;10531:53;:::i;:::-;10521:63;;10476:118;10127:474;;;;;:::o;10607:104::-;10652:7;10681:24;10699:5;10681:24;:::i;:::-;10670:35;;10607:104;;;:::o;10717:138::-;10798:32;10824:5;10798:32;:::i;:::-;10791:5;10788:43;10778:71;;10845:1;10842;10835:12;10778:71;10717:138;:::o;10861:155::-;10915:5;10953:6;10940:20;10931:29;;10969:41;11004:5;10969:41;:::i;:::-;10861:155;;;;:::o;11022:345::-;11089:6;11138:2;11126:9;11117:7;11113:23;11109:32;11106:119;;;11144:79;;:::i;:::-;11106:119;11264:1;11289:61;11342:7;11333:6;11322:9;11318:22;11289:61;:::i;:::-;11279:71;;11235:125;11022:345;;;;:::o;11373:174::-;11513:26;11509:1;11501:6;11497:14;11490:50;11373:174;:::o;11553:366::-;11695:3;11716:67;11780:2;11775:3;11716:67;:::i;:::-;11709:74;;11792:93;11881:3;11792:93;:::i;:::-;11910:2;11905:3;11901:12;11894:19;;11553:366;;;:::o;11925:419::-;12091:4;12129:2;12118:9;12114:18;12106:26;;12178:9;12172:4;12168:20;12164:1;12153:9;12149:17;12142:47;12206:131;12332:4;12206:131;:::i;:::-;12198:139;;11925:419;;;:::o;12350:173::-;12490:25;12486:1;12478:6;12474:14;12467:49;12350:173;:::o;12529:366::-;12671:3;12692:67;12756:2;12751:3;12692:67;:::i;:::-;12685:74;;12768:93;12857:3;12768:93;:::i;:::-;12886:2;12881:3;12877:12;12870:19;;12529:366;;;:::o;12901:419::-;13067:4;13105:2;13094:9;13090:18;13082:26;;13154:9;13148:4;13144:20;13140:1;13129:9;13125:17;13118:47;13182:131;13308:4;13182:131;:::i;:::-;13174:139;;12901:419;;;:::o;13326:180::-;13374:77;13371:1;13364:88;13471:4;13468:1;13461:15;13495:4;13492:1;13485:15;13512:102;13554:8;13601:5;13598:1;13594:13;13573:34;;13512:102;;;:::o;13620:848::-;13681:5;13688:4;13712:6;13703:15;;13736:5;13727:14;;13750:712;13771:1;13761:8;13758:15;13750:712;;;13866:4;13861:3;13857:14;13851:4;13848:24;13845:50;;;13875:18;;:::i;:::-;13845:50;13925:1;13915:8;13911:16;13908:451;;;14340:4;14333:5;14329:16;14320:25;;13908:451;14390:4;14384;14380:15;14372:23;;14420:32;14443:8;14420:32;:::i;:::-;14408:44;;13750:712;;;13620:848;;;;;;;:::o;14474:1073::-;14528:5;14719:8;14709:40;;14740:1;14731:10;;14742:5;;14709:40;14768:4;14758:36;;14785:1;14776:10;;14787:5;;14758:36;14854:4;14902:1;14897:27;;;;14938:1;14933:191;;;;14847:277;;14897:27;14915:1;14906:10;;14917:5;;;14933:191;14978:3;14968:8;14965:17;14962:43;;;14985:18;;:::i;:::-;14962:43;15034:8;15031:1;15027:16;15018:25;;15069:3;15062:5;15059:14;15056:40;;;15076:18;;:::i;:::-;15056:40;15109:5;;;14847:277;;15233:2;15223:8;15220:16;15214:3;15208:4;15205:13;15201:36;15183:2;15173:8;15170:16;15165:2;15159:4;15156:12;15152:35;15136:111;15133:246;;;15289:8;15283:4;15279:19;15270:28;;15324:3;15317:5;15314:14;15311:40;;;15331:18;;:::i;:::-;15311:40;15364:5;;15133:246;15404:42;15442:3;15432:8;15426:4;15423:1;15404:42;:::i;:::-;15389:57;;;;15478:4;15473:3;15469:14;15462:5;15459:25;15456:51;;;15487:18;;:::i;:::-;15456:51;15536:4;15529:5;15525:16;15516:25;;14474:1073;;;;;;:::o;15553:281::-;15611:5;15635:23;15653:4;15635:23;:::i;:::-;15627:31;;15679:25;15695:8;15679:25;:::i;:::-;15667:37;;15723:104;15760:66;15750:8;15744:4;15723:104;:::i;:::-;15714:113;;15553:281;;;;:::o;15840:410::-;15880:7;15903:20;15921:1;15903:20;:::i;:::-;15898:25;;15937:20;15955:1;15937:20;:::i;:::-;15932:25;;15992:1;15989;15985:9;16014:30;16032:11;16014:30;:::i;:::-;16003:41;;16193:1;16184:7;16180:15;16177:1;16174:22;16154:1;16147:9;16127:83;16104:139;;16223:18;;:::i;:::-;16104:139;15888:362;15840:410;;;;:::o;16256:166::-;16396:18;16392:1;16384:6;16380:14;16373:42;16256:166;:::o;16428:366::-;16570:3;16591:67;16655:2;16650:3;16591:67;:::i;:::-;16584:74;;16667:93;16756:3;16667:93;:::i;:::-;16785:2;16780:3;16776:12;16769:19;;16428:366;;;:::o;16800:419::-;16966:4;17004:2;16993:9;16989:18;16981:26;;17053:9;17047:4;17043:20;17039:1;17028:9;17024:17;17017:47;17081:131;17207:4;17081:131;:::i;:::-;17073:139;;16800:419;;;:::o;17225:194::-;17265:4;17285:20;17303:1;17285:20;:::i;:::-;17280:25;;17319:20;17337:1;17319:20;:::i;:::-;17314:25;;17363:1;17360;17356:9;17348:17;;17387:1;17381:4;17378:11;17375:37;;;17392:18;;:::i;:::-;17375:37;17225:194;;;;:::o;17425:180::-;17473:77;17470:1;17463:88;17570:4;17567:1;17560:15;17594:4;17591:1;17584:15;17611:185;17651:1;17668:20;17686:1;17668:20;:::i;:::-;17663:25;;17702:20;17720:1;17702:20;:::i;:::-;17697:25;;17741:1;17731:35;;17746:18;;:::i;:::-;17731:35;17788:1;17785;17781:9;17776:14;;17611:185;;;;:::o;17802:191::-;17842:3;17861:20;17879:1;17861:20;:::i;:::-;17856:25;;17895:20;17913:1;17895:20;:::i;:::-;17890:25;;17938:1;17935;17931:9;17924:16;;17959:3;17956:1;17953:10;17950:36;;;17966:18;;:::i;:::-;17950:36;17802:191;;;;:::o;17999:160::-;18139:12;18135:1;18127:6;18123:14;18116:36;17999:160;:::o;18165:366::-;18307:3;18328:67;18392:2;18387:3;18328:67;:::i;:::-;18321:74;;18404:93;18493:3;18404:93;:::i;:::-;18522:2;18517:3;18513:12;18506:19;;18165:366;;;:::o;18537:419::-;18703:4;18741:2;18730:9;18726:18;18718:26;;18790:9;18784:4;18780:20;18776:1;18765:9;18761:17;18754:47;18818:131;18944:4;18818:131;:::i;:::-;18810:139;;18537:419;;;:::o;18962:164::-;19102:16;19098:1;19090:6;19086:14;19079:40;18962:164;:::o;19132:366::-;19274:3;19295:67;19359:2;19354:3;19295:67;:::i;:::-;19288:74;;19371:93;19460:3;19371:93;:::i;:::-;19489:2;19484:3;19480:12;19473:19;;19132:366;;;:::o;19504:419::-;19670:4;19708:2;19697:9;19693:18;19685:26;;19757:9;19751:4;19747:20;19743:1;19732:9;19728:17;19721:47;19785:131;19911:4;19785:131;:::i;:::-;19777:139;;19504:419;;;:::o;19929:165::-;20069:17;20065:1;20057:6;20053:14;20046:41;19929:165;:::o;20100:366::-;20242:3;20263:67;20327:2;20322:3;20263:67;:::i;:::-;20256:74;;20339:93;20428:3;20339:93;:::i;:::-;20457:2;20452:3;20448:12;20441:19;;20100:366;;;:::o;20472:419::-;20638:4;20676:2;20665:9;20661:18;20653:26;;20725:9;20719:4;20715:20;20711:1;20700:9;20696:17;20689:47;20753:131;20879:4;20753:131;:::i;:::-;20745:139;;20472:419;;;:::o;20897:188::-;20935:3;20954:18;20970:1;20954:18;:::i;:::-;20949:23;;20986:18;21002:1;20986:18;:::i;:::-;20981:23;;21027:1;21024;21020:9;21013:16;;21050:4;21045:3;21042:13;21039:39;;;21058:18;;:::i;:::-;21039:39;20897:188;;;;:::o;21091:168::-;21231:20;21227:1;21219:6;21215:14;21208:44;21091:168;:::o;21265:366::-;21407:3;21428:67;21492:2;21487:3;21428:67;:::i;:::-;21421:74;;21504:93;21593:3;21504:93;:::i;:::-;21622:2;21617:3;21613:12;21606:19;;21265:366;;;:::o;21637:419::-;21803:4;21841:2;21830:9;21826:18;21818:26;;21890:9;21884:4;21880:20;21876:1;21865:9;21861:17;21854:47;21918:131;22044:4;21918:131;:::i;:::-;21910:139;;21637:419;;;:::o;22062:166::-;22202:18;22198:1;22190:6;22186:14;22179:42;22062:166;:::o;22234:366::-;22376:3;22397:67;22461:2;22456:3;22397:67;:::i;:::-;22390:74;;22473:93;22562:3;22473:93;:::i;:::-;22591:2;22586:3;22582:12;22575:19;;22234:366;;;:::o;22606:419::-;22772:4;22810:2;22799:9;22795:18;22787:26;;22859:9;22853:4;22849:20;22845:1;22834:9;22830:17;22823:47;22887:131;23013:4;22887:131;:::i;:::-;22879:139;;22606:419;;;:::o;23031:193::-;23070:3;23089:19;23106:1;23089:19;:::i;:::-;23084:24;;23122:19;23139:1;23122:19;:::i;:::-;23117:24;;23164:1;23161;23157:9;23150:16;;23187:6;23182:3;23179:15;23176:41;;;23197:18;;:::i;:::-;23176:41;23031:193;;;;:::o;23230:165::-;23370:17;23366:1;23358:6;23354:14;23347:41;23230:165;:::o;23401:366::-;23543:3;23564:67;23628:2;23623:3;23564:67;:::i;:::-;23557:74;;23640:93;23729:3;23640:93;:::i;:::-;23758:2;23753:3;23749:12;23742:19;;23401:366;;;:::o;23773:419::-;23939:4;23977:2;23966:9;23962:18;23954:26;;24026:9;24020:4;24016:20;24012:1;24001:9;23997:17;23990:47;24054:131;24180:4;24054:131;:::i;:::-;24046:139;;23773:419;;;:::o;24198:159::-;24338:11;24334:1;24326:6;24322:14;24315:35;24198:159;:::o;24363:365::-;24505:3;24526:66;24590:1;24585:3;24526:66;:::i;:::-;24519:73;;24601:93;24690:3;24601:93;:::i;:::-;24719:2;24714:3;24710:12;24703:19;;24363:365;;;:::o;24734:419::-;24900:4;24938:2;24927:9;24923:18;24915:26;;24987:9;24981:4;24977:20;24973:1;24962:9;24958:17;24951:47;25015:131;25141:4;25015:131;:::i;:::-;25007:139;;24734:419;;;:::o;25159:165::-;25299:17;25295:1;25287:6;25283:14;25276:41;25159:165;:::o;25330:366::-;25472:3;25493:67;25557:2;25552:3;25493:67;:::i;:::-;25486:74;;25569:93;25658:3;25569:93;:::i;:::-;25687:2;25682:3;25678:12;25671:19;;25330:366;;;:::o;25702:419::-;25868:4;25906:2;25895:9;25891:18;25883:26;;25955:9;25949:4;25945:20;25941:1;25930:9;25926:17;25919:47;25983:131;26109:4;25983:131;:::i;:::-;25975:139;;25702:419;;;:::o;26127:179::-;26267:31;26263:1;26255:6;26251:14;26244:55;26127:179;:::o;26312:366::-;26454:3;26475:67;26539:2;26534:3;26475:67;:::i;:::-;26468:74;;26551:93;26640:3;26551:93;:::i;:::-;26669:2;26664:3;26660:12;26653:19;;26312:366;;;:::o;26684:419::-;26850:4;26888:2;26877:9;26873:18;26865:26;;26937:9;26931:4;26927:20;26923:1;26912:9;26908:17;26901:47;26965:131;27091:4;26965:131;:::i;:::-;26957:139;;26684:419;;;:::o;27109:171::-;27249:23;27245:1;27237:6;27233:14;27226:47;27109:171;:::o;27286:366::-;27428:3;27449:67;27513:2;27508:3;27449:67;:::i;:::-;27442:74;;27525:93;27614:3;27525:93;:::i;:::-;27643:2;27638:3;27634:12;27627:19;;27286:366;;;:::o;27658:419::-;27824:4;27862:2;27851:9;27847:18;27839:26;;27911:9;27905:4;27901:20;27897:1;27886:9;27882:17;27875:47;27939:131;28065:4;27939:131;:::i;:::-;27931:139;;27658:419;;;:::o;28083:143::-;28140:5;28171:6;28165:13;28156:22;;28187:33;28214:5;28187:33;:::i;:::-;28083:143;;;;:::o;28232:351::-;28302:6;28351:2;28339:9;28330:7;28326:23;28322:32;28319:119;;;28357:79;;:::i;:::-;28319:119;28477:1;28502:64;28558:7;28549:6;28538:9;28534:22;28502:64;:::i;:::-;28492:74;;28448:128;28232:351;;;;:::o;28589:332::-;28710:4;28748:2;28737:9;28733:18;28725:26;;28761:71;28829:1;28818:9;28814:17;28805:6;28761:71;:::i;:::-;28842:72;28910:2;28899:9;28895:18;28886:6;28842:72;:::i;:::-;28589:332;;;;;:::o;28927:98::-;28978:6;29012:5;29006:12;28996:22;;28927:98;;;:::o;29031:147::-;29132:11;29169:3;29154:18;;29031:147;;;;:::o;29184:386::-;29288:3;29316:38;29348:5;29316:38;:::i;:::-;29370:88;29451:6;29446:3;29370:88;:::i;:::-;29363:95;;29467:65;29525:6;29520:3;29513:4;29506:5;29502:16;29467:65;:::i;:::-;29557:6;29552:3;29548:16;29541:23;;29292:278;29184:386;;;;:::o;29576:271::-;29706:3;29728:93;29817:3;29808:6;29728:93;:::i;:::-;29721:100;;29838:3;29831:10;;29576:271;;;;:::o;29853:173::-;29993:25;29989:1;29981:6;29977:14;29970:49;29853:173;:::o;30032:366::-;30174:3;30195:67;30259:2;30254:3;30195:67;:::i;:::-;30188:74;;30271:93;30360:3;30271:93;:::i;:::-;30389:2;30384:3;30380:12;30373:19;;30032:366;;;:::o;30404:419::-;30570:4;30608:2;30597:9;30593:18;30585:26;;30657:9;30651:4;30647:20;30643:1;30632:9;30628:17;30621:47;30685:131;30811:4;30685:131;:::i;:::-;30677:139;;30404:419;;;:::o;30829:60::-;30857:3;30878:5;30871:12;;30829:60;;;:::o;30895:142::-;30945:9;30978:53;30996:34;31005:24;31023:5;31005:24;:::i;:::-;30996:34;:::i;:::-;30978:53;:::i;:::-;30965:66;;30895:142;;;:::o;31043:126::-;31093:9;31126:37;31157:5;31126:37;:::i;:::-;31113:50;;31043:126;;;:::o;31175:134::-;31233:9;31266:37;31297:5;31266:37;:::i;:::-;31253:50;;31175:134;;;:::o;31315:147::-;31410:45;31449:5;31410:45;:::i;:::-;31405:3;31398:58;31315:147;;:::o;31468:238::-;31569:4;31607:2;31596:9;31592:18;31584:26;;31620:79;31696:1;31685:9;31681:17;31672:6;31620:79;:::i;:::-;31468:238;;;;:::o;31712:179::-;31852:31;31848:1;31840:6;31836:14;31829:55;31712:179;:::o;31897:366::-;32039:3;32060:67;32124:2;32119:3;32060:67;:::i;:::-;32053:74;;32136:93;32225:3;32136:93;:::i;:::-;32254:2;32249:3;32245:12;32238:19;;31897:366;;;:::o;32269:419::-;32435:4;32473:2;32462:9;32458:18;32450:26;;32522:9;32516:4;32512:20;32508:1;32497:9;32493:17;32486:47;32550:131;32676:4;32550:131;:::i;:::-;32542:139;;32269:419;;;:::o;32694:161::-;32834:13;32830:1;32822:6;32818:14;32811:37;32694:161;:::o;32861:366::-;33003:3;33024:67;33088:2;33083:3;33024:67;:::i;:::-;33017:74;;33100:93;33189:3;33100:93;:::i;:::-;33218:2;33213:3;33209:12;33202:19;;32861:366;;;:::o;33233:419::-;33399:4;33437:2;33426:9;33422:18;33414:26;;33486:9;33480:4;33476:20;33472:1;33461:9;33457:17;33450:47;33514:131;33640:4;33514:131;:::i;:::-;33506:139;;33233:419;;;:::o;33658:167::-;33798:19;33794:1;33786:6;33782:14;33775:43;33658:167;:::o;33831:366::-;33973:3;33994:67;34058:2;34053:3;33994:67;:::i;:::-;33987:74;;34070:93;34159:3;34070:93;:::i;:::-;34188:2;34183:3;34179:12;34172:19;;33831:366;;;:::o;34203:419::-;34369:4;34407:2;34396:9;34392:18;34384:26;;34456:9;34450:4;34446:20;34442:1;34431:9;34427:17;34420:47;34484:131;34610:4;34484:131;:::i;:::-;34476:139;;34203:419;;;:::o;34628:85::-;34673:7;34702:5;34691:16;;34628:85;;;:::o;34719:158::-;34777:9;34810:61;34828:42;34837:32;34863:5;34837:32;:::i;:::-;34828:42;:::i;:::-;34810:61;:::i;:::-;34797:74;;34719:158;;;:::o;34883:147::-;34978:45;35017:5;34978:45;:::i;:::-;34973:3;34966:58;34883:147;;:::o;35036:807::-;35285:4;35323:3;35312:9;35308:19;35300:27;;35337:71;35405:1;35394:9;35390:17;35381:6;35337:71;:::i;:::-;35418:72;35486:2;35475:9;35471:18;35462:6;35418:72;:::i;:::-;35500:80;35576:2;35565:9;35561:18;35552:6;35500:80;:::i;:::-;35590;35666:2;35655:9;35651:18;35642:6;35590:80;:::i;:::-;35680:73;35748:3;35737:9;35733:19;35724:6;35680:73;:::i;:::-;35763;35831:3;35820:9;35816:19;35807:6;35763:73;:::i;:::-;35036:807;;;;;;;;;:::o;35849:143::-;35906:5;35937:6;35931:13;35922:22;;35953:33;35980:5;35953:33;:::i;:::-;35849:143;;;;:::o;35998:663::-;36086:6;36094;36102;36151:2;36139:9;36130:7;36126:23;36122:32;36119:119;;;36157:79;;:::i;:::-;36119:119;36277:1;36302:64;36358:7;36349:6;36338:9;36334:22;36302:64;:::i;:::-;36292:74;;36248:128;36415:2;36441:64;36497:7;36488:6;36477:9;36473:22;36441:64;:::i;:::-;36431:74;;36386:129;36554:2;36580:64;36636:7;36627:6;36616:9;36612:22;36580:64;:::i;:::-;36570:74;;36525:129;35998:663;;;;;:::o;36667:180::-;36715:77;36712:1;36705:88;36812:4;36809:1;36802:15;36836:4;36833:1;36826:15;36853:180;36901:77;36898:1;36891:88;36998:4;36995:1;36988:15;37022:4;37019:1;37012:15;37039:114;37106:6;37140:5;37134:12;37124:22;;37039:114;;;:::o;37159:184::-;37258:11;37292:6;37287:3;37280:19;37332:4;37327:3;37323:14;37308:29;;37159:184;;;;:::o;37349:132::-;37416:4;37439:3;37431:11;;37469:4;37464:3;37460:14;37452:22;;37349:132;;;:::o;37487:108::-;37564:24;37582:5;37564:24;:::i;:::-;37559:3;37552:37;37487:108;;:::o;37601:179::-;37670:10;37691:46;37733:3;37725:6;37691:46;:::i;:::-;37769:4;37764:3;37760:14;37746:28;;37601:179;;;;:::o;37786:113::-;37856:4;37888;37883:3;37879:14;37871:22;;37786:113;;;:::o;37935:732::-;38054:3;38083:54;38131:5;38083:54;:::i;:::-;38153:86;38232:6;38227:3;38153:86;:::i;:::-;38146:93;;38263:56;38313:5;38263:56;:::i;:::-;38342:7;38373:1;38358:284;38383:6;38380:1;38377:13;38358:284;;;38459:6;38453:13;38486:63;38545:3;38530:13;38486:63;:::i;:::-;38479:70;;38572:60;38625:6;38572:60;:::i;:::-;38562:70;;38418:224;38405:1;38402;38398:9;38393:14;;38358:284;;;38362:14;38658:3;38651:10;;38059:608;;;37935:732;;;;:::o;38673:831::-;38936:4;38974:3;38963:9;38959:19;38951:27;;38988:71;39056:1;39045:9;39041:17;39032:6;38988:71;:::i;:::-;39069:80;39145:2;39134:9;39130:18;39121:6;39069:80;:::i;:::-;39196:9;39190:4;39186:20;39181:2;39170:9;39166:18;39159:48;39224:108;39327:4;39318:6;39224:108;:::i;:::-;39216:116;;39342:72;39410:2;39399:9;39395:18;39386:6;39342:72;:::i;:::-;39424:73;39492:3;39481:9;39477:19;39468:6;39424:73;:::i;:::-;38673:831;;;;;;;;:::o

Swarm Source

ipfs://a73bb37c5753b9f80c41e26e2ab147a3f2df035b4047372eb6aeac640cd0ecfc
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.