ETH Price: $3,489.68 (+0.04%)
Gas: 2 Gwei

Token

FUR (FUR)
 

Overview

Max Total Supply

1,000,000,000 FUR

Holders

623

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
FURecosystem

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-12
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.18;

abstract contract Context {

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function 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);
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract FURecosystem is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "FUR";
    string private _symbol = "FUR";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x244d7eE82d5969817fD9fEAE9EB5B6006fe58aEC); // Marketing Address  4%
    address payable public developmentWalletAddress = payable(0xd711347C87ec0eE4d53b6bCBD89db8b10DFb6855); // Utility development Address 1%
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 4;
    uint256 public _buyDevelopmentFee = 1;
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 4;
    uint256 public _sellDevelopmentFee = 1;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 8;
    uint256 public _developmentShare = 2;

    uint256 public _totalTaxIfBuying = 5;
    uint256 public _totalTaxIfSelling = 5;
    uint256 public _totalDistributionShares = 10;

    uint256 private _totalSupply = 1000 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 1000 * 10**6 * 10**9;
    uint256 public _walletMax = 1000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 250000 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevelopmentFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevelopmentFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_developmentShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

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

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

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyDevelopmentFee = newDevelopmentTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevelopmentFee);
        require(_totalTaxIfBuying <= 10, "Buy tax must be less than 10%");
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellDevelopmentFee = newDevelopmentTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevelopmentFee);
        require(_totalTaxIfSelling <= 10, "Sell tax must be less than 10%");
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newDevelopmentShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _developmentShare = newDevelopmentShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_developmentShare);
        require(_totalDistributionShares <=20, "Distribution Shares must be less than 20%");
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= _totalSupply / 1000, "Cannot set MaxTxAmount lower than 0.1%");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= _totalSupply / 1000, "Cannot set MaxWallet lower than 0.1%");
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        require(newLimit > 1, "NumTokensBeforeSwap should be not 0");
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setDevelopmentWalletAddress(address newAddress) external onlyOwner() {
        developmentWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHDevelopment = amountReceived.mul(_developmentShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHDevelopment);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if(amountETHDevelopment > 0)
            transferToAddressETH(developmentWalletAddress, amountETHDevelopment);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDevelopmentWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600381526020017f4655520000000000000000000000000000000000000000000000000000000000815250600390816200004a919062000d7b565b506040518060400160405280600381526020017f46555200000000000000000000000000000000000000000000000000000000008152506004908162000091919062000d7b565b506009600560006101000a81548160ff021916908360ff16021790555073244d7ee82d5969817fd9feae9eb5b6006fe58aec600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d711347c87ec0ee4d53b6bcbd89db8b10dfb6855600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600d556004600e556001600f5560006010556004601155600160125560006013556008601455600260155560056016556005601755600a601855670de0b6b3a7640000601955670de0b6b3a7640000601a55670de0b6b3a7640000601b5565e35fa931a000601c556001601e60156101000a81548160ff0219169083151502179055506000601e60166101000a81548160ff0219169083151502179055506001601e60176101000a81548160ff0219169083151502179055503480156200025557600080fd5b5060006200026862000a6d60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200036b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000391919062000ecc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041f919062000ecc565b6040518363ffffffff1660e01b81526004016200043e92919062000f0f565b6020604051808303816000875af11580156200045e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000484919062000ecc565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601954600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160096000620005c062000a7560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006a2600f546200068e600e54600d5462000a9e60201b62002a0f1790919060201c565b62000a9e60201b62002a0f1790919060201c565b601681905550620006e1601254620006cd60115460105462000a9e60201b62002a0f1790919060201c565b62000a9e60201b62002a0f1790919060201c565b601781905550620007206015546200070c60145460135462000a9e60201b62002a0f1790919060201c565b62000a9e60201b62002a0f1790919060201c565b6018819055506001600a60006200073c62000a7560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60006200087562000a7560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060195460076000620009af62000a6d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620009fd62000a6d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60195460405162000a5e919062000f4d565b60405180910390a35062001057565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000aaf919062000f99565b90508381101562000af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aee9062001035565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b8357607f821691505b60208210810362000b995762000b9862000b3b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bc4565b62000c0f868362000bc4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c5c62000c5662000c508462000c27565b62000c31565b62000c27565b9050919050565b6000819050919050565b62000c788362000c3b565b62000c9062000c878262000c63565b84845462000bd1565b825550505050565b600090565b62000ca762000c98565b62000cb481848462000c6d565b505050565b5b8181101562000cdc5762000cd060008262000c9d565b60018101905062000cba565b5050565b601f82111562000d2b5762000cf58162000b9f565b62000d008462000bb4565b8101602085101562000d10578190505b62000d2862000d1f8562000bb4565b83018262000cb9565b50505b505050565b600082821c905092915050565b600062000d506000198460080262000d30565b1980831691505092915050565b600062000d6b838362000d3d565b9150826002028217905092915050565b62000d868262000b01565b67ffffffffffffffff81111562000da25762000da162000b0c565b5b62000dae825462000b6a565b62000dbb82828562000ce0565b600060209050601f83116001811462000df3576000841562000dde578287015190505b62000dea858262000d5d565b86555062000e5a565b601f19841662000e038662000b9f565b60005b8281101562000e2d5784890151825560018201915060208501945060208101905062000e06565b8683101562000e4d578489015162000e49601f89168262000d3d565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e948262000e67565b9050919050565b62000ea68162000e87565b811462000eb257600080fd5b50565b60008151905062000ec68162000e9b565b92915050565b60006020828403121562000ee55762000ee462000e62565b5b600062000ef58482850162000eb5565b91505092915050565b62000f098162000e87565b82525050565b600060408201905062000f26600083018562000efe565b62000f35602083018462000efe565b9392505050565b62000f478162000c27565b82525050565b600060208201905062000f64600083018462000f3c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fa68262000c27565b915062000fb38362000c27565b925082820190508082111562000fce5762000fcd62000f6a565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200101d601b8362000fd4565b91506200102a8262000fe5565b602082019050919050565b6000602082019050818103600083015262001050816200100e565b9050919050565b6080516150646200107a6000396000818161143d015261146901526150646000f3fe6080604052600436106103a65760003560e01c806388790a68116101e7578063c816841b1161010d578063ec28438a116100a0578063f2fde38b1161006f578063f2fde38b14610dc5578063f331c7b014610dee578063f84ba65d14610e19578063f872858a14610e42576103ad565b8063ec28438a14610d1f578063ef422a1814610d48578063f0cd1dac14610d71578063f1d5f51714610d9c576103ad565b8063da00097d116100dc578063da00097d14610c63578063dc44b6a014610c8e578063dd46706414610cb9578063dd62ed3e14610ce2576103ad565b8063c816841b14610ba5578063c860795214610bd0578063c867d60b14610bfb578063d158272d14610c38576103ad565b8063a0dd804011610185578063a9059cbb11610154578063a9059cbb14610aeb578063c2d4640e14610b28578063c49b9a8014610b51578063c5d2418914610b7a576103ad565b8063a0dd804014610a43578063a457c2d714610a6e578063a5d69d1f14610aab578063a69df4b514610ad4576103ad565b8063914eb66a116101c1578063914eb66a146109ab57806395d89b41146109c2578063a073d37f146109ed578063a08e671f14610a18576103ad565b806388790a68146109185780638b42507f146109435780638da5cb5b14610980576103ad565b80633b97084a116102cc578063602bc62b1161026a5780637d7846ff116102395780637d7846ff14610870578063807c2d9c1461089957806382eefb43146108c4578063844d591c146108ef576103ad565b8063602bc62b146107b257806361a23c69146107dd57806370a08231146108085780637d1db4a514610845576103ad565b80634cb80fd5116102a65780634cb80fd5146106f65780635342acb41461071f578063557ed1ba1461075c57806357a5802f14610787576103ad565b80633b97084a146106655780633ecad2711461068e5780634a74bb02146106cb576103ad565b80632198cf6c116103445780632b112e49116103135780632b112e49146105a7578063313ce567146105d257806337249b65146105fd5780633950935114610628576103ad565b80632198cf6c146104ed57806323b872dd146105165780632563ae831461055357806327c8f8351461057c576103ad565b80631694505e116103805780631694505e1461044357806318160ddd1461046e578063182a4760146104995780631870517a146104c4576103ad565b806306fdde03146103b257806308733214146103dd578063095ea7b314610406576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e6d565b6040516103d49190613e1d565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190613e7a565b610eff565b005b34801561041257600080fd5b5061042d60048036038101906104289190613f2b565b611025565b60405161043a9190613f86565b60405180910390f35b34801561044f57600080fd5b50610458611043565b6040516104659190614000565b60405180910390f35b34801561047a57600080fd5b50610483611069565b604051610490919061402a565b60405180910390f35b3480156104a557600080fd5b506104ae611073565b6040516104bb9190614066565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190613e7a565b611099565b005b3480156104f957600080fd5b50610514600480360381019061050f91906140ad565b6111bf565b005b34801561052257600080fd5b5061053d600480360381019061053891906140ed565b6112af565b60405161054a9190613f86565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190614140565b611389565b005b34801561058857600080fd5b5061059161143b565b60405161059e919061417c565b60405180910390f35b3480156105b357600080fd5b506105bc61145f565b6040516105c9919061402a565b60405180910390f35b3480156105de57600080fd5b506105e76114a3565b6040516105f491906141b3565b60405180910390f35b34801561060957600080fd5b506106126114ba565b60405161061f919061402a565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613f2b565b6114c0565b60405161065c9190613f86565b60405180910390f35b34801561067157600080fd5b5061068c600480360381019061068791906141ce565b611573565b005b34801561069a57600080fd5b506106b560048036038101906106b091906141fb565b611655565b6040516106c29190613f86565b60405180910390f35b3480156106d757600080fd5b506106e0611675565b6040516106ed9190613f86565b60405180910390f35b34801561070257600080fd5b5061071d600480360381019061071891906141fb565b611688565b005b34801561072b57600080fd5b50610746600480360381019061074191906141fb565b611761565b6040516107539190613f86565b60405180910390f35b34801561076857600080fd5b50610771611781565b60405161077e919061402a565b60405180910390f35b34801561079357600080fd5b5061079c611789565b6040516107a9919061402a565b60405180910390f35b3480156107be57600080fd5b506107c761178f565b6040516107d4919061402a565b60405180910390f35b3480156107e957600080fd5b506107f2611799565b6040516107ff919061402a565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a91906141fb565b61179f565b60405161083c919061402a565b60405180910390f35b34801561085157600080fd5b5061085a6117e8565b604051610867919061402a565b60405180910390f35b34801561087c57600080fd5b50610897600480360381019061089291906141fb565b6117ee565b005b3480156108a557600080fd5b506108ae6118c7565b6040516108bb919061402a565b60405180910390f35b3480156108d057600080fd5b506108d96118cd565b6040516108e6919061402a565b60405180910390f35b3480156108fb57600080fd5b50610916600480360381019061091191906140ad565b6118d3565b005b34801561092457600080fd5b5061092d6119c3565b60405161093a919061402a565b60405180910390f35b34801561094f57600080fd5b5061096a600480360381019061096591906141fb565b6119c9565b6040516109779190613f86565b60405180910390f35b34801561098c57600080fd5b506109956119e9565b6040516109a2919061417c565b60405180910390f35b3480156109b757600080fd5b506109c0611a12565b005b3480156109ce57600080fd5b506109d7611b65565b6040516109e49190613e1d565b60405180910390f35b3480156109f957600080fd5b50610a02611bf7565b604051610a0f919061402a565b60405180910390f35b348015610a2457600080fd5b50610a2d611c01565b604051610a3a919061402a565b60405180910390f35b348015610a4f57600080fd5b50610a58611c07565b604051610a65919061402a565b60405180910390f35b348015610a7a57600080fd5b50610a956004803603810190610a909190613f2b565b611c0d565b604051610aa29190613f86565b60405180910390f35b348015610ab757600080fd5b50610ad26004803603810190610acd9190614140565b611cda565b005b348015610ae057600080fd5b50610ae9611d8c565b005b348015610af757600080fd5b50610b126004803603810190610b0d9190613f2b565b611f60565b604051610b1f9190613f86565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a9190613e7a565b611f7f565b005b348015610b5d57600080fd5b50610b786004803603810190610b739190614140565b6120a5565b005b348015610b8657600080fd5b50610b8f61218e565b604051610b9c919061402a565b60405180910390f35b348015610bb157600080fd5b50610bba612194565b604051610bc7919061417c565b60405180910390f35b348015610bdc57600080fd5b50610be56121ba565b604051610bf2919061402a565b60405180910390f35b348015610c0757600080fd5b50610c226004803603810190610c1d91906141fb565b6121c0565b604051610c2f9190613f86565b60405180910390f35b348015610c4457600080fd5b50610c4d6121e0565b604051610c5a9190614066565b60405180910390f35b348015610c6f57600080fd5b50610c78612206565b604051610c859190613f86565b60405180910390f35b348015610c9a57600080fd5b50610ca3612219565b604051610cb0919061402a565b60405180910390f35b348015610cc557600080fd5b50610ce06004803603810190610cdb91906141ce565b61221f565b005b348015610cee57600080fd5b50610d096004803603810190610d049190614228565b6123e6565b604051610d16919061402a565b60405180910390f35b348015610d2b57600080fd5b50610d466004803603810190610d4191906141ce565b61246d565b005b348015610d5457600080fd5b50610d6f6004803603810190610d6a91906140ad565b61255e565b005b348015610d7d57600080fd5b50610d8661264e565b604051610d93919061402a565b60405180910390f35b348015610da857600080fd5b50610dc36004803603810190610dbe91906141ce565b612654565b005b348015610dd157600080fd5b50610dec6004803603810190610de791906141fb565b612745565b005b348015610dfa57600080fd5b50610e03612906565b604051610e10919061402a565b60405180910390f35b348015610e2557600080fd5b50610e406004803603810190610e3b91906140ad565b61290c565b005b348015610e4e57600080fd5b50610e576129fc565b604051610e649190613f86565b60405180910390f35b606060038054610e7c90614297565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea890614297565b8015610ef55780601f10610eca57610100808354040283529160200191610ef5565b820191906000526020600020905b815481529060010190602001808311610ed857829003601f168201915b5050505050905090565b610f07612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b90614314565b60405180910390fd5b826010819055508160118190555080601281905550610fd4601254610fc6601154601054612a0f90919063ffffffff16565b612a0f90919063ffffffff16565b601781905550600a6017541115611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790614380565b60405180910390fd5b505050565b6000611039611032612a6d565b8484612a75565b6001905092915050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601954905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110a1612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112590614314565b60405180910390fd5b82600d8190555081600e8190555080600f8190555061116e600f54611160600e54600d54612a0f90919063ffffffff16565b612a0f90919063ffffffff16565b601681905550600a60165411156111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b1906143ec565b60405180910390fd5b505050565b6111c7612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90614314565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006112bc848484612c3e565b5061137e846112c9612a6d565b61137985604051806060016040528060288152602001614fe260289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061132f612a6d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132219092919063ffffffff16565b612a75565b600190509392505050565b611391612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614314565b60405180910390fd5b80601e60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061149e61148d7f000000000000000000000000000000000000000000000000000000000000000061179f565b60195461328590919063ffffffff16565b905090565b6000600560009054906101000a900460ff16905090565b60125481565b60006115696114cd612a6d565b8461156485600860006114de612a6d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0f90919063ffffffff16565b612a75565b6001905092915050565b61157b612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90614314565b60405180910390fd5b6001811161164b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116429061447e565b60405180910390fd5b80601c8190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b601e60159054906101000a900460ff1681565b611690612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490614314565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60135481565b6000600254905090565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b6117f6612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90614314565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b60175481565b6118db612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90614314565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a1a612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90614314565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060048054611b7490614297565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba090614297565b8015611bed5780601f10611bc257610100808354040283529160200191611bed565b820191906000526020600020905b815481529060010190602001808311611bd057829003601f168201915b5050505050905090565b6000601c54905090565b60185481565b60155481565b6000611cd0611c1a612a6d565b84611ccb8560405180606001604052806025815260200161500a6025913960086000611c44612a6d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132219092919063ffffffff16565b612a75565b6001905092915050565b611ce2612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6690614314565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390614510565b60405180910390fd5b6002544211611e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e579061457c565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611f74611f6d612a6d565b8484612c3e565b506001905092915050565b611f87612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b90614314565b60405180910390fd5b826013819055508160148190555080601581905550612054601554612046601454601354612a0f90919063ffffffff16565b612a0f90919063ffffffff16565b601881905550601460185411156120a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120979061460e565b60405180910390fd5b505050565b6120ad612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213190614314565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121839190613f86565b60405180910390a150565b600e5481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600a6020528060005260406000206000915054906101000a900460ff1681565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60169054906101000a900460ff1681565b600d5481565b612227612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab90614314565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042612362919061465d565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612475612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f990614314565b60405180910390fd5b6103e860195461251291906146c0565b811015612554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254b90614763565b60405180910390fd5b80601a8190555050565b612566612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea90614314565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b61265c612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e090614314565b60405180910390fd5b6103e86019546126f991906146c0565b81101561273b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612732906147f5565b60405180910390fd5b80601b8190555050565b61274d612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d190614314565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614887565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b612914612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299890614314565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601e60179054906101000a900460ff1681565b6000808284612a1e919061465d565b905083811015612a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5a906148f3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb90614985565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a90614a17565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c31919061402a565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca590614aa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1490614b3b565b60405180910390fd5b601e60149054906101000a900460ff1615612d4457612d3d8484846132cf565b905061321a565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612de85750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3357601a54821115612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990614bcd565b60405180910390fd5b5b6000612e3e3061179f565b90506000601c548210159050808015612e645750601e60149054906101000a900460ff16155b8015612eba5750600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ed25750601e60159054906101000a900460ff165b15612efc57601e60169054906101000a900460ff1615612ef257601c5491505b612efb826134a2565b5b612f85846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132219092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061306b5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61307f5761307a878787613693565b613081565b845b9050601e60179054906101000a900460ff1680156130e95750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561311857601b5461310c826130fe8961179f565b612a0f90919063ffffffff16565b111561311757600080fd5b5b61316a81600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0f90919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161320a919061402a565b60405180910390a3600193505050505b9392505050565b6000838311158290613269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132609190613e1d565b60405180910390fd5b50600083856132789190614bed565b9050809150509392505050565b60006132c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613221565b905092915050565b600061335a826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132219092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133ef82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0f90919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161348f919061402a565b60405180910390a3600190509392505050565b6001601e60146101000a81548160ff02191690831515021790555060006134fb60026134ed6018546134df601354876138ba90919063ffffffff16565b61393490919063ffffffff16565b61393490919063ffffffff16565b90506000613512828461328590919063ffffffff16565b905061351d8161397e565b6000479050600061354e61353d600260135461393490919063ffffffff16565b60185461328590919063ffffffff16565b9050600061358c600261357e84613570601354886138ba90919063ffffffff16565b61393490919063ffffffff16565b61393490919063ffffffff16565b905060006135b7836135a9601554876138ba90919063ffffffff16565b61393490919063ffffffff16565b905060006135e0826135d2858861328590919063ffffffff16565b61328590919063ffffffff16565b9050600081111561361857613617600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613bfa565b5b600082111561364e5761364d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613bfa565b5b60008311801561365e5750600087115b1561366e5761366d8784613c45565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561371b576137146064613706601654866138ba90919063ffffffff16565b61393490919063ffffffff16565b9050613799565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613798576137956064613787601754866138ba90919063ffffffff16565b61393490919063ffffffff16565b90505b5b600081111561389d576137f481600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0f90919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613894919061402a565b60405180910390a35b6138b0818461328590919063ffffffff16565b9150509392505050565b60008083036138cc576000905061392e565b600082846138da9190614c21565b90508284826138e991906146c0565b14613929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392090614cd5565b60405180910390fd5b809150505b92915050565b600061397683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d2a565b905092915050565b6000600267ffffffffffffffff81111561399b5761399a614cf5565b5b6040519080825280602002602001820160405280156139c95781602001602082028036833780820191505090505b50905030816000815181106139e1576139e0614d24565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aac9190614d68565b81600181518110613ac057613abf614d24565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b2730601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a75565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b8b959493929190614e8e565b600060405180830381600087803b158015613ba557600080fd5b505af1158015613bb9573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613bee929190614ee8565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c40573d6000803e3d6000fd5b505050565b613c7230601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a75565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cbe6119e9565b426040518863ffffffff1660e01b8152600401613ce096959493929190614f18565b60606040518083038185885af1158015613cfe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d239190614f8e565b5050505050565b60008083118290613d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d689190613e1d565b60405180910390fd5b5060008385613d8091906146c0565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dc7578082015181840152602081019050613dac565b60008484015250505050565b6000601f19601f8301169050919050565b6000613def82613d8d565b613df98185613d98565b9350613e09818560208601613da9565b613e1281613dd3565b840191505092915050565b60006020820190508181036000830152613e378184613de4565b905092915050565b600080fd5b6000819050919050565b613e5781613e44565b8114613e6257600080fd5b50565b600081359050613e7481613e4e565b92915050565b600080600060608486031215613e9357613e92613e3f565b5b6000613ea186828701613e65565b9350506020613eb286828701613e65565b9250506040613ec386828701613e65565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ef882613ecd565b9050919050565b613f0881613eed565b8114613f1357600080fd5b50565b600081359050613f2581613eff565b92915050565b60008060408385031215613f4257613f41613e3f565b5b6000613f5085828601613f16565b9250506020613f6185828601613e65565b9150509250929050565b60008115159050919050565b613f8081613f6b565b82525050565b6000602082019050613f9b6000830184613f77565b92915050565b6000819050919050565b6000613fc6613fc1613fbc84613ecd565b613fa1565b613ecd565b9050919050565b6000613fd882613fab565b9050919050565b6000613fea82613fcd565b9050919050565b613ffa81613fdf565b82525050565b60006020820190506140156000830184613ff1565b92915050565b61402481613e44565b82525050565b600060208201905061403f600083018461401b565b92915050565b600061405082613ecd565b9050919050565b61406081614045565b82525050565b600060208201905061407b6000830184614057565b92915050565b61408a81613f6b565b811461409557600080fd5b50565b6000813590506140a781614081565b92915050565b600080604083850312156140c4576140c3613e3f565b5b60006140d285828601613f16565b92505060206140e385828601614098565b9150509250929050565b60008060006060848603121561410657614105613e3f565b5b600061411486828701613f16565b935050602061412586828701613f16565b925050604061413686828701613e65565b9150509250925092565b60006020828403121561415657614155613e3f565b5b600061416484828501614098565b91505092915050565b61417681613eed565b82525050565b6000602082019050614191600083018461416d565b92915050565b600060ff82169050919050565b6141ad81614197565b82525050565b60006020820190506141c860008301846141a4565b92915050565b6000602082840312156141e4576141e3613e3f565b5b60006141f284828501613e65565b91505092915050565b60006020828403121561421157614210613e3f565b5b600061421f84828501613f16565b91505092915050565b6000806040838503121561423f5761423e613e3f565b5b600061424d85828601613f16565b925050602061425e85828601613f16565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142af57607f821691505b6020821081036142c2576142c1614268565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142fe602083613d98565b9150614309826142c8565b602082019050919050565b6000602082019050818103600083015261432d816142f1565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e203130250000600082015250565b600061436a601e83613d98565b915061437582614334565b602082019050919050565b600060208201905081810360008301526143998161435d565b9050919050565b7f42757920746178206d757374206265206c657373207468616e20313025000000600082015250565b60006143d6601d83613d98565b91506143e1826143a0565b602082019050919050565b60006020820190508181036000830152614405816143c9565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f60008201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b6000614468602383613d98565b91506144738261440c565b604082019050919050565b600060208201905081810360008301526144978161445b565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006144fa602383613d98565b91506145058261449e565b604082019050919050565b60006020820190508181036000830152614529816144ed565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000614566601f83613d98565b915061457182614530565b602082019050919050565b6000602082019050818103600083015261459581614559565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c65737360008201527f207468616e203230250000000000000000000000000000000000000000000000602082015250565b60006145f8602983613d98565b91506146038261459c565b604082019050919050565b60006020820190508181036000830152614627816145eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061466882613e44565b915061467383613e44565b925082820190508082111561468b5761468a61462e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146cb82613e44565b91506146d683613e44565b9250826146e6576146e5614691565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f7765722074686160008201527f6e20302e31250000000000000000000000000000000000000000000000000000602082015250565b600061474d602683613d98565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b60006147df602483613d98565b91506147ea82614783565b604082019050919050565b6000602082019050818103600083015261480e816147d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614871602683613d98565b915061487c82614815565b604082019050919050565b600060208201905081810360008301526148a081614864565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006148dd601b83613d98565b91506148e8826148a7565b602082019050919050565b6000602082019050818103600083015261490c816148d0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496f602483613d98565b915061497a82614913565b604082019050919050565b6000602082019050818103600083015261499e81614962565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a01602283613d98565b9150614a0c826149a5565b604082019050919050565b60006020820190508181036000830152614a30816149f4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a93602583613d98565b9150614a9e82614a37565b604082019050919050565b60006020820190508181036000830152614ac281614a86565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b25602383613d98565b9150614b3082614ac9565b604082019050919050565b60006020820190508181036000830152614b5481614b18565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614bb7602883613d98565b9150614bc282614b5b565b604082019050919050565b60006020820190508181036000830152614be681614baa565b9050919050565b6000614bf882613e44565b9150614c0383613e44565b9250828203905081811115614c1b57614c1a61462e565b5b92915050565b6000614c2c82613e44565b9150614c3783613e44565b9250828202614c4581613e44565b91508282048414831517614c5c57614c5b61462e565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cbf602183613d98565b9150614cca82614c63565b604082019050919050565b60006020820190508181036000830152614cee81614cb2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614d6281613eff565b92915050565b600060208284031215614d7e57614d7d613e3f565b5b6000614d8c84828501614d53565b91505092915050565b6000819050919050565b6000614dba614db5614db084614d95565b613fa1565b613e44565b9050919050565b614dca81614d9f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e0581613eed565b82525050565b6000614e178383614dfc565b60208301905092915050565b6000602082019050919050565b6000614e3b82614dd0565b614e458185614ddb565b9350614e5083614dec565b8060005b83811015614e81578151614e688882614e0b565b9750614e7383614e23565b925050600181019050614e54565b5085935050505092915050565b600060a082019050614ea3600083018861401b565b614eb06020830187614dc1565b8181036040830152614ec28186614e30565b9050614ed1606083018561416d565b614ede608083018461401b565b9695505050505050565b6000604082019050614efd600083018561401b565b8181036020830152614f0f8184614e30565b90509392505050565b600060c082019050614f2d600083018961416d565b614f3a602083018861401b565b614f476040830187614dc1565b614f546060830186614dc1565b614f61608083018561416d565b614f6e60a083018461401b565b979650505050505050565b600081519050614f8881613e4e565b92915050565b600080600060608486031215614fa757614fa6613e3f565b5b6000614fb586828701614f79565b9350506020614fc686828701614f79565b9250506040614fd786828701614f79565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c33f98e92294cc94696fb2b5f451b2801f0b741781e9234db92fcf4806984d1e64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c806388790a68116101e7578063c816841b1161010d578063ec28438a116100a0578063f2fde38b1161006f578063f2fde38b14610dc5578063f331c7b014610dee578063f84ba65d14610e19578063f872858a14610e42576103ad565b8063ec28438a14610d1f578063ef422a1814610d48578063f0cd1dac14610d71578063f1d5f51714610d9c576103ad565b8063da00097d116100dc578063da00097d14610c63578063dc44b6a014610c8e578063dd46706414610cb9578063dd62ed3e14610ce2576103ad565b8063c816841b14610ba5578063c860795214610bd0578063c867d60b14610bfb578063d158272d14610c38576103ad565b8063a0dd804011610185578063a9059cbb11610154578063a9059cbb14610aeb578063c2d4640e14610b28578063c49b9a8014610b51578063c5d2418914610b7a576103ad565b8063a0dd804014610a43578063a457c2d714610a6e578063a5d69d1f14610aab578063a69df4b514610ad4576103ad565b8063914eb66a116101c1578063914eb66a146109ab57806395d89b41146109c2578063a073d37f146109ed578063a08e671f14610a18576103ad565b806388790a68146109185780638b42507f146109435780638da5cb5b14610980576103ad565b80633b97084a116102cc578063602bc62b1161026a5780637d7846ff116102395780637d7846ff14610870578063807c2d9c1461089957806382eefb43146108c4578063844d591c146108ef576103ad565b8063602bc62b146107b257806361a23c69146107dd57806370a08231146108085780637d1db4a514610845576103ad565b80634cb80fd5116102a65780634cb80fd5146106f65780635342acb41461071f578063557ed1ba1461075c57806357a5802f14610787576103ad565b80633b97084a146106655780633ecad2711461068e5780634a74bb02146106cb576103ad565b80632198cf6c116103445780632b112e49116103135780632b112e49146105a7578063313ce567146105d257806337249b65146105fd5780633950935114610628576103ad565b80632198cf6c146104ed57806323b872dd146105165780632563ae831461055357806327c8f8351461057c576103ad565b80631694505e116103805780631694505e1461044357806318160ddd1461046e578063182a4760146104995780631870517a146104c4576103ad565b806306fdde03146103b257806308733214146103dd578063095ea7b314610406576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e6d565b6040516103d49190613e1d565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190613e7a565b610eff565b005b34801561041257600080fd5b5061042d60048036038101906104289190613f2b565b611025565b60405161043a9190613f86565b60405180910390f35b34801561044f57600080fd5b50610458611043565b6040516104659190614000565b60405180910390f35b34801561047a57600080fd5b50610483611069565b604051610490919061402a565b60405180910390f35b3480156104a557600080fd5b506104ae611073565b6040516104bb9190614066565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190613e7a565b611099565b005b3480156104f957600080fd5b50610514600480360381019061050f91906140ad565b6111bf565b005b34801561052257600080fd5b5061053d600480360381019061053891906140ed565b6112af565b60405161054a9190613f86565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190614140565b611389565b005b34801561058857600080fd5b5061059161143b565b60405161059e919061417c565b60405180910390f35b3480156105b357600080fd5b506105bc61145f565b6040516105c9919061402a565b60405180910390f35b3480156105de57600080fd5b506105e76114a3565b6040516105f491906141b3565b60405180910390f35b34801561060957600080fd5b506106126114ba565b60405161061f919061402a565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613f2b565b6114c0565b60405161065c9190613f86565b60405180910390f35b34801561067157600080fd5b5061068c600480360381019061068791906141ce565b611573565b005b34801561069a57600080fd5b506106b560048036038101906106b091906141fb565b611655565b6040516106c29190613f86565b60405180910390f35b3480156106d757600080fd5b506106e0611675565b6040516106ed9190613f86565b60405180910390f35b34801561070257600080fd5b5061071d600480360381019061071891906141fb565b611688565b005b34801561072b57600080fd5b50610746600480360381019061074191906141fb565b611761565b6040516107539190613f86565b60405180910390f35b34801561076857600080fd5b50610771611781565b60405161077e919061402a565b60405180910390f35b34801561079357600080fd5b5061079c611789565b6040516107a9919061402a565b60405180910390f35b3480156107be57600080fd5b506107c761178f565b6040516107d4919061402a565b60405180910390f35b3480156107e957600080fd5b506107f2611799565b6040516107ff919061402a565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a91906141fb565b61179f565b60405161083c919061402a565b60405180910390f35b34801561085157600080fd5b5061085a6117e8565b604051610867919061402a565b60405180910390f35b34801561087c57600080fd5b50610897600480360381019061089291906141fb565b6117ee565b005b3480156108a557600080fd5b506108ae6118c7565b6040516108bb919061402a565b60405180910390f35b3480156108d057600080fd5b506108d96118cd565b6040516108e6919061402a565b60405180910390f35b3480156108fb57600080fd5b50610916600480360381019061091191906140ad565b6118d3565b005b34801561092457600080fd5b5061092d6119c3565b60405161093a919061402a565b60405180910390f35b34801561094f57600080fd5b5061096a600480360381019061096591906141fb565b6119c9565b6040516109779190613f86565b60405180910390f35b34801561098c57600080fd5b506109956119e9565b6040516109a2919061417c565b60405180910390f35b3480156109b757600080fd5b506109c0611a12565b005b3480156109ce57600080fd5b506109d7611b65565b6040516109e49190613e1d565b60405180910390f35b3480156109f957600080fd5b50610a02611bf7565b604051610a0f919061402a565b60405180910390f35b348015610a2457600080fd5b50610a2d611c01565b604051610a3a919061402a565b60405180910390f35b348015610a4f57600080fd5b50610a58611c07565b604051610a65919061402a565b60405180910390f35b348015610a7a57600080fd5b50610a956004803603810190610a909190613f2b565b611c0d565b604051610aa29190613f86565b60405180910390f35b348015610ab757600080fd5b50610ad26004803603810190610acd9190614140565b611cda565b005b348015610ae057600080fd5b50610ae9611d8c565b005b348015610af757600080fd5b50610b126004803603810190610b0d9190613f2b565b611f60565b604051610b1f9190613f86565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a9190613e7a565b611f7f565b005b348015610b5d57600080fd5b50610b786004803603810190610b739190614140565b6120a5565b005b348015610b8657600080fd5b50610b8f61218e565b604051610b9c919061402a565b60405180910390f35b348015610bb157600080fd5b50610bba612194565b604051610bc7919061417c565b60405180910390f35b348015610bdc57600080fd5b50610be56121ba565b604051610bf2919061402a565b60405180910390f35b348015610c0757600080fd5b50610c226004803603810190610c1d91906141fb565b6121c0565b604051610c2f9190613f86565b60405180910390f35b348015610c4457600080fd5b50610c4d6121e0565b604051610c5a9190614066565b60405180910390f35b348015610c6f57600080fd5b50610c78612206565b604051610c859190613f86565b60405180910390f35b348015610c9a57600080fd5b50610ca3612219565b604051610cb0919061402a565b60405180910390f35b348015610cc557600080fd5b50610ce06004803603810190610cdb91906141ce565b61221f565b005b348015610cee57600080fd5b50610d096004803603810190610d049190614228565b6123e6565b604051610d16919061402a565b60405180910390f35b348015610d2b57600080fd5b50610d466004803603810190610d4191906141ce565b61246d565b005b348015610d5457600080fd5b50610d6f6004803603810190610d6a91906140ad565b61255e565b005b348015610d7d57600080fd5b50610d8661264e565b604051610d93919061402a565b60405180910390f35b348015610da857600080fd5b50610dc36004803603810190610dbe91906141ce565b612654565b005b348015610dd157600080fd5b50610dec6004803603810190610de791906141fb565b612745565b005b348015610dfa57600080fd5b50610e03612906565b604051610e10919061402a565b60405180910390f35b348015610e2557600080fd5b50610e406004803603810190610e3b91906140ad565b61290c565b005b348015610e4e57600080fd5b50610e576129fc565b604051610e649190613f86565b60405180910390f35b606060038054610e7c90614297565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea890614297565b8015610ef55780601f10610eca57610100808354040283529160200191610ef5565b820191906000526020600020905b815481529060010190602001808311610ed857829003601f168201915b5050505050905090565b610f07612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b90614314565b60405180910390fd5b826010819055508160118190555080601281905550610fd4601254610fc6601154601054612a0f90919063ffffffff16565b612a0f90919063ffffffff16565b601781905550600a6017541115611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790614380565b60405180910390fd5b505050565b6000611039611032612a6d565b8484612a75565b6001905092915050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601954905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110a1612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112590614314565b60405180910390fd5b82600d8190555081600e8190555080600f8190555061116e600f54611160600e54600d54612a0f90919063ffffffff16565b612a0f90919063ffffffff16565b601681905550600a60165411156111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b1906143ec565b60405180910390fd5b505050565b6111c7612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90614314565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006112bc848484612c3e565b5061137e846112c9612a6d565b61137985604051806060016040528060288152602001614fe260289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061132f612a6d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132219092919063ffffffff16565b612a75565b600190509392505050565b611391612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614314565b60405180910390fd5b80601e60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b600061149e61148d7f000000000000000000000000000000000000000000000000000000000000dead61179f565b60195461328590919063ffffffff16565b905090565b6000600560009054906101000a900460ff16905090565b60125481565b60006115696114cd612a6d565b8461156485600860006114de612a6d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0f90919063ffffffff16565b612a75565b6001905092915050565b61157b612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90614314565b60405180910390fd5b6001811161164b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116429061447e565b60405180910390fd5b80601c8190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b601e60159054906101000a900460ff1681565b611690612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490614314565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60135481565b6000600254905090565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b6117f6612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a90614314565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b60175481565b6118db612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90614314565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a1a612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90614314565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060048054611b7490614297565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba090614297565b8015611bed5780601f10611bc257610100808354040283529160200191611bed565b820191906000526020600020905b815481529060010190602001808311611bd057829003601f168201915b5050505050905090565b6000601c54905090565b60185481565b60155481565b6000611cd0611c1a612a6d565b84611ccb8560405180606001604052806025815260200161500a6025913960086000611c44612a6d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132219092919063ffffffff16565b612a75565b6001905092915050565b611ce2612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6690614314565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390614510565b60405180910390fd5b6002544211611e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e579061457c565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611f74611f6d612a6d565b8484612c3e565b506001905092915050565b611f87612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b90614314565b60405180910390fd5b826013819055508160148190555080601581905550612054601554612046601454601354612a0f90919063ffffffff16565b612a0f90919063ffffffff16565b601881905550601460185411156120a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120979061460e565b60405180910390fd5b505050565b6120ad612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213190614314565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121839190613f86565b60405180910390a150565b600e5481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600a6020528060005260406000206000915054906101000a900460ff1681565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60169054906101000a900460ff1681565b600d5481565b612227612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab90614314565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042612362919061465d565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612475612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f990614314565b60405180910390fd5b6103e860195461251291906146c0565b811015612554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254b90614763565b60405180910390fd5b80601a8190555050565b612566612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea90614314565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b61265c612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e090614314565b60405180910390fd5b6103e86019546126f991906146c0565b81101561273b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612732906147f5565b60405180910390fd5b80601b8190555050565b61274d612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d190614314565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614887565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b612914612a6d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299890614314565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601e60179054906101000a900460ff1681565b6000808284612a1e919061465d565b905083811015612a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5a906148f3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb90614985565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a90614a17565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c31919061402a565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca590614aa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1490614b3b565b60405180910390fd5b601e60149054906101000a900460ff1615612d4457612d3d8484846132cf565b905061321a565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612de85750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3357601a54821115612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990614bcd565b60405180910390fd5b5b6000612e3e3061179f565b90506000601c548210159050808015612e645750601e60149054906101000a900460ff16155b8015612eba5750600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ed25750601e60159054906101000a900460ff165b15612efc57601e60169054906101000a900460ff1615612ef257601c5491505b612efb826134a2565b5b612f85846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132219092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061306b5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61307f5761307a878787613693565b613081565b845b9050601e60179054906101000a900460ff1680156130e95750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561311857601b5461310c826130fe8961179f565b612a0f90919063ffffffff16565b111561311757600080fd5b5b61316a81600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0f90919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161320a919061402a565b60405180910390a3600193505050505b9392505050565b6000838311158290613269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132609190613e1d565b60405180910390fd5b50600083856132789190614bed565b9050809150509392505050565b60006132c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613221565b905092915050565b600061335a826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132219092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133ef82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0f90919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161348f919061402a565b60405180910390a3600190509392505050565b6001601e60146101000a81548160ff02191690831515021790555060006134fb60026134ed6018546134df601354876138ba90919063ffffffff16565b61393490919063ffffffff16565b61393490919063ffffffff16565b90506000613512828461328590919063ffffffff16565b905061351d8161397e565b6000479050600061354e61353d600260135461393490919063ffffffff16565b60185461328590919063ffffffff16565b9050600061358c600261357e84613570601354886138ba90919063ffffffff16565b61393490919063ffffffff16565b61393490919063ffffffff16565b905060006135b7836135a9601554876138ba90919063ffffffff16565b61393490919063ffffffff16565b905060006135e0826135d2858861328590919063ffffffff16565b61328590919063ffffffff16565b9050600081111561361857613617600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613bfa565b5b600082111561364e5761364d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613bfa565b5b60008311801561365e5750600087115b1561366e5761366d8784613c45565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561371b576137146064613706601654866138ba90919063ffffffff16565b61393490919063ffffffff16565b9050613799565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613798576137956064613787601754866138ba90919063ffffffff16565b61393490919063ffffffff16565b90505b5b600081111561389d576137f481600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0f90919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613894919061402a565b60405180910390a35b6138b0818461328590919063ffffffff16565b9150509392505050565b60008083036138cc576000905061392e565b600082846138da9190614c21565b90508284826138e991906146c0565b14613929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392090614cd5565b60405180910390fd5b809150505b92915050565b600061397683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d2a565b905092915050565b6000600267ffffffffffffffff81111561399b5761399a614cf5565b5b6040519080825280602002602001820160405280156139c95781602001602082028036833780820191505090505b50905030816000815181106139e1576139e0614d24565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aac9190614d68565b81600181518110613ac057613abf614d24565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b2730601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a75565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b8b959493929190614e8e565b600060405180830381600087803b158015613ba557600080fd5b505af1158015613bb9573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613bee929190614ee8565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c40573d6000803e3d6000fd5b505050565b613c7230601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a75565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cbe6119e9565b426040518863ffffffff1660e01b8152600401613ce096959493929190614f18565b60606040518083038185885af1158015613cfe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d239190614f8e565b5050505050565b60008083118290613d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d689190613e1d565b60405180910390fd5b5060008385613d8091906146c0565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dc7578082015181840152602081019050613dac565b60008484015250505050565b6000601f19601f8301169050919050565b6000613def82613d8d565b613df98185613d98565b9350613e09818560208601613da9565b613e1281613dd3565b840191505092915050565b60006020820190508181036000830152613e378184613de4565b905092915050565b600080fd5b6000819050919050565b613e5781613e44565b8114613e6257600080fd5b50565b600081359050613e7481613e4e565b92915050565b600080600060608486031215613e9357613e92613e3f565b5b6000613ea186828701613e65565b9350506020613eb286828701613e65565b9250506040613ec386828701613e65565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ef882613ecd565b9050919050565b613f0881613eed565b8114613f1357600080fd5b50565b600081359050613f2581613eff565b92915050565b60008060408385031215613f4257613f41613e3f565b5b6000613f5085828601613f16565b9250506020613f6185828601613e65565b9150509250929050565b60008115159050919050565b613f8081613f6b565b82525050565b6000602082019050613f9b6000830184613f77565b92915050565b6000819050919050565b6000613fc6613fc1613fbc84613ecd565b613fa1565b613ecd565b9050919050565b6000613fd882613fab565b9050919050565b6000613fea82613fcd565b9050919050565b613ffa81613fdf565b82525050565b60006020820190506140156000830184613ff1565b92915050565b61402481613e44565b82525050565b600060208201905061403f600083018461401b565b92915050565b600061405082613ecd565b9050919050565b61406081614045565b82525050565b600060208201905061407b6000830184614057565b92915050565b61408a81613f6b565b811461409557600080fd5b50565b6000813590506140a781614081565b92915050565b600080604083850312156140c4576140c3613e3f565b5b60006140d285828601613f16565b92505060206140e385828601614098565b9150509250929050565b60008060006060848603121561410657614105613e3f565b5b600061411486828701613f16565b935050602061412586828701613f16565b925050604061413686828701613e65565b9150509250925092565b60006020828403121561415657614155613e3f565b5b600061416484828501614098565b91505092915050565b61417681613eed565b82525050565b6000602082019050614191600083018461416d565b92915050565b600060ff82169050919050565b6141ad81614197565b82525050565b60006020820190506141c860008301846141a4565b92915050565b6000602082840312156141e4576141e3613e3f565b5b60006141f284828501613e65565b91505092915050565b60006020828403121561421157614210613e3f565b5b600061421f84828501613f16565b91505092915050565b6000806040838503121561423f5761423e613e3f565b5b600061424d85828601613f16565b925050602061425e85828601613f16565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142af57607f821691505b6020821081036142c2576142c1614268565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142fe602083613d98565b9150614309826142c8565b602082019050919050565b6000602082019050818103600083015261432d816142f1565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e203130250000600082015250565b600061436a601e83613d98565b915061437582614334565b602082019050919050565b600060208201905081810360008301526143998161435d565b9050919050565b7f42757920746178206d757374206265206c657373207468616e20313025000000600082015250565b60006143d6601d83613d98565b91506143e1826143a0565b602082019050919050565b60006020820190508181036000830152614405816143c9565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f60008201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b6000614468602383613d98565b91506144738261440c565b604082019050919050565b600060208201905081810360008301526144978161445b565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006144fa602383613d98565b91506145058261449e565b604082019050919050565b60006020820190508181036000830152614529816144ed565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000614566601f83613d98565b915061457182614530565b602082019050919050565b6000602082019050818103600083015261459581614559565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c65737360008201527f207468616e203230250000000000000000000000000000000000000000000000602082015250565b60006145f8602983613d98565b91506146038261459c565b604082019050919050565b60006020820190508181036000830152614627816145eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061466882613e44565b915061467383613e44565b925082820190508082111561468b5761468a61462e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146cb82613e44565b91506146d683613e44565b9250826146e6576146e5614691565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f7765722074686160008201527f6e20302e31250000000000000000000000000000000000000000000000000000602082015250565b600061474d602683613d98565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b60006147df602483613d98565b91506147ea82614783565b604082019050919050565b6000602082019050818103600083015261480e816147d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614871602683613d98565b915061487c82614815565b604082019050919050565b600060208201905081810360008301526148a081614864565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006148dd601b83613d98565b91506148e8826148a7565b602082019050919050565b6000602082019050818103600083015261490c816148d0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496f602483613d98565b915061497a82614913565b604082019050919050565b6000602082019050818103600083015261499e81614962565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a01602283613d98565b9150614a0c826149a5565b604082019050919050565b60006020820190508181036000830152614a30816149f4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a93602583613d98565b9150614a9e82614a37565b604082019050919050565b60006020820190508181036000830152614ac281614a86565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b25602383613d98565b9150614b3082614ac9565b604082019050919050565b60006020820190508181036000830152614b5481614b18565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614bb7602883613d98565b9150614bc282614b5b565b604082019050919050565b60006020820190508181036000830152614be681614baa565b9050919050565b6000614bf882613e44565b9150614c0383613e44565b9250828203905081811115614c1b57614c1a61462e565b5b92915050565b6000614c2c82613e44565b9150614c3783613e44565b9250828202614c4581613e44565b91508282048414831517614c5c57614c5b61462e565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cbf602183613d98565b9150614cca82614c63565b604082019050919050565b60006020820190508181036000830152614cee81614cb2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614d6281613eff565b92915050565b600060208284031215614d7e57614d7d613e3f565b5b6000614d8c84828501614d53565b91505092915050565b6000819050919050565b6000614dba614db5614db084614d95565b613fa1565b613e44565b9050919050565b614dca81614d9f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e0581613eed565b82525050565b6000614e178383614dfc565b60208301905092915050565b6000602082019050919050565b6000614e3b82614dd0565b614e458185614ddb565b9350614e5083614dec565b8060005b83811015614e81578151614e688882614e0b565b9750614e7383614e23565b925050600181019050614e54565b5085935050505092915050565b600060a082019050614ea3600083018861401b565b614eb06020830187614dc1565b8181036040830152614ec28186614e30565b9050614ed1606083018561416d565b614ede608083018461401b565b9695505050505050565b6000604082019050614efd600083018561401b565b8181036020830152614f0f8184614e30565b90509392505050565b600060c082019050614f2d600083018961416d565b614f3a602083018861401b565b614f476040830187614dc1565b614f546060830186614dc1565b614f61608083018561416d565b614f6e60a083018461401b565b979650505050505050565b600081519050614f8881613e4e565b92915050565b600080600060608486031215614fa757614fa6613e3f565b5b6000614fb586828701614f79565b9350506020614fc686828701614f79565b9250506040614fd786828701614f79565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c33f98e92294cc94696fb2b5f451b2801f0b741781e9234db92fcf4806984d1e64736f6c63430008120033

Deployed Bytecode Sourcemap

15013:14684:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18736:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21408:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20030:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16738:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19013:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15386:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20963:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22695:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24395:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22574:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15528:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23856:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18922:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16188:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19399:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23039:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15920:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16853:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23242:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15749:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6533:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16235:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6431:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16276:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19121:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16560:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23389:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16617:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16405:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20544:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16102:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15865:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5801:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6026:145;;;;;;;;;;;;;:::i;:::-;;18827:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19902:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16449:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16317:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19625:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23719:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6869:305;;;;;;;;;;;;;:::i;:::-;;24220:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21867:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23540:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16016:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16786:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16145:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15806:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15255:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16900:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15974:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6631:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19248:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22359:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20820:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16362:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22838:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6179:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16058:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20681:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16952:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18736:83;18773:13;18806:5;18799:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18736:83;:::o;21408:447::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21559:15:::1;21539:17;:35;;;;21605:15;21585:17;:35;;;;21653:17;21631:19;:39;;;;21704:65;21749:19;;21704:40;21726:17;;21704;;:21;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;21683:18;:86;;;;21810:2;21788:18;;:24;;21780:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21408:447:::0;;;:::o;20030:161::-;20105:4;20122:39;20131:12;:10;:12::i;:::-;20145:7;20154:6;20122:8;:39::i;:::-;20179:4;20172:11;;20030:161;;;;:::o;16738:41::-;;;;;;;;;;;;;:::o;19013:100::-;19066:7;19093:12;;19086:19;;19013:100;:::o;15386:101::-;;;;;;;;;;;;;:::o;20963:437::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21112:15:::1;21093:16;:34;;;;21157:15;21138:16;:34;;;;21204:17;21183:18;:38;;;;21254:62;21297:18;;21254:38;21275:16;;21254;;:20;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;21234:17;:82;;;;21356:2;21335:17;;:23;;21327:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20963:437:::0;;;:::o;22695:135::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22816:6:::1;22786:19;:27;22806:6;22786:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22695:135:::0;;:::o;24395:313::-;24493:4;24510:36;24520:6;24528:9;24539:6;24510:9;:36::i;:::-;;24557:121;24566:6;24574:12;:10;:12::i;:::-;24588:89;24626:6;24588:89;;;;;;;;;;;;;;;;;:11;:19;24600:6;24588:19;;;;;;;;;;;;;;;:33;24608:12;:10;:12::i;:::-;24588:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24557:8;:121::i;:::-;24696:4;24689:11;;24395:313;;;;;:::o;22574:113::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22671:8:::1;22652:16;;:27;;;;;;;;;;;;;;;;;;22574:113:::0;:::o;15528:81::-;;;:::o;23856:128::-;23909:7;23936:40;23953:22;23963:11;23953:9;:22::i;:::-;23936:12;;:16;;:40;;;;:::i;:::-;23929:47;;23856:128;:::o;18922:83::-;18963:5;18988:9;;;;;;;;;;;18981:16;;18922:83;:::o;16188:38::-;;;;:::o;19399:218::-;19487:4;19504:83;19513:12;:10;:12::i;:::-;19527:7;19536:50;19575:10;19536:11;:25;19548:12;:10;:12::i;:::-;19536:25;;;;;;;;;;;;;;;:34;19562:7;19536:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19504:8;:83::i;:::-;19605:4;19598:11;;19399:218;;;;:::o;23039:195::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23140:1:::1;23129:8;:12;23121:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23218:8;23192:23;:34;;;;23039:195:::0;:::o;15920:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;16853:40::-;;;;;;;;;;;;;:::o;23242:139::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23362:10:::1;23329:22;;:44;;;;;;;;;;;;;;;;;;23242:139:::0;:::o;15749:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;6533:90::-;6573:7;6600:15;6593:22;;6533:90;:::o;16235:34::-;;;;:::o;6431:90::-;6477:7;6504:9;;6497:16;;6431:90;:::o;16276:34::-;;;;:::o;19121:119::-;19187:7;19214:9;:18;19224:7;19214:18;;;;;;;;;;;;;;;;19207:25;;19121:119;;;:::o;16560:50::-;;;;:::o;23389:143::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23513:10:::1;23478:24;;:46;;;;;;;;;;;;;;;;;;23389:143:::0;:::o;16617:48::-;;;;:::o;16405:37::-;;;;:::o;20544:129::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20657:8:::1;20633:12;:21;20646:7;20633:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20544:129:::0;;:::o;16102:36::-;;;;:::o;15865:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5801:79::-;5839:7;5866:6;;;;;;;;;;;5859:13;;5801:79;:::o;6026:145::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6130:1:::1;6093:40;;6114:6;::::0;::::1;;;;;;;;6093:40;;;;;;;;;;;;6161:1;6144:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6026:145::o:0;18827:87::-;18866:13;18899:7;18892:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18827:87;:::o;19902:120::-;19964:7;19991:23;;19984:30;;19902:120;:::o;16449:44::-;;;;:::o;16317:36::-;;;;:::o;19625:269::-;19718:4;19735:129;19744:12;:10;:12::i;:::-;19758:7;19767:96;19806:15;19767:96;;;;;;;;;;;;;;;;;:11;:25;19779:12;:10;:12::i;:::-;19767:25;;;;;;;;;;;;;;;:34;19793:7;19767:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19735:8;:129::i;:::-;19882:4;19875:11;;19625:269;;;;:::o;23719:125::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23828:8:::1;23800:25;;:36;;;;;;;;;;;;;;;;;;23719:125:::0;:::o;6869:305::-;6939:10;6921:28;;:14;;;;;;;;;;;:28;;;6913:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7026:9;;7008:15;:27;7000:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7117:14;;;;;;;;;;;7088:44;;7109:6;;;;;;;;;;7088:44;;;;;;;;;;;;7152:14;;;;;;;;;;;7143:6;;:23;;;;;;;;;;;;;;;;;;6869:305::o;24220:167::-;24298:4;24315:42;24325:12;:10;:12::i;:::-;24339:9;24350:6;24315:9;:42::i;:::-;;24375:4;24368:11;;24220:167;;;;:::o;21867:480::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22033:17:::1;22015:15;:35;;;;22079:17;22061:15;:35;;;;22127:19;22107:17;:39;;;;22186:59;22227:17;;22186:36;22206:15;;22186;;:19;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;22159:24;:86;;;;22291:2;22264:24;;:29;;22256:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21867:480:::0;;;:::o;23540:171::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23641:8:::1;23617:21;;:32;;;;;;;;;;;;;;;;;;23665:38;23694:8;23665:38;;;;;;:::i;:::-;;;;;;;;23540:171:::0;:::o;16016:35::-;;;;:::o;16786:26::-;;;;;;;;;;;;;:::o;16145:36::-;;;;:::o;15806:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;15255:99::-;;;;;;;;;;;;;:::o;16900:45::-;;;;;;;;;;;;;:::o;15974:35::-;;;;:::o;6631:226::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6712:6:::1;::::0;::::1;;;;;;;;6695:14;;:23;;;;;;;;;;;;;;;;;;6746:1;6729:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6789:4;6771:15;:22;;;;:::i;:::-;6759:9;:34;;;;6846:1;6809:40;;6830:6;::::0;::::1;;;;;;;;6809:40;;;;;;;;;;;;6631:226:::0;:::o;19248:143::-;19329:7;19356:11;:18;19368:5;19356:18;;;;;;;;;;;;;;;:27;19375:7;19356:27;;;;;;;;;;;;;;;;19349:34;;19248:143;;;;:::o;22359:207::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22474:4:::1;22459:12;;:19;;;;:::i;:::-;22444:11;:34;;22436:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22547:11;22532:12;:26;;;;22359:207:::0;:::o;20820:135::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20939:8:::1;20910:17;:26;20928:7;20910:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20820:135:::0;;:::o;16362:36::-;;;;:::o;22838:193::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22945:4:::1;22930:12;;:19;;;;:::i;:::-;22918:8;:31;;22910:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;23015:8;23001:10;:22;;;;22838:193:::0;:::o;6179:244::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6288:1:::1;6268:22;;:8;:22;;::::0;6260:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6378:8;6349:38;;6370:6;::::0;::::1;;;;;;;;6349:38;;;;;;;;;;;;6407:8;6398:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6179:244:::0;:::o;16058:37::-;;;;:::o;20681:127::-;5945:12;:10;:12::i;:::-;5935:22;;:6;;;;;;;;;;:22;;;5927:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20794:6:::1;20768:15;:23;20784:6;20768:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20681:127:::0;;:::o;16952:35::-;;;;;;;;;;;;;:::o;1171:181::-;1229:7;1249:9;1265:1;1261;:5;;;;:::i;:::-;1249:17;;1290:1;1285;:6;;1277:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1343:1;1336:8;;;1171:181;;;;:::o;103:115::-;156:15;199:10;184:26;;103:115;:::o;20199:337::-;20309:1;20292:19;;:5;:19;;;20284:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20390:1;20371:21;;:7;:21;;;20363:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20474:6;20444:11;:18;20456:5;20444:18;;;;;;;;;;;;;;;:27;20463:7;20444:27;;;;;;;;;;;;;;;:36;;;;20512:7;20496:32;;20505:5;20496:32;;;20521:6;20496:32;;;;;;:::i;:::-;;;;;;;;20199:337;;;:::o;24716:1707::-;24803:4;24848:1;24830:20;;:6;:20;;;24822:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24932:1;24911:23;;:9;:23;;;24903:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24990:16;;;;;;;;;;;24987:1429;;;25040:41;25055:6;25063:9;25074:6;25040:14;:41::i;:::-;25033:48;;;;24987:1429;25137:15;:23;25153:6;25137:23;;;;;;;;;;;;;;;;;;;;;;;;;25136:24;:55;;;;;25165:15;:26;25181:9;25165:26;;;;;;;;;;;;;;;;;;;;;;;;;25164:27;25136:55;25133:170;;;25230:12;;25220:6;:22;;25212:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25133:170;25331:28;25362:24;25380:4;25362:9;:24::i;:::-;25331:55;;25401:28;25456:23;;25432:20;:47;;25401:78;;25512:23;:44;;;;;25540:16;;;;;;;;;;;25539:17;25512:44;:69;;;;;25561:12;:20;25574:6;25561:20;;;;;;;;;;;;;;;;;;;;;;;;;25560:21;25512:69;:94;;;;;25585:21;;;;;;;;;;;25512:94;25508:305;;;25644:25;;;;;;;;;;;25641:97;;;25715:23;;25692:46;;25641:97;25757:36;25772:20;25757:14;:36::i;:::-;25508:305;25849:53;25871:6;25849:53;;;;;;;;;;;;;;;;;:9;:17;25859:6;25849:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25829:9;:17;25839:6;25829:17;;;;;;;;;;;;;;;:73;;;;25919:19;25942:17;:25;25960:6;25942:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;25971:17;:28;25989:9;25971:28;;;;;;;;;;;;;;;;;;;;;;;;;25942:57;25941:148;;26055:34;26063:6;26071:9;26082:6;26055:7;:34::i;:::-;25941:148;;;26046:6;25941:148;25919:170;;26109:16;;;;;;;;;;;:51;;;;;26130:19;:30;26150:9;26130:30;;;;;;;;;;;;;;;;;;;;;;;;;26129:31;26109:51;26106:133;;;26228:10;;26187:37;26212:11;26187:20;26197:9;26187;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;26179:60;;;;;;26106:133;26279:37;26304:11;26279:9;:20;26289:9;26279:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;26256:9;:20;26266:9;26256:20;;;;;;;;;;;;;;;:60;;;;26355:9;26338:40;;26347:6;26338:40;;;26366:11;26338:40;;;;;;:::i;:::-;;;;;;;;26400:4;26393:11;;;;;24716:1707;;;;;;:::o;1504:192::-;1590:7;1623:1;1618;:6;;1626:12;1610:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1650:9;1666:1;1662;:5;;;;:::i;:::-;1650:17;;1687:1;1680:8;;;1504:192;;;;;:::o;1360:136::-;1418:7;1445:43;1449:1;1452;1445:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1438:50;;1360:136;;;;:::o;26431:330::-;26524:4;26561:53;26583:6;26561:53;;;;;;;;;;;;;;;;;:9;:17;26571:6;26561:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26541:9;:17;26551:6;26541:17;;;;;;;;;;;;;;;:73;;;;26648:32;26673:6;26648:9;:20;26658:9;26648:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26625:9;:20;26635:9;26625:20;;;;;;;;;;;;;;;:55;;;;26713:9;26696:35;;26705:6;26696:35;;;26724:6;26696:35;;;;;;:::i;:::-;;;;;;;;26749:4;26742:11;;26431:330;;;;;:::o;26769:1090::-;17429:4;17410:16;;:23;;;;;;;;;;;;;;;;;;26851:19:::1;26873:65;26936:1;26873:58;26906:24;;26873:28;26885:15;;26873:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;26851:87;;26949:21;26973:24;26985:11;26973:7;:11;;:24;;;;:::i;:::-;26949:48;;27010:31;27027:13;27010:16;:31::i;:::-;27052:22;27077:21;27052:46;;27111:19;27133:52;27162:22;27182:1;27162:15;;:19;;:22;;;;:::i;:::-;27133:24;;:28;;:52;;;;:::i;:::-;27111:74;;27206:26;27235:59;27292:1;27235:52;27275:11;27235:35;27254:15;;27235:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;27206:88;;27305:28;27336:54;27378:11;27336:37;27355:17;;27336:14;:18;;:37;;;;:::i;:::-;:41;;:54;;;;:::i;:::-;27305:85;;27401:26;27430:64;27473:20;27430:38;27449:18;27430:14;:18;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;27401:93;;27531:1;27510:18;:22;27507:104;;;27547:64;27568:22;;;;;;;;;;;27592:18;27547:20;:64::i;:::-;27507:104;27650:1;27627:20;:24;27624:110;;;27666:68;27687:24;;;;;;;;;;;27713:20;27666;:68::i;:::-;27624:110;27771:1;27750:18;:22;:41;;;;;27790:1;27776:11;:15;27750:41;27747:104;;;27806:45;27819:11;27832:18;27806:12;:45::i;:::-;27747:104;26830:1029;;;;;;;17475:5:::0;17456:16;;:24;;;;;;;;;;;;;;;;;;26769:1090;:::o;29066:622::-;29152:7;29182:17;29202:1;29182:21;;29227:12;:20;29240:6;29227:20;;;;;;;;;;;;;;;;;;;;;;;;;29224:223;;;29276:38;29310:3;29276:29;29287:17;;29276:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;29264:50;;29224:223;;;29344:12;:23;29357:9;29344:23;;;;;;;;;;;;;;;;;;;;;;;;;29341:106;;;29396:39;29431:3;29396:30;29407:18;;29396:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;29384:51;;29341:106;29224:223;29482:1;29470:9;:13;29467:173;;;29527:39;29556:9;29527;:24;29545:4;29527:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;29500:9;:24;29518:4;29500:24;;;;;;;;;;;;;;;:66;;;;29611:4;29586:42;;29595:6;29586:42;;;29618:9;29586:42;;;;;;:::i;:::-;;;;;;;;29467:173;29659:21;29670:9;29659:6;:10;;:21;;;;:::i;:::-;29652:28;;;29066:622;;;;;:::o;1704:250::-;1762:7;1791:1;1786;:6;1782:47;;1816:1;1809:8;;;;1782:47;1841:9;1857:1;1853;:5;;;;:::i;:::-;1841:17;;1886:1;1881;1877;:5;;;;:::i;:::-;:10;1869:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1945:1;1938:8;;;1704:250;;;;;:::o;1962:132::-;2020:7;2047:39;2051:1;2054;2047:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2040:46;;1962:132;;;;:::o;27871:666::-;27997:21;28035:1;28021:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27997:40;;28066:4;28048;28053:1;28048:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28092:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28082:4;28087:1;28082:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28127:62;28144:4;28159:15;;;;;;;;;;;28177:11;28127:8;:62::i;:::-;28228:15;;;;;;;;;;;:66;;;28309:11;28335:1;28379:4;28406;28442:15;28228:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28494:35;28511:11;28524:4;28494:35;;;;;;;:::i;:::-;;;;;;;;27926:611;27871:666;:::o;23992:126::-;24084:9;:18;;:26;24103:6;24084:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23992:126;;:::o;28545:513::-;28693:62;28710:4;28725:15;;;;;;;;;;;28743:11;28693:8;:62::i;:::-;28798:15;;;;;;;;;;;:31;;;28837:9;28870:4;28890:11;28916:1;28959;29002:7;:5;:7::i;:::-;29024:15;28798:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28545:513;;:::o;2102:278::-;2188:7;2220:1;2216;:5;2223:12;2208:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2247:9;2263:1;2259;:5;;;;:::i;:::-;2247:17;;2371:1;2364:8;;;2102:278;;;;;:::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:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:619::-;2109:6;2117;2125;2174:2;2162:9;2153:7;2149:23;2145:32;2142:119;;;2180:79;;:::i;:::-;2142:119;2300:1;2325:53;2370:7;2361:6;2350:9;2346:22;2325:53;:::i;:::-;2315:63;;2271:117;2427:2;2453:53;2498:7;2489:6;2478:9;2474:22;2453:53;:::i;:::-;2443:63;;2398:118;2555:2;2581:53;2626:7;2617:6;2606:9;2602:22;2581:53;:::i;:::-;2571:63;;2526:118;2032:619;;;;;:::o;2657:126::-;2694:7;2734:42;2727:5;2723:54;2712:65;;2657:126;;;:::o;2789:96::-;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:474::-;3232:6;3240;3289:2;3277:9;3268:7;3264:23;3260:32;3257:119;;;3295:79;;:::i;:::-;3257:119;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3513:118;3164:474;;;;;:::o;3644:90::-;3678:7;3721:5;3714:13;3707:21;3696:32;;3644:90;;;:::o;3740:109::-;3821:21;3836:5;3821:21;:::i;:::-;3816:3;3809:34;3740:109;;:::o;3855:210::-;3942:4;3980:2;3969:9;3965:18;3957:26;;3993:65;4055:1;4044:9;4040:17;4031:6;3993:65;:::i;:::-;3855:210;;;;:::o;4071:60::-;4099:3;4120:5;4113:12;;4071:60;;;:::o;4137:142::-;4187:9;4220:53;4238:34;4247:24;4265:5;4247:24;:::i;:::-;4238:34;:::i;:::-;4220:53;:::i;:::-;4207:66;;4137:142;;;:::o;4285:126::-;4335:9;4368:37;4399:5;4368:37;:::i;:::-;4355:50;;4285:126;;;:::o;4417:153::-;4494:9;4527:37;4558:5;4527:37;:::i;:::-;4514:50;;4417:153;;;:::o;4576:185::-;4690:64;4748:5;4690:64;:::i;:::-;4685:3;4678:77;4576:185;;:::o;4767:276::-;4887:4;4925:2;4914:9;4910:18;4902:26;;4938:98;5033:1;5022:9;5018:17;5009:6;4938:98;:::i;:::-;4767:276;;;;:::o;5049:118::-;5136:24;5154:5;5136:24;:::i;:::-;5131:3;5124:37;5049:118;;:::o;5173:222::-;5266:4;5304:2;5293:9;5289:18;5281:26;;5317:71;5385:1;5374:9;5370:17;5361:6;5317:71;:::i;:::-;5173:222;;;;:::o;5401:104::-;5446:7;5475:24;5493:5;5475:24;:::i;:::-;5464:35;;5401:104;;;:::o;5511:142::-;5614:32;5640:5;5614:32;:::i;:::-;5609:3;5602:45;5511:142;;:::o;5659:254::-;5768:4;5806:2;5795:9;5791:18;5783:26;;5819:87;5903:1;5892:9;5888:17;5879:6;5819:87;:::i;:::-;5659:254;;;;:::o;5919:116::-;5989:21;6004:5;5989:21;:::i;:::-;5982:5;5979:32;5969:60;;6025:1;6022;6015:12;5969:60;5919:116;:::o;6041:133::-;6084:5;6122:6;6109:20;6100:29;;6138:30;6162:5;6138:30;:::i;:::-;6041:133;;;;:::o;6180:468::-;6245:6;6253;6302:2;6290:9;6281:7;6277:23;6273:32;6270:119;;;6308:79;;:::i;:::-;6270:119;6428:1;6453:53;6498:7;6489:6;6478:9;6474:22;6453:53;:::i;:::-;6443:63;;6399:117;6555:2;6581:50;6623:7;6614:6;6603:9;6599:22;6581:50;:::i;:::-;6571:60;;6526:115;6180:468;;;;;:::o;6654:619::-;6731:6;6739;6747;6796:2;6784:9;6775:7;6771:23;6767:32;6764:119;;;6802:79;;:::i;:::-;6764:119;6922:1;6947:53;6992:7;6983:6;6972:9;6968:22;6947:53;:::i;:::-;6937:63;;6893:117;7049:2;7075:53;7120:7;7111:6;7100:9;7096:22;7075:53;:::i;:::-;7065:63;;7020:118;7177:2;7203:53;7248:7;7239:6;7228:9;7224:22;7203:53;:::i;:::-;7193:63;;7148:118;6654:619;;;;;:::o;7279:323::-;7335:6;7384:2;7372:9;7363:7;7359:23;7355:32;7352:119;;;7390:79;;:::i;:::-;7352:119;7510:1;7535:50;7577:7;7568:6;7557:9;7553:22;7535:50;:::i;:::-;7525:60;;7481:114;7279:323;;;;:::o;7608:118::-;7695:24;7713:5;7695:24;:::i;:::-;7690:3;7683:37;7608:118;;:::o;7732:222::-;7825:4;7863:2;7852:9;7848:18;7840:26;;7876:71;7944:1;7933:9;7929:17;7920:6;7876:71;:::i;:::-;7732:222;;;;:::o;7960:86::-;7995:7;8035:4;8028:5;8024:16;8013:27;;7960:86;;;:::o;8052:112::-;8135:22;8151:5;8135:22;:::i;:::-;8130:3;8123:35;8052:112;;:::o;8170:214::-;8259:4;8297:2;8286:9;8282:18;8274:26;;8310:67;8374:1;8363:9;8359:17;8350:6;8310:67;:::i;:::-;8170:214;;;;:::o;8390:329::-;8449:6;8498:2;8486:9;8477:7;8473:23;8469:32;8466:119;;;8504:79;;:::i;:::-;8466:119;8624:1;8649:53;8694:7;8685:6;8674:9;8670:22;8649:53;:::i;:::-;8639:63;;8595:117;8390:329;;;;:::o;8725:::-;8784:6;8833:2;8821:9;8812:7;8808:23;8804:32;8801:119;;;8839:79;;:::i;:::-;8801:119;8959:1;8984:53;9029:7;9020:6;9009:9;9005:22;8984:53;:::i;:::-;8974:63;;8930:117;8725:329;;;;:::o;9060:474::-;9128:6;9136;9185:2;9173:9;9164:7;9160:23;9156:32;9153:119;;;9191:79;;:::i;:::-;9153:119;9311:1;9336:53;9381:7;9372:6;9361:9;9357:22;9336:53;:::i;:::-;9326:63;;9282:117;9438:2;9464:53;9509:7;9500:6;9489:9;9485:22;9464:53;:::i;:::-;9454:63;;9409:118;9060:474;;;;;:::o;9540:180::-;9588:77;9585:1;9578:88;9685:4;9682:1;9675:15;9709:4;9706:1;9699:15;9726:320;9770:6;9807:1;9801:4;9797:12;9787:22;;9854:1;9848:4;9844:12;9875:18;9865:81;;9931:4;9923:6;9919:17;9909:27;;9865:81;9993:2;9985:6;9982:14;9962:18;9959:38;9956:84;;10012:18;;:::i;:::-;9956:84;9777:269;9726:320;;;:::o;10052:182::-;10192:34;10188:1;10180:6;10176:14;10169:58;10052:182;:::o;10240:366::-;10382:3;10403:67;10467:2;10462:3;10403:67;:::i;:::-;10396:74;;10479:93;10568:3;10479:93;:::i;:::-;10597:2;10592:3;10588:12;10581:19;;10240:366;;;:::o;10612:419::-;10778:4;10816:2;10805:9;10801:18;10793:26;;10865:9;10859:4;10855:20;10851:1;10840:9;10836:17;10829:47;10893:131;11019:4;10893:131;:::i;:::-;10885:139;;10612:419;;;:::o;11037:180::-;11177:32;11173:1;11165:6;11161:14;11154:56;11037:180;:::o;11223:366::-;11365:3;11386:67;11450:2;11445:3;11386:67;:::i;:::-;11379:74;;11462:93;11551:3;11462:93;:::i;:::-;11580:2;11575:3;11571:12;11564:19;;11223:366;;;:::o;11595:419::-;11761:4;11799:2;11788:9;11784:18;11776:26;;11848:9;11842:4;11838:20;11834:1;11823:9;11819:17;11812:47;11876:131;12002:4;11876:131;:::i;:::-;11868:139;;11595:419;;;:::o;12020:179::-;12160:31;12156:1;12148:6;12144:14;12137:55;12020:179;:::o;12205:366::-;12347:3;12368:67;12432:2;12427:3;12368:67;:::i;:::-;12361:74;;12444:93;12533:3;12444:93;:::i;:::-;12562:2;12557:3;12553:12;12546:19;;12205:366;;;:::o;12577:419::-;12743:4;12781:2;12770:9;12766:18;12758:26;;12830:9;12824:4;12820:20;12816:1;12805:9;12801:17;12794:47;12858:131;12984:4;12858:131;:::i;:::-;12850:139;;12577:419;;;:::o;13002:222::-;13142:34;13138:1;13130:6;13126:14;13119:58;13211:5;13206:2;13198:6;13194:15;13187:30;13002:222;:::o;13230:366::-;13372:3;13393:67;13457:2;13452:3;13393:67;:::i;:::-;13386:74;;13469:93;13558:3;13469:93;:::i;:::-;13587:2;13582:3;13578:12;13571:19;;13230:366;;;:::o;13602:419::-;13768:4;13806:2;13795:9;13791:18;13783:26;;13855:9;13849:4;13845:20;13841:1;13830:9;13826:17;13819:47;13883:131;14009:4;13883:131;:::i;:::-;13875:139;;13602:419;;;:::o;14027:222::-;14167:34;14163:1;14155:6;14151:14;14144:58;14236:5;14231:2;14223:6;14219:15;14212:30;14027:222;:::o;14255:366::-;14397:3;14418:67;14482:2;14477:3;14418:67;:::i;:::-;14411:74;;14494:93;14583:3;14494:93;:::i;:::-;14612:2;14607:3;14603:12;14596:19;;14255:366;;;:::o;14627:419::-;14793:4;14831:2;14820:9;14816:18;14808:26;;14880:9;14874:4;14870:20;14866:1;14855:9;14851:17;14844:47;14908:131;15034:4;14908:131;:::i;:::-;14900:139;;14627:419;;;:::o;15052:181::-;15192:33;15188:1;15180:6;15176:14;15169:57;15052:181;:::o;15239:366::-;15381:3;15402:67;15466:2;15461:3;15402:67;:::i;:::-;15395:74;;15478:93;15567:3;15478:93;:::i;:::-;15596:2;15591:3;15587:12;15580:19;;15239:366;;;:::o;15611:419::-;15777:4;15815:2;15804:9;15800:18;15792:26;;15864:9;15858:4;15854:20;15850:1;15839:9;15835:17;15828:47;15892:131;16018:4;15892:131;:::i;:::-;15884:139;;15611:419;;;:::o;16036:228::-;16176:34;16172:1;16164:6;16160:14;16153:58;16245:11;16240:2;16232:6;16228:15;16221:36;16036:228;:::o;16270:366::-;16412:3;16433:67;16497:2;16492:3;16433:67;:::i;:::-;16426:74;;16509:93;16598:3;16509:93;:::i;:::-;16627:2;16622:3;16618:12;16611:19;;16270:366;;;:::o;16642:419::-;16808:4;16846:2;16835:9;16831:18;16823:26;;16895:9;16889:4;16885:20;16881:1;16870:9;16866:17;16859:47;16923:131;17049:4;16923:131;:::i;:::-;16915:139;;16642:419;;;:::o;17067:180::-;17115:77;17112:1;17105:88;17212:4;17209:1;17202:15;17236:4;17233:1;17226:15;17253:191;17293:3;17312:20;17330:1;17312:20;:::i;:::-;17307:25;;17346:20;17364:1;17346:20;:::i;:::-;17341:25;;17389:1;17386;17382:9;17375:16;;17410:3;17407:1;17404:10;17401:36;;;17417:18;;:::i;:::-;17401:36;17253:191;;;;:::o;17450:180::-;17498:77;17495:1;17488:88;17595:4;17592:1;17585:15;17619:4;17616:1;17609:15;17636:185;17676:1;17693:20;17711:1;17693:20;:::i;:::-;17688:25;;17727:20;17745:1;17727:20;:::i;:::-;17722:25;;17766:1;17756:35;;17771:18;;:::i;:::-;17756:35;17813:1;17810;17806:9;17801:14;;17636:185;;;;:::o;17827:225::-;17967:34;17963:1;17955:6;17951:14;17944:58;18036:8;18031:2;18023:6;18019:15;18012:33;17827:225;:::o;18058:366::-;18200:3;18221:67;18285:2;18280:3;18221:67;:::i;:::-;18214:74;;18297:93;18386:3;18297:93;:::i;:::-;18415:2;18410:3;18406:12;18399:19;;18058:366;;;:::o;18430:419::-;18596:4;18634:2;18623:9;18619:18;18611:26;;18683:9;18677:4;18673:20;18669:1;18658:9;18654:17;18647:47;18711:131;18837:4;18711:131;:::i;:::-;18703:139;;18430:419;;;:::o;18855:223::-;18995:34;18991:1;18983:6;18979:14;18972:58;19064:6;19059:2;19051:6;19047:15;19040:31;18855:223;:::o;19084:366::-;19226:3;19247:67;19311:2;19306:3;19247:67;:::i;:::-;19240:74;;19323:93;19412:3;19323:93;:::i;:::-;19441:2;19436:3;19432:12;19425:19;;19084:366;;;:::o;19456:419::-;19622:4;19660:2;19649:9;19645:18;19637:26;;19709:9;19703:4;19699:20;19695:1;19684:9;19680:17;19673:47;19737:131;19863:4;19737:131;:::i;:::-;19729:139;;19456:419;;;:::o;19881:225::-;20021:34;20017:1;20009:6;20005:14;19998:58;20090:8;20085:2;20077:6;20073:15;20066:33;19881:225;:::o;20112:366::-;20254:3;20275:67;20339:2;20334:3;20275:67;:::i;:::-;20268:74;;20351:93;20440:3;20351:93;:::i;:::-;20469:2;20464:3;20460:12;20453:19;;20112:366;;;:::o;20484:419::-;20650:4;20688:2;20677:9;20673:18;20665:26;;20737:9;20731:4;20727:20;20723:1;20712:9;20708:17;20701:47;20765:131;20891:4;20765:131;:::i;:::-;20757:139;;20484:419;;;:::o;20909:177::-;21049:29;21045:1;21037:6;21033:14;21026:53;20909:177;:::o;21092:366::-;21234:3;21255:67;21319:2;21314:3;21255:67;:::i;:::-;21248:74;;21331:93;21420:3;21331:93;:::i;:::-;21449:2;21444:3;21440:12;21433:19;;21092:366;;;:::o;21464:419::-;21630:4;21668:2;21657:9;21653:18;21645:26;;21717:9;21711:4;21707:20;21703:1;21692:9;21688:17;21681:47;21745:131;21871:4;21745:131;:::i;:::-;21737:139;;21464:419;;;:::o;21889:223::-;22029:34;22025:1;22017:6;22013:14;22006:58;22098:6;22093:2;22085:6;22081:15;22074:31;21889:223;:::o;22118:366::-;22260:3;22281:67;22345:2;22340:3;22281:67;:::i;:::-;22274:74;;22357:93;22446:3;22357:93;:::i;:::-;22475:2;22470:3;22466:12;22459:19;;22118:366;;;:::o;22490:419::-;22656:4;22694:2;22683:9;22679:18;22671:26;;22743:9;22737:4;22733:20;22729:1;22718:9;22714:17;22707:47;22771:131;22897:4;22771:131;:::i;:::-;22763:139;;22490:419;;;:::o;22915:221::-;23055:34;23051:1;23043:6;23039:14;23032:58;23124:4;23119:2;23111:6;23107:15;23100:29;22915:221;:::o;23142:366::-;23284:3;23305:67;23369:2;23364:3;23305:67;:::i;:::-;23298:74;;23381:93;23470:3;23381:93;:::i;:::-;23499:2;23494:3;23490:12;23483:19;;23142:366;;;:::o;23514:419::-;23680:4;23718:2;23707:9;23703:18;23695:26;;23767:9;23761:4;23757:20;23753:1;23742:9;23738:17;23731:47;23795:131;23921:4;23795:131;:::i;:::-;23787:139;;23514:419;;;:::o;23939:224::-;24079:34;24075:1;24067:6;24063:14;24056:58;24148:7;24143:2;24135:6;24131:15;24124:32;23939:224;:::o;24169:366::-;24311:3;24332:67;24396:2;24391:3;24332:67;:::i;:::-;24325:74;;24408:93;24497:3;24408:93;:::i;:::-;24526:2;24521:3;24517:12;24510:19;;24169:366;;;:::o;24541:419::-;24707:4;24745:2;24734:9;24730:18;24722:26;;24794:9;24788:4;24784:20;24780:1;24769:9;24765:17;24758:47;24822:131;24948:4;24822:131;:::i;:::-;24814:139;;24541:419;;;:::o;24966:222::-;25106:34;25102:1;25094:6;25090:14;25083:58;25175:5;25170:2;25162:6;25158:15;25151:30;24966:222;:::o;25194:366::-;25336:3;25357:67;25421:2;25416:3;25357:67;:::i;:::-;25350:74;;25433:93;25522:3;25433:93;:::i;:::-;25551:2;25546:3;25542:12;25535:19;;25194:366;;;:::o;25566:419::-;25732:4;25770:2;25759:9;25755:18;25747:26;;25819:9;25813:4;25809:20;25805:1;25794:9;25790:17;25783:47;25847:131;25973:4;25847:131;:::i;:::-;25839:139;;25566:419;;;:::o;25991:227::-;26131:34;26127:1;26119:6;26115:14;26108:58;26200:10;26195:2;26187:6;26183:15;26176:35;25991:227;:::o;26224:366::-;26366:3;26387:67;26451:2;26446:3;26387:67;:::i;:::-;26380:74;;26463:93;26552:3;26463:93;:::i;:::-;26581:2;26576:3;26572:12;26565:19;;26224:366;;;:::o;26596:419::-;26762:4;26800:2;26789:9;26785:18;26777:26;;26849:9;26843:4;26839:20;26835:1;26824:9;26820:17;26813:47;26877:131;27003:4;26877:131;:::i;:::-;26869:139;;26596:419;;;:::o;27021:194::-;27061:4;27081:20;27099:1;27081:20;:::i;:::-;27076:25;;27115:20;27133:1;27115:20;:::i;:::-;27110:25;;27159:1;27156;27152:9;27144:17;;27183:1;27177:4;27174:11;27171:37;;;27188:18;;:::i;:::-;27171:37;27021:194;;;;:::o;27221:410::-;27261:7;27284:20;27302:1;27284:20;:::i;:::-;27279:25;;27318:20;27336:1;27318:20;:::i;:::-;27313:25;;27373:1;27370;27366:9;27395:30;27413:11;27395:30;:::i;:::-;27384:41;;27574:1;27565:7;27561:15;27558:1;27555:22;27535:1;27528:9;27508:83;27485:139;;27604:18;;:::i;:::-;27485:139;27269:362;27221:410;;;;:::o;27637:220::-;27777:34;27773:1;27765:6;27761:14;27754:58;27846:3;27841:2;27833:6;27829:15;27822:28;27637:220;:::o;27863:366::-;28005:3;28026:67;28090:2;28085:3;28026:67;:::i;:::-;28019:74;;28102:93;28191:3;28102:93;:::i;:::-;28220:2;28215:3;28211:12;28204:19;;27863:366;;;:::o;28235:419::-;28401:4;28439:2;28428:9;28424:18;28416:26;;28488:9;28482:4;28478:20;28474:1;28463:9;28459:17;28452:47;28516:131;28642:4;28516:131;:::i;:::-;28508:139;;28235:419;;;:::o;28660:180::-;28708:77;28705:1;28698:88;28805:4;28802:1;28795:15;28829:4;28826:1;28819:15;28846:180;28894:77;28891:1;28884:88;28991:4;28988:1;28981:15;29015:4;29012:1;29005:15;29032:143;29089:5;29120:6;29114:13;29105:22;;29136:33;29163:5;29136:33;:::i;:::-;29032:143;;;;:::o;29181:351::-;29251:6;29300:2;29288:9;29279:7;29275:23;29271:32;29268:119;;;29306:79;;:::i;:::-;29268:119;29426:1;29451:64;29507:7;29498:6;29487:9;29483:22;29451:64;:::i;:::-;29441:74;;29397:128;29181:351;;;;:::o;29538:85::-;29583:7;29612:5;29601:16;;29538:85;;;:::o;29629:158::-;29687:9;29720:61;29738:42;29747:32;29773:5;29747:32;:::i;:::-;29738:42;:::i;:::-;29720:61;:::i;:::-;29707:74;;29629:158;;;:::o;29793:147::-;29888:45;29927:5;29888:45;:::i;:::-;29883:3;29876:58;29793:147;;:::o;29946:114::-;30013:6;30047:5;30041:12;30031:22;;29946:114;;;:::o;30066:184::-;30165:11;30199:6;30194:3;30187:19;30239:4;30234:3;30230:14;30215:29;;30066:184;;;;:::o;30256:132::-;30323:4;30346:3;30338:11;;30376:4;30371:3;30367:14;30359:22;;30256:132;;;:::o;30394:108::-;30471:24;30489:5;30471:24;:::i;:::-;30466:3;30459:37;30394:108;;:::o;30508:179::-;30577:10;30598:46;30640:3;30632:6;30598:46;:::i;:::-;30676:4;30671:3;30667:14;30653:28;;30508:179;;;;:::o;30693:113::-;30763:4;30795;30790:3;30786:14;30778:22;;30693:113;;;:::o;30842:732::-;30961:3;30990:54;31038:5;30990:54;:::i;:::-;31060:86;31139:6;31134:3;31060:86;:::i;:::-;31053:93;;31170:56;31220:5;31170:56;:::i;:::-;31249:7;31280:1;31265:284;31290:6;31287:1;31284:13;31265:284;;;31366:6;31360:13;31393:63;31452:3;31437:13;31393:63;:::i;:::-;31386:70;;31479:60;31532:6;31479:60;:::i;:::-;31469:70;;31325:224;31312:1;31309;31305:9;31300:14;;31265:284;;;31269:14;31565:3;31558:10;;30966:608;;;30842:732;;;;:::o;31580:831::-;31843:4;31881:3;31870:9;31866:19;31858:27;;31895:71;31963:1;31952:9;31948:17;31939:6;31895:71;:::i;:::-;31976:80;32052:2;32041:9;32037:18;32028:6;31976:80;:::i;:::-;32103:9;32097:4;32093:20;32088:2;32077:9;32073:18;32066:48;32131:108;32234:4;32225:6;32131:108;:::i;:::-;32123:116;;32249:72;32317:2;32306:9;32302:18;32293:6;32249:72;:::i;:::-;32331:73;32399:3;32388:9;32384:19;32375:6;32331:73;:::i;:::-;31580:831;;;;;;;;:::o;32417:483::-;32588:4;32626:2;32615:9;32611:18;32603:26;;32639:71;32707:1;32696:9;32692:17;32683:6;32639:71;:::i;:::-;32757:9;32751:4;32747:20;32742:2;32731:9;32727:18;32720:48;32785:108;32888:4;32879:6;32785:108;:::i;:::-;32777:116;;32417:483;;;;;:::o;32906:807::-;33155:4;33193:3;33182:9;33178:19;33170:27;;33207:71;33275:1;33264:9;33260:17;33251:6;33207:71;:::i;:::-;33288:72;33356:2;33345:9;33341:18;33332:6;33288:72;:::i;:::-;33370:80;33446:2;33435:9;33431:18;33422:6;33370:80;:::i;:::-;33460;33536:2;33525:9;33521:18;33512:6;33460:80;:::i;:::-;33550:73;33618:3;33607:9;33603:19;33594:6;33550:73;:::i;:::-;33633;33701:3;33690:9;33686:19;33677:6;33633:73;:::i;:::-;32906:807;;;;;;;;;:::o;33719:143::-;33776:5;33807:6;33801:13;33792:22;;33823:33;33850:5;33823:33;:::i;:::-;33719:143;;;;:::o;33868:663::-;33956:6;33964;33972;34021:2;34009:9;34000:7;33996:23;33992:32;33989:119;;;34027:79;;:::i;:::-;33989:119;34147:1;34172:64;34228:7;34219:6;34208:9;34204:22;34172:64;:::i;:::-;34162:74;;34118:128;34285:2;34311:64;34367:7;34358:6;34347:9;34343:22;34311:64;:::i;:::-;34301:74;;34256:129;34424:2;34450:64;34506:7;34497:6;34486:9;34482:22;34450:64;:::i;:::-;34440:74;;34395:129;33868:663;;;;;:::o

Swarm Source

ipfs://c33f98e92294cc94696fb2b5f451b2801f0b741781e9234db92fcf4806984d1e
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.