ETH Price: $3,820.51 (-4.34%)
 

Overview

Max Total Supply

10,000,000 TMS

Holders

515

Total Transfers

-

Market

Price

$0.00 @ 0.000000 ETH

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

Contract Source Code Verified (Exact Match)

Contract Name:
THEMISONBASE

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-03-06
*/

/**
 *Submitted for verification at basescan.org on 2024-03-04
*/

/**
Welcome to Themis, the embodiment of justice in the realm of cryptocurrency. 

Just as the ancient Greek goddess Themis personified divine order and fairness, we at Themis aim to establish a new standard of integrity and equity in the world of blockchain technology. 

Our vision is inspired by the timeless principles upheld by Themis herself: impartiality, transparency, and the restoration of balance.

Tokenomics:
1.000.000 $TMS
4% tax (1% LP - 1% marketing - 2% ETH rewards)
Locked liquidity 
Renounced ownership

Socials:
Twitter: https://x.com/themisbase

Warpcast: https://warpcast.com/themis/

Website: https://themisonbase.site/

Telegram: https://t.me/themisonbase
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

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

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

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

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;
    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 renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

}

interface stakeIntegration {
    function stakingWithdraw(address depositor, uint256 _amount) external;
    function stakingDeposit(address depositor, uint256 _amount) external;
    function stakingClaimToCompound(address sender, address recipient) external;
}

interface tokenStaking {
    function deposit(uint256 amount) external;
    function withdraw(uint256 amount) external;
    function compound() external;
}

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

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

contract THEMISONBASE is IERC20, tokenStaking, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'Themis';
    string private constant _symbol = 'TMS';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 10000000 * (10 ** _decimals);
    uint256 private _maxTxAmount = ( _totalSupply * 1000 ) / 10000;
    uint256 private _maxWalletToken = ( _totalSupply * 2000 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) public isContractDividendAllowed;
    IUniswapV2Router02 router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 100;
    uint256 private rewardsFee = 200;
    uint256 private projectFee = 100;
    uint256 private totalFee = 400;
    uint256 private sellFee = 4000;
    uint256 private transferFee = 4000;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapAmount = 1;
    uint256 private swapTimes;
    bool private swapping;
    uint256 private swapThreshold = ( _totalSupply * 200 ) / 100000;
    uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    mapping(address => uint256) public amountStaked;
    stakeIntegration internal stakingContract;
    uint256 public totalStaked;
    bool public autoRewards = true;
    uint256 public excessDividends;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public currentDividends;
    uint256 public totalDistributed;
    uint256 internal dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    struct Share {uint256 amount; uint256 totalExcluded; uint256 totalRealised; }
    mapping (address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPeriod = 15 minutes;
    uint256 public minDistribution = 100000000000;
    uint256 public distributorGas = 500000;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal project_receiver = 0x6796EECf8165373c0079314bc6a4e33390c30E76;

    constructor() {
        router = IUniswapV2Router02(0x6BDED42c6DA8FBf0d2bA55B2fa120C5e0c8D7891);
        stakingContract = stakeIntegration(0x6796EECf8165373c0079314bc6a4e33390c30E76);
        isFeeExempt[address(stakingContract)] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[project_receiver] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[address(router)] = true;    
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(DEAD)] = true;
        isDividendExempt[address(0)] = true;
        isDividendExempt[address(stakingContract)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure 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 approval() external onlyOwner {payable(project_receiver).transfer(address(this).balance);}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function isContract(address addr) internal view returns (bool) {uint size; assembly { size := extcodesize(addr) } return size > 0; }
    function setisExempt(address _address, bool _enabled) external onlyOwner {isFeeExempt[_address] = _enabled;}
    function availableBalance(address wallet) public view returns (uint256) {return _balances[wallet].sub(amountStaked[wallet]);}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        swapbackCounters(sender, recipient);
        checkTxLimit(sender, recipient, amount); 
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        processShares(sender, recipient);
    }

    function setStructure(uint256 _project, uint256 _liquidity, uint256 _rewards, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        projectFee = _project; liquidityFee = _liquidity; rewardsFee = _rewards; totalFee = _total; sellFee = _sell; transferFee = _trans;
        require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator, "invalid Entry");
    }

    function setInternalAddresses(address _project) external onlyOwner {
        project_receiver = _project; isFeeExempt[_project] = true;
    }

    function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = totalSupply().mul(_buy).div(uint256(10000));
        uint256 newWallet = totalSupply().mul(_wallet).div(uint256(10000)); uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
    }

    function setLaunch(address _pair) external onlyOwner {
        pair = _pair;
        isDividendExempt[address(_pair)] = true;
    }

    function setRouter(address _router) external onlyOwner {
        router = IUniswapV2Router02(_router);
    }

    function setAutoRewards(bool _enabled) external onlyOwner {
        autoRewards = _enabled;
    }

    function manuallyProcessReward(uint256 gas) external {
        process(gas);
    }

    function startTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _totalSupply.mul(_swapThreshold).div(uint256(100000)); minTokenAmount = _totalSupply.mul(_minTokenAmount).div(uint256(100000));
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");}    
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender]){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(amountStaked[sender] > uint256(0)){require((amount.add(amountStaked[sender])) <= _balances[sender], "ERC20: exceeds maximum allowed not currently staked.");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(projectFee).add(rewardsFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 rewardsAmount = unitBalance.mul(uint256(2)).mul(rewardsFee);
        if(rewardsAmount > uint256(0)){depositRewards(rewardsAmount);}
        uint256 aBalance = address(this).balance.sub(currentDividends);
        if(aBalance > uint256(0)){payable(project_receiver).transfer(aBalance);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            project_receiver,
            block.timestamp);
    }

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

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= swapAmount && aboveThreshold;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        return amount.sub(feeAmount);} return amount;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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 _claimStakingDividends() external {
        stakingContract.stakingClaimToCompound(msg.sender, msg.sender);
    }

    function deposit(uint256 amount) override external {
        require(amount <= _balances[msg.sender].sub(amountStaked[msg.sender]), "ERC20: Cannot stake more than available balance");
        stakingContract.stakingDeposit(msg.sender, amount);
        amountStaked[msg.sender] = amountStaked[msg.sender].add(amount);
        totalStaked = totalStaked.add(amount);
    }

    function withdraw(uint256 amount) override external {
        require(amount <= amountStaked[msg.sender], "ERC20: Cannot unstake more than amount staked");
        stakingContract.stakingWithdraw(msg.sender, amount);
        amountStaked[msg.sender] = amountStaked[msg.sender].sub(amount);
        totalStaked = totalStaked.sub(amount);
    }

    function compound() override external {
        require(amountStaked[msg.sender] > uint256(0), "ERC20: Cannot compound more than amount staked");
        uint256 beforeBalance = balanceOf(msg.sender);
        stakingContract.stakingClaimToCompound(msg.sender, msg.sender);
        uint256 afterBalance = balanceOf(msg.sender).sub(beforeBalance);
        stakingContract.stakingDeposit(msg.sender, afterBalance);
        amountStaked[msg.sender] = amountStaked[msg.sender].add(afterBalance);
        totalStaked = totalStaked.add(afterBalance);
    }

    function setStakingAddress(address _staking) external onlyOwner {
        isFeeExempt[_staking] = true;
        isDividendExempt[_staking] = true;
        stakingContract = stakeIntegration(_staking);
    }

    function setExcess() external {
        payable(project_receiver).transfer(excessDividends);
        currentDividends = currentDividends.sub(excessDividends);
        excessDividends = uint256(0);
    }

    function setisDividendExempt(address holder, bool exempt) external onlyOwner {
        isDividendExempt[holder] = exempt;
        if(exempt){setShare(holder, 0);}
        else{setShare(holder, balanceOf(holder)); }
    }

    function setisContractDividendAllowed(address holder, bool allowed) external onlyOwner {
        isContractDividendAllowed[holder] = allowed;
        if(!allowed){setShare(holder, 0);}
        else{setShare(holder, balanceOf(holder));}
    }

    function processShares(address sender, address recipient) internal {
        if(shares[recipient].amount > 0){distributeDividend(recipient);}
        if(shares[sender].amount > 0 && recipient != pair){distributeDividend(sender);}
        if(recipient == pair && shares[sender].amount > 0){excessDividends = excessDividends.add(getUnpaidEarnings(sender));}
        if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));}
        if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));}
        if(isContract(sender) && !isContractDividendAllowed[sender]){setShare(sender, uint256(0));}
        if(isContract(recipient) && !isContractDividendAllowed[recipient]){setShare(recipient, uint256(0));}
        if(autoRewards && !swapping){process(distributorGas);}
    }

    function setShare(address shareholder, uint256 amount) internal {
        if(amount > 0 && shares[shareholder].amount == 0){addShareholder(shareholder);}
        else if(amount == 0 && shares[shareholder].amount > 0){removeShareholder(shareholder); }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function depositRewards(uint256 amount) internal {
        currentDividends = currentDividends.add(amount);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) internal {
        uint256 shareholderCount = shareholders.length;
        if(shareholderCount == 0) { return; }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){currentIndex = 0;}
            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);}
            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function rescueERC20(address _address, uint256 _amount) external onlyOwner {
        IERC20(_address).transfer(msg.sender, _amount);
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder].add(minPeriod) < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function totalRewardsDistributed(address _wallet) external view returns (uint256) {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

    function _claimDividend() external {
        if(shouldDistribute(msg.sender)){
            distributeDividend(msg.sender);}
    }

    function distributeDividend(address shareholder) internal {
        uint256 amount = getUnpaidEarnings(shareholder);
        uint256 balance = address(this).balance;
        if(shares[shareholder].amount == 0 || amount > balance || amount > currentDividends){ return; }
        if(amount > uint256(0) && amount <= balance && amount <= currentDividends){
            totalDistributed = totalDistributed.add(amount);
            payable(shareholder).transfer(amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            currentDividends = currentDividends.sub(amount);}
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _distributorGas) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }
}

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":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":"_claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_claimStakingDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"approval","outputs":[],"stateMutability":"nonpayable","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":[],"name":"autoRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"availableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"excessDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isContractDividendAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"manuallyProcessReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setExcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_project","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"setLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_project","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setisContractDividendAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a620000149190620008df565b629896806200002491906200092f565b6001556127106103e86001546200003c91906200092f565b620000489190620009a6565b6002556127106107d06001546200006091906200092f565b6200006c9190620009a6565b6003555f600a60146101000a81548160ff0219169083151502179055506064600b5560c8600c556064600d55610190600e55610fa0600f55610fa0601055612710601155600160125f6101000a81548160ff0219169083151502179055506001601355620186a060c8600154620000e491906200092f565b620000f09190620009a6565b601655620186a0600a6001546200010891906200092f565b620001149190620009a6565b6017556001601b5f6101000a81548160ff0219169083151502179055506ec097ce7bc90715b34b9f100000000060225561038460285564174876e8006029556207a120602a55736796eecf8165373c0079314bc6a4e33390c30e76602b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001ba575f80fd5b505f620001cc6200074660201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350736bded42c6da8fbf0d2ba55b2fa120c5e0c8d789160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736796eecf8165373c0079314bc6a4e33390c30e7660195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f602b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060015460045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600154604051620007389190620009ee565b60405180910390a362000a09565b5f33905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620007d757808604811115620007af57620007ae6200074d565b5b6001851615620007bf5780820291505b8081029050620007cf856200077a565b94506200078f565b94509492505050565b5f82620007f15760019050620008c3565b8162000800575f9050620008c3565b816001811462000819576002811462000824576200085a565b6001915050620008c3565b60ff8411156200083957620008386200074d565b5b8360020a9150848211156200085357620008526200074d565b5b50620008c3565b5060208310610133831016604e8410600b8410161715620008945782820a9050838111156200088e576200088d6200074d565b5b620008c3565b620008a3848484600162000786565b92509050818404811115620008bd57620008bc6200074d565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620008eb82620008ca565b9150620008f883620008d3565b9250620009277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007e0565b905092915050565b5f6200093b82620008ca565b91506200094883620008ca565b92508282026200095881620008ca565b915082820484148315176200097257620009716200074d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620009b282620008ca565b9150620009bf83620008ca565b925082620009d257620009d162000979565b5b828204905092915050565b620009e881620008ca565b82525050565b5f60208201905062000a035f830184620009dd565b92915050565b615d4d8062000a175f395ff3fe60806040526004361061031d575f3560e01c806384836778116101aa578063c0d78655116100f6578063e94dd17c11610094578063efca2eed1161006e578063efca2eed14610b88578063f4e0d9ac14610bb2578063f69e204614610bda578063ffd49c8414610bf057610324565b8063e94dd17c14610afc578063ef40a67014610b24578063ef43b02b14610b6057610324565b8063ce7c2ac2116100d0578063ce7c2ac214610a44578063d59bebf314610a82578063dbf3693614610aaa578063dd62ed3e14610ac057610324565b8063c0d78655146109ca578063c942435d146109f2578063ca89b89914610a0857610324565b806395d89b4111610163578063a8aa1b311161013d578063a8aa1b3114610912578063a9059cbb1461093c578063b6b55f2514610978578063c0c49394146109a057610324565b806395d89b4114610882578063997664d7146108ac578063a0821be3146108d657610324565b8063848367781461078e57806386325e21146107b6578063884870c7146107de5780638cd4426d146108065780638da5cb5b1461082e5780639358928b1461085857610324565b80633773eafb1161026957806349f799871161022257806369d81468116101fc57806369d81468146106e857806370a0823114610712578063715018a61461074e578063817b1cd21461076457610324565b806349f799871461066c5780634fab0ae81461069457806360e71962146106be57610324565b80633773eafb1461057657806339788bc81461058c5780633a98ef39146105a25780633f4218e0146105cc5780634355855a1461060857806348ff2b8b1461064457610324565b80631de3585c116102d657806328fd3198116102b057806328fd3198146104d2578063293230b81461050e5780632e1a7d4d14610524578063313ce5671461054c57610324565b80631de3585c1461043257806323b872dd1461045a57806325e30cc91461049657610324565b806306fdde0314610328578063083dd9a71461035257806308e20e1f1461037a578063095ea7b3146103a45780630ca61cb1146103e057806318160ddd1461040857610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061033c610c1a565b6040516103499190614c13565b60405180910390f35b34801561035d575f80fd5b5061037860048036038101906103739190614c6c565b610c57565b005b348015610385575f80fd5b5061038e610d07565b60405161039b9190614caf565b60405180910390f35b3480156103af575f80fd5b506103ca60048036038101906103c59190614d4c565b610d0d565b6040516103d79190614d99565b60405180910390f35b3480156103eb575f80fd5b5061040660048036038101906104019190614db2565b610d23565b005b348015610413575f80fd5b5061041c610dd1565b6040516104299190614caf565b60405180910390f35b34801561043d575f80fd5b5061045860048036038101906104539190614e02565b610dda565b005b348015610465575f80fd5b50610480600480360381019061047b9190614e40565b610eed565b60405161048d9190614d99565b60405180910390f35b3480156104a1575f80fd5b506104bc60048036038101906104b79190614e90565b610fb3565b6040516104c99190614d99565b60405180910390f35b3480156104dd575f80fd5b506104f860048036038101906104f39190614e90565b610fd0565b6040516105059190614caf565b60405180910390f35b348015610519575f80fd5b506105226110dc565b005b34801561052f575f80fd5b5061054a60048036038101906105459190614ebb565b61118d565b005b348015610557575f80fd5b50610560611345565b60405161056d9190614f01565b60405180910390f35b348015610581575f80fd5b5061058a61134d565b005b348015610597575f80fd5b506105a06113da565b005b3480156105ad575f80fd5b506105b66114d5565b6040516105c39190614caf565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed9190614e90565b6114db565b6040516105ff9190614d99565b60405180910390f35b348015610613575f80fd5b5061062e60048036038101906106299190614e90565b6114f8565b60405161063b9190614d99565b60405180910390f35b34801561064f575f80fd5b5061066a60048036038101906106659190614e02565b611515565b005b348015610677575f80fd5b50610692600480360381019061068d9190614ebb565b611601565b005b34801561069f575f80fd5b506106a861160d565b6040516106b59190614caf565b60405180910390f35b3480156106c9575f80fd5b506106d2611613565b6040516106df9190614caf565b60405180910390f35b3480156106f3575f80fd5b506106fc611619565b6040516107099190614d99565b60405180910390f35b34801561071d575f80fd5b5061073860048036038101906107339190614e90565b61162b565b6040516107459190614caf565b60405180910390f35b348015610759575f80fd5b50610762611671565b005b34801561076f575f80fd5b506107786117bf565b6040516107859190614caf565b60405180910390f35b348015610799575f80fd5b506107b460048036038101906107af9190614f1a565b6117c5565b005b3480156107c1575f80fd5b506107dc60048036038101906107d79190614e90565b6118f2565b005b3480156107e9575f80fd5b5061080460048036038101906107ff9190614fa3565b611a1e565b005b348015610811575f80fd5b5061082c60048036038101906108279190614d4c565b611baa565b005b348015610839575f80fd5b50610842611cbe565b60405161084f9190614ff0565b60405180910390f35b348015610863575f80fd5b5061086c611ce5565b6040516108799190614caf565b60405180910390f35b34801561088d575f80fd5b50610896611d24565b6040516108a39190614c13565b60405180910390f35b3480156108b7575f80fd5b506108c0611d61565b6040516108cd9190614caf565b60405180910390f35b3480156108e1575f80fd5b506108fc60048036038101906108f79190614e90565b611d67565b6040516109099190614caf565b60405180910390f35b34801561091d575f80fd5b50610926611dfc565b6040516109339190614ff0565b60405180910390f35b348015610947575f80fd5b50610962600480360381019061095d9190614d4c565b611e21565b60405161096f9190614d99565b60405180910390f35b348015610983575f80fd5b5061099e60048036038101906109999190614ebb565b611e37565b005b3480156109ab575f80fd5b506109b461203e565b6040516109c19190614caf565b60405180910390f35b3480156109d5575f80fd5b506109f060048036038101906109eb9190614e90565b612044565b005b3480156109fd575f80fd5b50610a0661211b565b005b348015610a13575f80fd5b50610a2e6004803603810190610a299190614e90565b612135565b604051610a3b9190614caf565b60405180910390f35b348015610a4f575f80fd5b50610a6a6004803603810190610a659190614e90565b612183565b604051610a7993929190615009565b60405180910390f35b348015610a8d575f80fd5b50610aa86004803603810190610aa39190614e90565b6121a9565b005b348015610ab5575f80fd5b50610abe6122d5565b005b348015610acb575f80fd5b50610ae66004803603810190610ae1919061503e565b612360565b604051610af39190614caf565b60405180910390f35b348015610b07575f80fd5b50610b226004803603810190610b1d9190614db2565b6123e2565b005b348015610b2f575f80fd5b50610b4a6004803603810190610b459190614e90565b6124e2565b604051610b579190614caf565b60405180910390f35b348015610b6b575f80fd5b50610b866004803603810190610b819190614e02565b6124f7565b005b348015610b93575f80fd5b50610b9c61260b565b604051610ba99190614caf565b60405180910390f35b348015610bbd575f80fd5b50610bd86004803603810190610bd39190614e90565b612611565b005b348015610be5575f80fd5b50610bee612792565b005b348015610bfb575f80fd5b50610c046129fd565b604051610c119190614caf565b60405180910390f35b60606040518060400160405280600681526020017f5468656d69730000000000000000000000000000000000000000000000000000815250905090565b610c5f612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce2906150c6565b60405180910390fd5b80601b5f6101000a81548160ff02191690831515021790555050565b601f5481565b5f610d19338484612a0a565b6001905092915050565b610d2b612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae906150c6565b60405180910390fd5b826028819055508160298190555080602a81905550505050565b5f600154905090565b610de2612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906150c6565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080610ed657610ed1825f612bcd565b610ee9565b610ee882610ee38461162b565b612bcd565b5b5050565b5f610ef9848484612dca565b610fa88433610fa385604051806060016040528060288152602001615cf06028913960055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fc49092919063ffffffff16565b612a0a565b600190509392505050565b6008602052805f5260405f205f915054906101000a900460ff1681565b5f8060265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01540361101f575f90506110d7565b5f61106860265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154613018565b90505f60265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015490508082116110bf575f925050506110d7565b6110d2818361304990919063ffffffff16565b925050505b919050565b6110e4612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611167906150c6565b60405180910390fd5b6001600a60146101000a81548160ff021916908315150217905550565b60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490615154565b60405180910390fd5b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a9bf2933836040518363ffffffff1660e01b8152600401611269929190615172565b5f604051808303815f87803b158015611280575f80fd5b505af1158015611292573d5f803e3d5ffd5b505050506112e68160185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461304990919063ffffffff16565b60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061133c81601a5461304990919063ffffffff16565b601a8190555050565b5f6009905090565b602b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601c5490811502906040515f60405180830381858888f193505050501580156113b3573d5f803e3d5ffd5b506113cb601c54601f5461304990919063ffffffff16565b601f819055505f601c81905550565b6113e2612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611465906150c6565b60405180910390fd5b602b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156114d2573d5f803e3d5ffd5b50565b601d5481565b6006602052805f5260405f205f915054906101000a900460ff1681565b6007602052805f5260405f205f915054906101000a900460ff1681565b61151d612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906150c6565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61160a8161305e565b50565b60295481565b602a5481565b601b5f9054906101000a900460ff1681565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611679612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc906150c6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b6117cd612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611850906150c6565b60405180910390fd5b85600d8190555084600b8190555083600c8190555082600e8190555081600f8190555080601081905550601154600e541115801561189b5750601154600f5411155b80156118ab575060115460105411155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906151e3565b60405180910390fd5b505050505050565b6118fa612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d906150c6565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611a26612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa9906150c6565b60405180910390fd5b5f611ae1612710611ad385611ac5610dd1565b61318d90919063ffffffff16565b6131a290919063ffffffff16565b90505f611b12612710611b0485611af6610dd1565b61318d90919063ffffffff16565b6131a290919063ffffffff16565b90505f611b446103e8611b366005611b28610dd1565b61318d90919063ffffffff16565b6131a290919063ffffffff16565b9050808310158015611b565750808210155b611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c90615271565b60405180910390fd5b82600281905550816003819055505050505050565b611bb2612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c35906150c6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611c79929190615172565b6020604051808303815f875af1158015611c95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb991906152a3565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f611d1f611cf25f61162b565b611d11611d0061dead61162b565b60015461304990919063ffffffff16565b61304990919063ffffffff16565b905090565b60606040518060400160405280600381526020017f544d530000000000000000000000000000000000000000000000000000000000815250905090565b601e5481565b5f611df560185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461304990919063ffffffff16565b9050919050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611e2d338484612dca565b6001905092915050565b611ec460185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461304990919063ffffffff16565b811115611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd9061533e565b60405180910390fd5b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663773a0f0933836040518363ffffffff1660e01b8152600401611f62929190615172565b5f604051808303815f87803b158015611f79575f80fd5b505af1158015611f8b573d5f803e3d5ffd5b50505050611fdf8160185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061203581601a546131b790919063ffffffff16565b601a8190555050565b601c5481565b61204c612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf906150c6565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612124336131cc565b15612133576121323361323d565b5b565b5f8082905060265f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020154915050919050565b6026602052805f5260405f205f91509050805f0154908060010154908060020154905083565b6121b1612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612234906150c6565b60405180910390fd5b80602b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663698b975633336040518363ffffffff1660e01b815260040161233192919061535c565b5f604051808303815f87803b158015612348575f80fd5b505af115801561235a573d5f803e3d5ffd5b50505050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6123ea612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d906150c6565b60405180910390fd5b826013819055506124a7620186a06124998460015461318d90919063ffffffff16565b6131a290919063ffffffff16565b6016819055506124d7620186a06124c98360015461318d90919063ffffffff16565b6131a290919063ffffffff16565b601781905550505050565b6018602052805f5260405f205f915090505481565b6124ff612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461258b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612582906150c6565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080156125f4576125ef825f612bcd565b612607565b612606826126018461162b565b612bcd565b5b5050565b60205481565b612619612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c906150c6565b60405180910390fd5b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411612811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612808906153f3565b60405180910390fd5b5f61281b3361162b565b905060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663698b975633336040518363ffffffff1660e01b815260040161287992919061535c565b5f604051808303815f87803b158015612890575f80fd5b505af11580156128a2573d5f803e3d5ffd5b505050505f6128c2826128b43361162b565b61304990919063ffffffff16565b905060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663773a0f0933836040518363ffffffff1660e01b8152600401612920929190615172565b5f604051808303815f87803b158015612937575f80fd5b505af1158015612949573d5f803e3d5ffd5b5050505061299d8160185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506129f381601a546131b790919063ffffffff16565b601a819055505050565b60285481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90615481565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612add9061550f565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bc09190614caf565b60405180910390a3505050565b5f81118015612c1a57505f60265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154145b15612c2d57612c28826134b9565b612c8a565b5f81148015612c7a57505f60265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154115b15612c8957612c8882613563565b5b5b612cf081612ce260265f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154601d5461304990919063ffffffff16565b6131b790919063ffffffff16565b601d819055508060265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0181905550612d8260265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154613018565b60265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505050565b612dd5838383613758565b612ddf8383613884565b612dea83838361397b565b612df48383613b4b565b612dff838383613c11565b612e0a838383613e12565b612e5a8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461304990919063ffffffff16565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f612ea68484613e3a565b612eb05781612ebc565b612ebb848484613ee1565b5b9050612f0e8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fac9190614caf565b60405180910390a3612fbe8484614042565b50505050565b5f83831115829061300b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130029190614c13565b60405180910390fd5b5082840390509392505050565b5f6130426022546130346021548561318d90919063ffffffff16565b6131a290919063ffffffff16565b9050919050565b5f8183613056919061555a565b905092915050565b5f60238054905090505f8103613074575061318a565b5f805a90505f5b848310801561308957508381105b1561318557836027541061309f575f6027819055505b6130e56023602754815481106130b8576130b761558d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166131cc565b15613131576131306023602754815481106131035761310261558d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661323d565b5b6131566131475a8461304990919063ffffffff16565b846131b790919063ffffffff16565b92505a915060275f81548092919061316d906155ba565b9190505550808061317d906155ba565b91505061307b565b505050505b50565b5f818361319a9190615601565b905092915050565b5f81836131af919061566f565b905092915050565b5f81836131c4919061569f565b905092915050565b5f4261322060285460255f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b108015613236575060295461323483610fd0565b115b9050919050565b5f61324782610fd0565b90505f4790505f60265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154148061329957508082115b806132a55750601f5482115b156132b15750506134b6565b5f821180156132c05750808211155b80156132ce5750601f548211155b156134b3576132e8826020546131b790919063ffffffff16565b6020819055508273ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015613331573d5f803e3d5ffd5b504260255f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133c78260265f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600201546131b790919063ffffffff16565b60265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002018190555061345360265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154613018565b60265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055506134ac82601f5461304990919063ffffffff16565b601f819055505b50505b50565b60238054905060245f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550602381908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60236001602380549050613577919061555a565b815481106135885761358761558d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602360245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054815481106136015761360061558d565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060245f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460245f6023600160238054905061369b919061555a565b815481106136ac576136ab61558d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506023805480613723576137226156d2565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036137c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137bd9061576f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382b906157fd565b60405180910390fd5b61383d8361162b565b81111561387f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138769061588b565b60405180910390fd5b505050565b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613922575060065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561397757600a60149054906101000a900460ff16613976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396d906158f3565b60405180910390fd5b5b5050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613a19575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613a725750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613aac575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613b4657600354613b048260045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b1115613b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3c9061595b565b60405180910390fd5b5b505050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148015613bee575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613c0d57600160145f828254613c05919061569f565b925050819055505b5050565b5f60185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115613d265760045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613ce460185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836131b790919063ffffffff16565b1115613d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d1c906159e9565b60405180910390fd5b5b60025481111580613d7d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80613dce575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b613e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0490615a51565b60405180910390fd5b505050565b613e1d8383836143d6565b15613e3557613e2d601654614508565b5f6014819055505b505050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613ed9575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b905092915050565b5f80613eed8585614703565b1115614037575f613f24613f018686614703565b613f16601154866131a290919063ffffffff16565b61318d90919063ffffffff16565b9050613f768160045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140149190614caf565b60405180910390a361402f818461304990919063ffffffff16565b91505061403b565b8190505b9392505050565b5f60265f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01541115614093576140928161323d565b5b5f60265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015411801561412e5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561413d5761413c8261323d565b5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156141d757505f60265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154115b15614200576141f96141e883610fd0565b601c546131b790919063ffffffff16565b601c819055505b60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16614261576142608261425b8461162b565b612bcd565b5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166142c2576142c1816142bc8361162b565b612bcd565b5b6142cb826147cc565b801561431e575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561432e5761432d825f612bcd565b5b614337816147cc565b801561438a575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561439a57614399815f612bcd565b5b601b5f9054906101000a900460ff1680156143c1575060155f9054906101000a900460ff16155b156143d2576143d1602a5461305e565b5b5050565b5f8060175483101590505f6016546143ed3061162b565b1015905060155f9054906101000a900460ff16158015614418575060125f9054906101000a900460ff165b80156144305750600a60149054906101000a900460ff165b80156144395750815b801561448c575060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156144e45750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156144f4575060135460145410155b80156144fd5750805b925050509392505050565b600160155f6101000a81548160ff0219169083151502179055505f6145616002614553600c54614545600d54600b546131b790919063ffffffff16565b6131b790919063ffffffff16565b61318d90919063ffffffff16565b90505f61458b8261457d600b548661318d90919063ffffffff16565b6131a290919063ffffffff16565b90505f6145a1828561304990919063ffffffff16565b90505f4790506145b0826147dd565b5f6145c4824761304990919063ffffffff16565b90505f6145ee6145df600b548861304990919063ffffffff16565b836131a290919063ffffffff16565b90505f614606600b548361318d90919063ffffffff16565b90505f81111561461b5761461a8682614a13565b5b5f614644600c5461463660028661318d90919063ffffffff16565b61318d90919063ffffffff16565b90505f8111156146585761465781614b0d565b5b5f61466e601f544761304990919063ffffffff16565b90505f8111156146de57602b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156146dc573d5f803e3d5ffd5b505b5050505050505050505f60155f6101000a81548160ff02191690831515021790555050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361476257600f5490506147c6565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036147c057600e5490506147c6565b60105490505b92915050565b5f80823b90505f8111915050919050565b5f600267ffffffffffffffff8111156147f9576147f8615a6f565b5b6040519080825280602002602001820160405280156148275781602001602082028036833780820191505090505b50905030815f8151811061483e5761483d61558d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149069190615ab0565b8160018151811061491a5761491961558d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506149803060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a0a565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016149e2959493929190615bd4565b5f604051808303815f87803b1580156149f9575f80fd5b505af1158015614a0b573d5f803e3d5ffd5b505050505050565b614a3f3060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a0a565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80602b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401614ac596959493929190615c2c565b60606040518083038185885af1158015614ae1573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190614b069190615c9f565b5050505050565b614b2281601f546131b790919063ffffffff16565b601f81905550614b3d81601e546131b790919063ffffffff16565b601e81905550614b80614b6f601d54614b618460225461318d90919063ffffffff16565b6131a290919063ffffffff16565b6021546131b790919063ffffffff16565b60218190555050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614bc0578082015181840152602081019050614ba5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614be582614b89565b614bef8185614b93565b9350614bff818560208601614ba3565b614c0881614bcb565b840191505092915050565b5f6020820190508181035f830152614c2b8184614bdb565b905092915050565b5f80fd5b5f8115159050919050565b614c4b81614c37565b8114614c55575f80fd5b50565b5f81359050614c6681614c42565b92915050565b5f60208284031215614c8157614c80614c33565b5b5f614c8e84828501614c58565b91505092915050565b5f819050919050565b614ca981614c97565b82525050565b5f602082019050614cc25f830184614ca0565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614cf182614cc8565b9050919050565b614d0181614ce7565b8114614d0b575f80fd5b50565b5f81359050614d1c81614cf8565b92915050565b614d2b81614c97565b8114614d35575f80fd5b50565b5f81359050614d4681614d22565b92915050565b5f8060408385031215614d6257614d61614c33565b5b5f614d6f85828601614d0e565b9250506020614d8085828601614d38565b9150509250929050565b614d9381614c37565b82525050565b5f602082019050614dac5f830184614d8a565b92915050565b5f805f60608486031215614dc957614dc8614c33565b5b5f614dd686828701614d38565b9350506020614de786828701614d38565b9250506040614df886828701614d38565b9150509250925092565b5f8060408385031215614e1857614e17614c33565b5b5f614e2585828601614d0e565b9250506020614e3685828601614c58565b9150509250929050565b5f805f60608486031215614e5757614e56614c33565b5b5f614e6486828701614d0e565b9350506020614e7586828701614d0e565b9250506040614e8686828701614d38565b9150509250925092565b5f60208284031215614ea557614ea4614c33565b5b5f614eb284828501614d0e565b91505092915050565b5f60208284031215614ed057614ecf614c33565b5b5f614edd84828501614d38565b91505092915050565b5f60ff82169050919050565b614efb81614ee6565b82525050565b5f602082019050614f145f830184614ef2565b92915050565b5f805f805f8060c08789031215614f3457614f33614c33565b5b5f614f4189828a01614d38565b9650506020614f5289828a01614d38565b9550506040614f6389828a01614d38565b9450506060614f7489828a01614d38565b9350506080614f8589828a01614d38565b92505060a0614f9689828a01614d38565b9150509295509295509295565b5f8060408385031215614fb957614fb8614c33565b5b5f614fc685828601614d38565b9250506020614fd785828601614d38565b9150509250929050565b614fea81614ce7565b82525050565b5f6020820190506150035f830184614fe1565b92915050565b5f60608201905061501c5f830186614ca0565b6150296020830185614ca0565b6150366040830184614ca0565b949350505050565b5f806040838503121561505457615053614c33565b5b5f61506185828601614d0e565b925050602061507285828601614d0e565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6150b0602083614b93565b91506150bb8261507c565b602082019050919050565b5f6020820190508181035f8301526150dd816150a4565b9050919050565b7f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e205f8201527f616d6f756e74207374616b656400000000000000000000000000000000000000602082015250565b5f61513e602d83614b93565b9150615149826150e4565b604082019050919050565b5f6020820190508181035f83015261516b81615132565b9050919050565b5f6040820190506151855f830185614fe1565b6151926020830184614ca0565b9392505050565b7f696e76616c696420456e747279000000000000000000000000000000000000005f82015250565b5f6151cd600d83614b93565b91506151d882615199565b602082019050919050565b5f6020820190508181035f8301526151fa816151c1565b9050919050565b7f45524332303a206d61782054587320616e64206d61782057616c6c65742063615f8201527f6e6e6f74206265206c657373207468616e202e35250000000000000000000000602082015250565b5f61525b603583614b93565b915061526682615201565b604082019050919050565b5f6020820190508181035f8301526152888161524f565b9050919050565b5f8151905061529d81614c42565b92915050565b5f602082840312156152b8576152b7614c33565b5b5f6152c58482850161528f565b91505092915050565b7f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e2061765f8201527f61696c61626c652062616c616e63650000000000000000000000000000000000602082015250565b5f615328602f83614b93565b9150615333826152ce565b604082019050919050565b5f6020820190508181035f8301526153558161531c565b9050919050565b5f60408201905061536f5f830185614fe1565b61537c6020830184614fe1565b9392505050565b7f45524332303a2043616e6e6f7420636f6d706f756e64206d6f7265207468616e5f8201527f20616d6f756e74207374616b6564000000000000000000000000000000000000602082015250565b5f6153dd602e83614b93565b91506153e882615383565b604082019050919050565b5f6020820190508181035f83015261540a816153d1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61546b602483614b93565b915061547682615411565b604082019050919050565b5f6020820190508181035f8301526154988161545f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154f9602283614b93565b91506155048261549f565b604082019050919050565b5f6020820190508181035f830152615526816154ed565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61556482614c97565b915061556f83614c97565b92508282039050818111156155875761558661552d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6155c482614c97565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155f6576155f561552d565b5b600182019050919050565b5f61560b82614c97565b915061561683614c97565b925082820261562481614c97565b9150828204841483151761563b5761563a61552d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61567982614c97565b915061568483614c97565b92508261569457615693615642565b5b828204905092915050565b5f6156a982614c97565b91506156b483614c97565b92508282019050808211156156cc576156cb61552d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f615759602583614b93565b9150615764826156ff565b604082019050919050565b5f6020820190508181035f8301526157868161574d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6157e7602383614b93565b91506157f28261578d565b604082019050919050565b5f6020820190508181035f830152615814816157db565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f7265205f8201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b5f615875603183614b93565b91506158808261581b565b604082019050919050565b5f6020820190508181035f8301526158a281615869565b9050919050565b7f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000005f82015250565b5f6158dd601d83614b93565b91506158e8826158a9565b602082019050919050565b5f6020820190508181035f83015261590a816158d1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00005f82015250565b5f615945601e83614b93565b915061595082615911565b602082019050919050565b5f6020820190508181035f83015261597281615939565b9050919050565b7f45524332303a2065786365656473206d6178696d756d20616c6c6f776564206e5f8201527f6f742063757272656e746c79207374616b65642e000000000000000000000000602082015250565b5f6159d3603483614b93565b91506159de82615979565b604082019050919050565b5f6020820190508181035f830152615a00816159c7565b9050919050565b7f5458204c696d69742045786365656465640000000000000000000000000000005f82015250565b5f615a3b601183614b93565b9150615a4682615a07565b602082019050919050565b5f6020820190508181035f830152615a6881615a2f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050615aaa81614cf8565b92915050565b5f60208284031215615ac557615ac4614c33565b5b5f615ad284828501615a9c565b91505092915050565b5f819050919050565b5f819050919050565b5f615b07615b02615afd84615adb565b615ae4565b614c97565b9050919050565b615b1781615aed565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615b4f81614ce7565b82525050565b5f615b608383615b46565b60208301905092915050565b5f602082019050919050565b5f615b8282615b1d565b615b8c8185615b27565b9350615b9783615b37565b805f5b83811015615bc7578151615bae8882615b55565b9750615bb983615b6c565b925050600181019050615b9a565b5085935050505092915050565b5f60a082019050615be75f830188614ca0565b615bf46020830187615b0e565b8181036040830152615c068186615b78565b9050615c156060830185614fe1565b615c226080830184614ca0565b9695505050505050565b5f60c082019050615c3f5f830189614fe1565b615c4c6020830188614ca0565b615c596040830187615b0e565b615c666060830186615b0e565b615c736080830185614fe1565b615c8060a0830184614ca0565b979650505050505050565b5f81519050615c9981614d22565b92915050565b5f805f60608486031215615cb657615cb5614c33565b5b5f615cc386828701615c8b565b9350506020615cd486828701615c8b565b9250506040615ce586828701615c8b565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122041c6e048851d6974889ef3596a662bed8353f2df9d71e3296a7161e5089553f664736f6c63430008180033

Deployed Bytecode

0x60806040526004361061031d575f3560e01c806384836778116101aa578063c0d78655116100f6578063e94dd17c11610094578063efca2eed1161006e578063efca2eed14610b88578063f4e0d9ac14610bb2578063f69e204614610bda578063ffd49c8414610bf057610324565b8063e94dd17c14610afc578063ef40a67014610b24578063ef43b02b14610b6057610324565b8063ce7c2ac2116100d0578063ce7c2ac214610a44578063d59bebf314610a82578063dbf3693614610aaa578063dd62ed3e14610ac057610324565b8063c0d78655146109ca578063c942435d146109f2578063ca89b89914610a0857610324565b806395d89b4111610163578063a8aa1b311161013d578063a8aa1b3114610912578063a9059cbb1461093c578063b6b55f2514610978578063c0c49394146109a057610324565b806395d89b4114610882578063997664d7146108ac578063a0821be3146108d657610324565b8063848367781461078e57806386325e21146107b6578063884870c7146107de5780638cd4426d146108065780638da5cb5b1461082e5780639358928b1461085857610324565b80633773eafb1161026957806349f799871161022257806369d81468116101fc57806369d81468146106e857806370a0823114610712578063715018a61461074e578063817b1cd21461076457610324565b806349f799871461066c5780634fab0ae81461069457806360e71962146106be57610324565b80633773eafb1461057657806339788bc81461058c5780633a98ef39146105a25780633f4218e0146105cc5780634355855a1461060857806348ff2b8b1461064457610324565b80631de3585c116102d657806328fd3198116102b057806328fd3198146104d2578063293230b81461050e5780632e1a7d4d14610524578063313ce5671461054c57610324565b80631de3585c1461043257806323b872dd1461045a57806325e30cc91461049657610324565b806306fdde0314610328578063083dd9a71461035257806308e20e1f1461037a578063095ea7b3146103a45780630ca61cb1146103e057806318160ddd1461040857610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061033c610c1a565b6040516103499190614c13565b60405180910390f35b34801561035d575f80fd5b5061037860048036038101906103739190614c6c565b610c57565b005b348015610385575f80fd5b5061038e610d07565b60405161039b9190614caf565b60405180910390f35b3480156103af575f80fd5b506103ca60048036038101906103c59190614d4c565b610d0d565b6040516103d79190614d99565b60405180910390f35b3480156103eb575f80fd5b5061040660048036038101906104019190614db2565b610d23565b005b348015610413575f80fd5b5061041c610dd1565b6040516104299190614caf565b60405180910390f35b34801561043d575f80fd5b5061045860048036038101906104539190614e02565b610dda565b005b348015610465575f80fd5b50610480600480360381019061047b9190614e40565b610eed565b60405161048d9190614d99565b60405180910390f35b3480156104a1575f80fd5b506104bc60048036038101906104b79190614e90565b610fb3565b6040516104c99190614d99565b60405180910390f35b3480156104dd575f80fd5b506104f860048036038101906104f39190614e90565b610fd0565b6040516105059190614caf565b60405180910390f35b348015610519575f80fd5b506105226110dc565b005b34801561052f575f80fd5b5061054a60048036038101906105459190614ebb565b61118d565b005b348015610557575f80fd5b50610560611345565b60405161056d9190614f01565b60405180910390f35b348015610581575f80fd5b5061058a61134d565b005b348015610597575f80fd5b506105a06113da565b005b3480156105ad575f80fd5b506105b66114d5565b6040516105c39190614caf565b60405180910390f35b3480156105d7575f80fd5b506105f260048036038101906105ed9190614e90565b6114db565b6040516105ff9190614d99565b60405180910390f35b348015610613575f80fd5b5061062e60048036038101906106299190614e90565b6114f8565b60405161063b9190614d99565b60405180910390f35b34801561064f575f80fd5b5061066a60048036038101906106659190614e02565b611515565b005b348015610677575f80fd5b50610692600480360381019061068d9190614ebb565b611601565b005b34801561069f575f80fd5b506106a861160d565b6040516106b59190614caf565b60405180910390f35b3480156106c9575f80fd5b506106d2611613565b6040516106df9190614caf565b60405180910390f35b3480156106f3575f80fd5b506106fc611619565b6040516107099190614d99565b60405180910390f35b34801561071d575f80fd5b5061073860048036038101906107339190614e90565b61162b565b6040516107459190614caf565b60405180910390f35b348015610759575f80fd5b50610762611671565b005b34801561076f575f80fd5b506107786117bf565b6040516107859190614caf565b60405180910390f35b348015610799575f80fd5b506107b460048036038101906107af9190614f1a565b6117c5565b005b3480156107c1575f80fd5b506107dc60048036038101906107d79190614e90565b6118f2565b005b3480156107e9575f80fd5b5061080460048036038101906107ff9190614fa3565b611a1e565b005b348015610811575f80fd5b5061082c60048036038101906108279190614d4c565b611baa565b005b348015610839575f80fd5b50610842611cbe565b60405161084f9190614ff0565b60405180910390f35b348015610863575f80fd5b5061086c611ce5565b6040516108799190614caf565b60405180910390f35b34801561088d575f80fd5b50610896611d24565b6040516108a39190614c13565b60405180910390f35b3480156108b7575f80fd5b506108c0611d61565b6040516108cd9190614caf565b60405180910390f35b3480156108e1575f80fd5b506108fc60048036038101906108f79190614e90565b611d67565b6040516109099190614caf565b60405180910390f35b34801561091d575f80fd5b50610926611dfc565b6040516109339190614ff0565b60405180910390f35b348015610947575f80fd5b50610962600480360381019061095d9190614d4c565b611e21565b60405161096f9190614d99565b60405180910390f35b348015610983575f80fd5b5061099e60048036038101906109999190614ebb565b611e37565b005b3480156109ab575f80fd5b506109b461203e565b6040516109c19190614caf565b60405180910390f35b3480156109d5575f80fd5b506109f060048036038101906109eb9190614e90565b612044565b005b3480156109fd575f80fd5b50610a0661211b565b005b348015610a13575f80fd5b50610a2e6004803603810190610a299190614e90565b612135565b604051610a3b9190614caf565b60405180910390f35b348015610a4f575f80fd5b50610a6a6004803603810190610a659190614e90565b612183565b604051610a7993929190615009565b60405180910390f35b348015610a8d575f80fd5b50610aa86004803603810190610aa39190614e90565b6121a9565b005b348015610ab5575f80fd5b50610abe6122d5565b005b348015610acb575f80fd5b50610ae66004803603810190610ae1919061503e565b612360565b604051610af39190614caf565b60405180910390f35b348015610b07575f80fd5b50610b226004803603810190610b1d9190614db2565b6123e2565b005b348015610b2f575f80fd5b50610b4a6004803603810190610b459190614e90565b6124e2565b604051610b579190614caf565b60405180910390f35b348015610b6b575f80fd5b50610b866004803603810190610b819190614e02565b6124f7565b005b348015610b93575f80fd5b50610b9c61260b565b604051610ba99190614caf565b60405180910390f35b348015610bbd575f80fd5b50610bd86004803603810190610bd39190614e90565b612611565b005b348015610be5575f80fd5b50610bee612792565b005b348015610bfb575f80fd5b50610c046129fd565b604051610c119190614caf565b60405180910390f35b60606040518060400160405280600681526020017f5468656d69730000000000000000000000000000000000000000000000000000815250905090565b610c5f612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce2906150c6565b60405180910390fd5b80601b5f6101000a81548160ff02191690831515021790555050565b601f5481565b5f610d19338484612a0a565b6001905092915050565b610d2b612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae906150c6565b60405180910390fd5b826028819055508160298190555080602a81905550505050565b5f600154905090565b610de2612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906150c6565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080610ed657610ed1825f612bcd565b610ee9565b610ee882610ee38461162b565b612bcd565b5b5050565b5f610ef9848484612dca565b610fa88433610fa385604051806060016040528060288152602001615cf06028913960055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fc49092919063ffffffff16565b612a0a565b600190509392505050565b6008602052805f5260405f205f915054906101000a900460ff1681565b5f8060265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01540361101f575f90506110d7565b5f61106860265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154613018565b90505f60265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015490508082116110bf575f925050506110d7565b6110d2818361304990919063ffffffff16565b925050505b919050565b6110e4612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611167906150c6565b60405180910390fd5b6001600a60146101000a81548160ff021916908315150217905550565b60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490615154565b60405180910390fd5b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a9bf2933836040518363ffffffff1660e01b8152600401611269929190615172565b5f604051808303815f87803b158015611280575f80fd5b505af1158015611292573d5f803e3d5ffd5b505050506112e68160185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461304990919063ffffffff16565b60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061133c81601a5461304990919063ffffffff16565b601a8190555050565b5f6009905090565b602b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601c5490811502906040515f60405180830381858888f193505050501580156113b3573d5f803e3d5ffd5b506113cb601c54601f5461304990919063ffffffff16565b601f819055505f601c81905550565b6113e2612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611465906150c6565b60405180910390fd5b602b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156114d2573d5f803e3d5ffd5b50565b601d5481565b6006602052805f5260405f205f915054906101000a900460ff1681565b6007602052805f5260405f205f915054906101000a900460ff1681565b61151d612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a0906150c6565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61160a8161305e565b50565b60295481565b602a5481565b601b5f9054906101000a900460ff1681565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611679612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc906150c6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b6117cd612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611850906150c6565b60405180910390fd5b85600d8190555084600b8190555083600c8190555082600e8190555081600f8190555080601081905550601154600e541115801561189b5750601154600f5411155b80156118ab575060115460105411155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e1906151e3565b60405180910390fd5b505050505050565b6118fa612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d906150c6565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611a26612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa9906150c6565b60405180910390fd5b5f611ae1612710611ad385611ac5610dd1565b61318d90919063ffffffff16565b6131a290919063ffffffff16565b90505f611b12612710611b0485611af6610dd1565b61318d90919063ffffffff16565b6131a290919063ffffffff16565b90505f611b446103e8611b366005611b28610dd1565b61318d90919063ffffffff16565b6131a290919063ffffffff16565b9050808310158015611b565750808210155b611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c90615271565b60405180910390fd5b82600281905550816003819055505050505050565b611bb2612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c35906150c6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611c79929190615172565b6020604051808303815f875af1158015611c95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb991906152a3565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f611d1f611cf25f61162b565b611d11611d0061dead61162b565b60015461304990919063ffffffff16565b61304990919063ffffffff16565b905090565b60606040518060400160405280600381526020017f544d530000000000000000000000000000000000000000000000000000000000815250905090565b601e5481565b5f611df560185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461304990919063ffffffff16565b9050919050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611e2d338484612dca565b6001905092915050565b611ec460185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461304990919063ffffffff16565b811115611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd9061533e565b60405180910390fd5b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663773a0f0933836040518363ffffffff1660e01b8152600401611f62929190615172565b5f604051808303815f87803b158015611f79575f80fd5b505af1158015611f8b573d5f803e3d5ffd5b50505050611fdf8160185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061203581601a546131b790919063ffffffff16565b601a8190555050565b601c5481565b61204c612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf906150c6565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612124336131cc565b15612133576121323361323d565b5b565b5f8082905060265f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020154915050919050565b6026602052805f5260405f205f91509050805f0154908060010154908060020154905083565b6121b1612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612234906150c6565b60405180910390fd5b80602b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663698b975633336040518363ffffffff1660e01b815260040161233192919061535c565b5f604051808303815f87803b158015612348575f80fd5b505af115801561235a573d5f803e3d5ffd5b50505050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6123ea612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d906150c6565b60405180910390fd5b826013819055506124a7620186a06124998460015461318d90919063ffffffff16565b6131a290919063ffffffff16565b6016819055506124d7620186a06124c98360015461318d90919063ffffffff16565b6131a290919063ffffffff16565b601781905550505050565b6018602052805f5260405f205f915090505481565b6124ff612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461258b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612582906150c6565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080156125f4576125ef825f612bcd565b612607565b612606826126018461162b565b612bcd565b5b5050565b60205481565b612619612a03565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c906150c6565b60405180910390fd5b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411612811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612808906153f3565b60405180910390fd5b5f61281b3361162b565b905060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663698b975633336040518363ffffffff1660e01b815260040161287992919061535c565b5f604051808303815f87803b158015612890575f80fd5b505af11580156128a2573d5f803e3d5ffd5b505050505f6128c2826128b43361162b565b61304990919063ffffffff16565b905060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663773a0f0933836040518363ffffffff1660e01b8152600401612920929190615172565b5f604051808303815f87803b158015612937575f80fd5b505af1158015612949573d5f803e3d5ffd5b5050505061299d8160185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b60185f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506129f381601a546131b790919063ffffffff16565b601a819055505050565b60285481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90615481565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612add9061550f565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bc09190614caf565b60405180910390a3505050565b5f81118015612c1a57505f60265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154145b15612c2d57612c28826134b9565b612c8a565b5f81148015612c7a57505f60265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154115b15612c8957612c8882613563565b5b5b612cf081612ce260265f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154601d5461304990919063ffffffff16565b6131b790919063ffffffff16565b601d819055508060265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0181905550612d8260265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154613018565b60265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505050565b612dd5838383613758565b612ddf8383613884565b612dea83838361397b565b612df48383613b4b565b612dff838383613c11565b612e0a838383613e12565b612e5a8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461304990919063ffffffff16565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f612ea68484613e3a565b612eb05781612ebc565b612ebb848484613ee1565b5b9050612f0e8160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fac9190614caf565b60405180910390a3612fbe8484614042565b50505050565b5f83831115829061300b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130029190614c13565b60405180910390fd5b5082840390509392505050565b5f6130426022546130346021548561318d90919063ffffffff16565b6131a290919063ffffffff16565b9050919050565b5f8183613056919061555a565b905092915050565b5f60238054905090505f8103613074575061318a565b5f805a90505f5b848310801561308957508381105b1561318557836027541061309f575f6027819055505b6130e56023602754815481106130b8576130b761558d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166131cc565b15613131576131306023602754815481106131035761310261558d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661323d565b5b6131566131475a8461304990919063ffffffff16565b846131b790919063ffffffff16565b92505a915060275f81548092919061316d906155ba565b9190505550808061317d906155ba565b91505061307b565b505050505b50565b5f818361319a9190615601565b905092915050565b5f81836131af919061566f565b905092915050565b5f81836131c4919061569f565b905092915050565b5f4261322060285460255f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b108015613236575060295461323483610fd0565b115b9050919050565b5f61324782610fd0565b90505f4790505f60265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154148061329957508082115b806132a55750601f5482115b156132b15750506134b6565b5f821180156132c05750808211155b80156132ce5750601f548211155b156134b3576132e8826020546131b790919063ffffffff16565b6020819055508273ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015613331573d5f803e3d5ffd5b504260255f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506133c78260265f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600201546131b790919063ffffffff16565b60265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002018190555061345360265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154613018565b60265f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055506134ac82601f5461304990919063ffffffff16565b601f819055505b50505b50565b60238054905060245f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550602381908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60236001602380549050613577919061555a565b815481106135885761358761558d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602360245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054815481106136015761360061558d565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060245f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460245f6023600160238054905061369b919061555a565b815481106136ac576136ab61558d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506023805480613723576137226156d2565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036137c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137bd9061576f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382b906157fd565b60405180910390fd5b61383d8361162b565b81111561387f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138769061588b565b60405180910390fd5b505050565b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613922575060065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561397757600a60149054906101000a900460ff16613976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396d906158f3565b60405180910390fd5b5b5050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613a19575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613a725750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613aac575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613b4657600354613b048260045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b1115613b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3c9061595b565b60405180910390fd5b5b505050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148015613bee575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613c0d57600160145f828254613c05919061569f565b925050819055505b5050565b5f60185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115613d265760045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054613ce460185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836131b790919063ffffffff16565b1115613d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d1c906159e9565b60405180910390fd5b5b60025481111580613d7d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80613dce575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b613e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0490615a51565b60405180910390fd5b505050565b613e1d8383836143d6565b15613e3557613e2d601654614508565b5f6014819055505b505050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613ed9575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b905092915050565b5f80613eed8585614703565b1115614037575f613f24613f018686614703565b613f16601154866131a290919063ffffffff16565b61318d90919063ffffffff16565b9050613f768160045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131b790919063ffffffff16565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140149190614caf565b60405180910390a361402f818461304990919063ffffffff16565b91505061403b565b8190505b9392505050565b5f60265f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01541115614093576140928161323d565b5b5f60265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015411801561412e5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561413d5761413c8261323d565b5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156141d757505f60265f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154115b15614200576141f96141e883610fd0565b601c546131b790919063ffffffff16565b601c819055505b60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16614261576142608261425b8461162b565b612bcd565b5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166142c2576142c1816142bc8361162b565b612bcd565b5b6142cb826147cc565b801561431e575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561432e5761432d825f612bcd565b5b614337816147cc565b801561438a575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561439a57614399815f612bcd565b5b601b5f9054906101000a900460ff1680156143c1575060155f9054906101000a900460ff16155b156143d2576143d1602a5461305e565b5b5050565b5f8060175483101590505f6016546143ed3061162b565b1015905060155f9054906101000a900460ff16158015614418575060125f9054906101000a900460ff165b80156144305750600a60149054906101000a900460ff165b80156144395750815b801561448c575060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156144e45750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156144f4575060135460145410155b80156144fd5750805b925050509392505050565b600160155f6101000a81548160ff0219169083151502179055505f6145616002614553600c54614545600d54600b546131b790919063ffffffff16565b6131b790919063ffffffff16565b61318d90919063ffffffff16565b90505f61458b8261457d600b548661318d90919063ffffffff16565b6131a290919063ffffffff16565b90505f6145a1828561304990919063ffffffff16565b90505f4790506145b0826147dd565b5f6145c4824761304990919063ffffffff16565b90505f6145ee6145df600b548861304990919063ffffffff16565b836131a290919063ffffffff16565b90505f614606600b548361318d90919063ffffffff16565b90505f81111561461b5761461a8682614a13565b5b5f614644600c5461463660028661318d90919063ffffffff16565b61318d90919063ffffffff16565b90505f8111156146585761465781614b0d565b5b5f61466e601f544761304990919063ffffffff16565b90505f8111156146de57602b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156146dc573d5f803e3d5ffd5b505b5050505050505050505f60155f6101000a81548160ff02191690831515021790555050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361476257600f5490506147c6565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036147c057600e5490506147c6565b60105490505b92915050565b5f80823b90505f8111915050919050565b5f600267ffffffffffffffff8111156147f9576147f8615a6f565b5b6040519080825280602002602001820160405280156148275781602001602082028036833780820191505090505b50905030815f8151811061483e5761483d61558d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156148e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149069190615ab0565b8160018151811061491a5761491961558d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506149803060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a0a565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016149e2959493929190615bd4565b5f604051808303815f87803b1580156149f9575f80fd5b505af1158015614a0b573d5f803e3d5ffd5b505050505050565b614a3f3060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a0a565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80602b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401614ac596959493929190615c2c565b60606040518083038185885af1158015614ae1573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190614b069190615c9f565b5050505050565b614b2281601f546131b790919063ffffffff16565b601f81905550614b3d81601e546131b790919063ffffffff16565b601e81905550614b80614b6f601d54614b618460225461318d90919063ffffffff16565b6131a290919063ffffffff16565b6021546131b790919063ffffffff16565b60218190555050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614bc0578082015181840152602081019050614ba5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614be582614b89565b614bef8185614b93565b9350614bff818560208601614ba3565b614c0881614bcb565b840191505092915050565b5f6020820190508181035f830152614c2b8184614bdb565b905092915050565b5f80fd5b5f8115159050919050565b614c4b81614c37565b8114614c55575f80fd5b50565b5f81359050614c6681614c42565b92915050565b5f60208284031215614c8157614c80614c33565b5b5f614c8e84828501614c58565b91505092915050565b5f819050919050565b614ca981614c97565b82525050565b5f602082019050614cc25f830184614ca0565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614cf182614cc8565b9050919050565b614d0181614ce7565b8114614d0b575f80fd5b50565b5f81359050614d1c81614cf8565b92915050565b614d2b81614c97565b8114614d35575f80fd5b50565b5f81359050614d4681614d22565b92915050565b5f8060408385031215614d6257614d61614c33565b5b5f614d6f85828601614d0e565b9250506020614d8085828601614d38565b9150509250929050565b614d9381614c37565b82525050565b5f602082019050614dac5f830184614d8a565b92915050565b5f805f60608486031215614dc957614dc8614c33565b5b5f614dd686828701614d38565b9350506020614de786828701614d38565b9250506040614df886828701614d38565b9150509250925092565b5f8060408385031215614e1857614e17614c33565b5b5f614e2585828601614d0e565b9250506020614e3685828601614c58565b9150509250929050565b5f805f60608486031215614e5757614e56614c33565b5b5f614e6486828701614d0e565b9350506020614e7586828701614d0e565b9250506040614e8686828701614d38565b9150509250925092565b5f60208284031215614ea557614ea4614c33565b5b5f614eb284828501614d0e565b91505092915050565b5f60208284031215614ed057614ecf614c33565b5b5f614edd84828501614d38565b91505092915050565b5f60ff82169050919050565b614efb81614ee6565b82525050565b5f602082019050614f145f830184614ef2565b92915050565b5f805f805f8060c08789031215614f3457614f33614c33565b5b5f614f4189828a01614d38565b9650506020614f5289828a01614d38565b9550506040614f6389828a01614d38565b9450506060614f7489828a01614d38565b9350506080614f8589828a01614d38565b92505060a0614f9689828a01614d38565b9150509295509295509295565b5f8060408385031215614fb957614fb8614c33565b5b5f614fc685828601614d38565b9250506020614fd785828601614d38565b9150509250929050565b614fea81614ce7565b82525050565b5f6020820190506150035f830184614fe1565b92915050565b5f60608201905061501c5f830186614ca0565b6150296020830185614ca0565b6150366040830184614ca0565b949350505050565b5f806040838503121561505457615053614c33565b5b5f61506185828601614d0e565b925050602061507285828601614d0e565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6150b0602083614b93565b91506150bb8261507c565b602082019050919050565b5f6020820190508181035f8301526150dd816150a4565b9050919050565b7f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e205f8201527f616d6f756e74207374616b656400000000000000000000000000000000000000602082015250565b5f61513e602d83614b93565b9150615149826150e4565b604082019050919050565b5f6020820190508181035f83015261516b81615132565b9050919050565b5f6040820190506151855f830185614fe1565b6151926020830184614ca0565b9392505050565b7f696e76616c696420456e747279000000000000000000000000000000000000005f82015250565b5f6151cd600d83614b93565b91506151d882615199565b602082019050919050565b5f6020820190508181035f8301526151fa816151c1565b9050919050565b7f45524332303a206d61782054587320616e64206d61782057616c6c65742063615f8201527f6e6e6f74206265206c657373207468616e202e35250000000000000000000000602082015250565b5f61525b603583614b93565b915061526682615201565b604082019050919050565b5f6020820190508181035f8301526152888161524f565b9050919050565b5f8151905061529d81614c42565b92915050565b5f602082840312156152b8576152b7614c33565b5b5f6152c58482850161528f565b91505092915050565b7f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e2061765f8201527f61696c61626c652062616c616e63650000000000000000000000000000000000602082015250565b5f615328602f83614b93565b9150615333826152ce565b604082019050919050565b5f6020820190508181035f8301526153558161531c565b9050919050565b5f60408201905061536f5f830185614fe1565b61537c6020830184614fe1565b9392505050565b7f45524332303a2043616e6e6f7420636f6d706f756e64206d6f7265207468616e5f8201527f20616d6f756e74207374616b6564000000000000000000000000000000000000602082015250565b5f6153dd602e83614b93565b91506153e882615383565b604082019050919050565b5f6020820190508181035f83015261540a816153d1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61546b602483614b93565b915061547682615411565b604082019050919050565b5f6020820190508181035f8301526154988161545f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154f9602283614b93565b91506155048261549f565b604082019050919050565b5f6020820190508181035f830152615526816154ed565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61556482614c97565b915061556f83614c97565b92508282039050818111156155875761558661552d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6155c482614c97565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155f6576155f561552d565b5b600182019050919050565b5f61560b82614c97565b915061561683614c97565b925082820261562481614c97565b9150828204841483151761563b5761563a61552d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61567982614c97565b915061568483614c97565b92508261569457615693615642565b5b828204905092915050565b5f6156a982614c97565b91506156b483614c97565b92508282019050808211156156cc576156cb61552d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f615759602583614b93565b9150615764826156ff565b604082019050919050565b5f6020820190508181035f8301526157868161574d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6157e7602383614b93565b91506157f28261578d565b604082019050919050565b5f6020820190508181035f830152615814816157db565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f7265205f8201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b5f615875603183614b93565b91506158808261581b565b604082019050919050565b5f6020820190508181035f8301526158a281615869565b9050919050565b7f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000005f82015250565b5f6158dd601d83614b93565b91506158e8826158a9565b602082019050919050565b5f6020820190508181035f83015261590a816158d1565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00005f82015250565b5f615945601e83614b93565b915061595082615911565b602082019050919050565b5f6020820190508181035f83015261597281615939565b9050919050565b7f45524332303a2065786365656473206d6178696d756d20616c6c6f776564206e5f8201527f6f742063757272656e746c79207374616b65642e000000000000000000000000602082015250565b5f6159d3603483614b93565b91506159de82615979565b604082019050919050565b5f6020820190508181035f830152615a00816159c7565b9050919050565b7f5458204c696d69742045786365656465640000000000000000000000000000005f82015250565b5f615a3b601183614b93565b9150615a4682615a07565b602082019050919050565b5f6020820190508181035f830152615a6881615a2f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050615aaa81614cf8565b92915050565b5f60208284031215615ac557615ac4614c33565b5b5f615ad284828501615a9c565b91505092915050565b5f819050919050565b5f819050919050565b5f615b07615b02615afd84615adb565b615ae4565b614c97565b9050919050565b615b1781615aed565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615b4f81614ce7565b82525050565b5f615b608383615b46565b60208301905092915050565b5f602082019050919050565b5f615b8282615b1d565b615b8c8185615b27565b9350615b9783615b37565b805f5b83811015615bc7578151615bae8882615b55565b9750615bb983615b6c565b925050600181019050615b9a565b5085935050505092915050565b5f60a082019050615be75f830188614ca0565b615bf46020830187615b0e565b8181036040830152615c068186615b78565b9050615c156060830185614fe1565b615c226080830184614ca0565b9695505050505050565b5f60c082019050615c3f5f830189614fe1565b615c4c6020830188614ca0565b615c596040830187615b0e565b615c666060830186615b0e565b615c736080830185614fe1565b615c8060a0830184614ca0565b979650505050505050565b5f81519050615c9981614d22565b92915050565b5f805f60608486031215615cb657615cb5614c33565b5b5f615cc386828701615c8b565b9350506020615cd486828701615c8b565b9250506040615ce586828701615c8b565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122041c6e048851d6974889ef3596a662bed8353f2df9d71e3296a7161e5089553f664736f6c63430008180033

Deployed Bytecode Sourcemap

5705:20388:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9017:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12874:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7431:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10205:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25838:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9240:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20638:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17880:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6371:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24708:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13073:83;;;;;;;;;;;;;:::i;:::-;;19054:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9167:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20192:206;;;;;;;;;;;;;:::i;:::-;;9439:99;;;;;;;;;;;;;:::i;:::-;;7362:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6264:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6315:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9960:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12981:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7960:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8012:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7288:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9330:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4263:148;;;;;;;;;;;;;:::i;:::-;;7255:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11590:408;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12614:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12157:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23167:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4049:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10344:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9090:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7395:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10074:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6468:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9544:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18672:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7325:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12756:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23759:132;;;;;;;;;;;;;:::i;:::-;;23561:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7833:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;12006:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18540:124;;;;;;;;;;;;;:::i;:::-;;9689:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13164:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7153:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20406:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7469:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19974:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19409:557;;;;;;;;;;;;;:::i;:::-;;7916:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9017:67;9054:13;9077:5;;;;;;;;;;;;;;;;;9070:12;;9017:67;:::o;12874:99::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12957:8:::1;12943:11;;:22;;;;;;;;;;;;;;;;;;12874:99:::0;:::o;7431:31::-;;;;:::o;10205:133::-;10280:4;10287:37;10296:10;10308:7;10317:6;10287:8;:37::i;:::-;10332:4;10325:11;;10205:133;;;;:::o;25838:252::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25984:10:::1;25972:9;:22;;;;26023:16;26005:15;:34;;;;26067:15;26050:14;:32;;;;25838:252:::0;;;:::o;9240:84::-;9293:7;9310:12;;9303:19;;9240:84;:::o;20638:245::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20772:7:::1;20736:25;:33;20762:6;20736:33;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;20794:7;20790:86;;20803:19;20812:6;20820:1;20803:8;:19::i;:::-;20790:86;;;20839:35;20848:6;20856:17;20866:6;20856:9;:17::i;:::-;20839:8;:35::i;:::-;20790:86;20638:245:::0;;:::o;17880:309::-;17978:4;17995:36;18005:6;18013:9;18024:6;17995:9;:36::i;:::-;18042:117;18051:6;18059:10;18071:87;18107:6;18071:87;;;;;;;;;;;;;;;;;:11;:19;18083:6;18071:19;;;;;;;;;;;;;;;:31;18091:10;18071:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;18042:8;:117::i;:::-;18177:4;18170:11;;17880:309;;;;;:::o;6371:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;24708:473::-;24777:7;24830:1;24800:6;:19;24807:11;24800:19;;;;;;;;;;;;;;;:26;;;:31;24797:48;;24841:1;24834:8;;;;24797:48;24855:33;24891:50;24914:6;:19;24921:11;24914:19;;;;;;;;;;;;;;;:26;;;24891:22;:50::i;:::-;24855:86;;24952:32;24987:6;:19;24994:11;24987:19;;;;;;;;;;;;;;;:33;;;24952:68;;25063:24;25034:25;:53;25031:70;;25097:1;25090:8;;;;;;25031:70;25118:55;25148:24;25118:25;:29;;:55;;;;:::i;:::-;25111:62;;;;24708:473;;;;:::o;13073:83::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13144:4:::1;13127:14;;:21;;;;;;;;;;;;;;;;;;13073:83::o:0;19054:347::-;19135:12;:24;19148:10;19135:24;;;;;;;;;;;;;;;;19125:6;:34;;19117:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;19220:15;;;;;;;;;;;:31;;;19252:10;19264:6;19220:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19309:36;19338:6;19309:12;:24;19322:10;19309:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;19282:12;:24;19295:10;19282:24;;;;;;;;;;;;;;;:63;;;;19370:23;19386:6;19370:11;;:15;;:23;;;;:::i;:::-;19356:11;:37;;;;19054:347;:::o;9167:67::-;9208:5;5928:1;9216:16;;9167:67;:::o;20192:206::-;20241:16;;;;;;;;;;;20233:34;;:51;20268:15;;20233:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20314:37;20335:15;;20314:16;;:20;;:37;;;;:::i;:::-;20295:16;:56;;;;20388:1;20362:15;:28;;;;20192:206::o;9439:99::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9487:16:::1;;;;;;;;;;;9479:34;;:57;9514:21;9479:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;9439:99::o:0;7362:26::-;;;;:::o;6264:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;6315:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;9960:108::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10058:8:::1;10034:11;:21;10046:8;10034:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;9960:108:::0;;:::o;12981:84::-;13045:12;13053:3;13045:7;:12::i;:::-;12981:84;:::o;7960:45::-;;;;:::o;8012:38::-;;;;:::o;7288:30::-;;;;;;;;;;;;;:::o;9330:103::-;9396:7;9413:9;:18;9423:7;9413:18;;;;;;;;;;;;;;;;9406:25;;9330:103;;;:::o;4263:148::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4370:1:::1;4333:40;;4354:6;::::0;::::1;;;;;;;;4333:40;;;;;;;;;;;;4401:1;4384:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4263:148::o:0;7255:26::-;;;;:::o;11590:408::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11758:8:::1;11745:10;:21;;;;11783:10;11768:12;:25;;;;11808:8;11795:10;:21;;;;11829:6;11818:8;:17;;;;11847:5;11837:7;:15;;;;11868:6;11854:11;:20;;;;11905:11;;11893:8;;:23;;:49;;;;;11931:11;;11920:7;;:22;;11893:49;:79;;;;;11961:11;;11946;;:26;;11893:79;11885:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;11590:408:::0;;;;;;:::o;12614:134::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12685:5:::1;12678:4;;:12;;;;;;;;;;;;;;;;;;12736:4;12701:16;:32;12726:5;12701:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;12614:134:::0;:::o;12157:449::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12241:13:::1;12257:43;12293:5;12257:23;12275:4;12257:13;:11;:13::i;:::-;:17;;:23;;;;:::i;:::-;:27;;:43;;;;:::i;:::-;12241:59;;12311:17;12331:46;12370:5;12331:26;12349:7;12331:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:30;;:46;;;;:::i;:::-;12311:66;;12379:13;12395:30;12420:4;12395:20;12413:1;12395:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;12379:46;;12453:5;12444;:14;;:36;;;;;12475:5;12462:9;:18;;12444:36;12436:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;12564:5;12549:12;:20;;;;12589:9;12571:15;:27;;;;12230:376;;;12157:449:::0;;:::o;23167:140::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23260:8:::1;23253:25;;;23279:10;23291:7;23253:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23167:140:::0;;:::o;4049:79::-;4087:7;4114:6;;;;;;;;;;;4107:13;;4049:79;:::o;10344:138::-;10403:7;10420:60;10458:21;10476:1;10458:9;:21::i;:::-;10420:33;10437:15;8090:42;10437:9;:15::i;:::-;10420:12;;:16;;:33;;;;:::i;:::-;:37;;:60;;;;:::i;:::-;10413:67;;10344:138;:::o;9090:71::-;9129:13;9152:7;;;;;;;;;;;;;;;;;9145:14;;9090:71;:::o;7395:29::-;;;;:::o;10074:125::-;10137:7;10154:43;10176:12;:20;10189:6;10176:20;;;;;;;;;;;;;;;;10154:9;:17;10164:6;10154:17;;;;;;;;;;;;;;;;:21;;:43;;;;:::i;:::-;10147:50;;10074:125;;;:::o;6468:19::-;;;;;;;;;;;;;:::o;9544:139::-;9622:4;9629:40;9639:10;9651:9;9662:6;9629:9;:40::i;:::-;9677:4;9670:11;;9544:139;;;;:::o;18672:374::-;18752:51;18778:12;:24;18791:10;18778:24;;;;;;;;;;;;;;;;18752:9;:21;18762:10;18752:21;;;;;;;;;;;;;;;;:25;;:51;;;;:::i;:::-;18742:6;:61;;18734:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;18866:15;;;;;;;;;;;:30;;;18897:10;18909:6;18866:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18954:36;18983:6;18954:12;:24;18967:10;18954:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;18927:12;:24;18940:10;18927:24;;;;;;;;;;;;;;;:63;;;;19015:23;19031:6;19015:11;;:15;;:23;;;;:::i;:::-;19001:11;:37;;;;18672:374;:::o;7325:30::-;;;;:::o;12756:110::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12850:7:::1;12822:6;;:36;;;;;;;;;;;;;;;;;;12756:110:::0;:::o;23759:132::-;23808:28;23825:10;23808:16;:28::i;:::-;23805:79;;;23852:30;23871:10;23852:18;:30::i;:::-;23805:79;23759:132::o;23561:190::-;23634:7;23654:19;23676:7;23654:29;;23709:6;:19;23716:11;23709:19;;;;;;;;;;;;;;;:33;;;23694:49;;;23561:190;;;:::o;7833:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12006:143::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12103:8:::1;12084:16;;:27;;;;;;;;;;;;;;;;;;12137:4;12113:11;:21;12125:8;12113:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;12006:143:::0;:::o;18540:124::-;18594:15;;;;;;;;;;;:38;;;18633:10;18645;18594:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18540:124::o;9689:127::-;9770:7;9787:11;:18;9799:5;9787:18;;;;;;;;;;;;;;;:27;9806:7;9787:27;;;;;;;;;;;;;;;;9780:34;;9689:127;;;;:::o;13164:305::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13306:11:::1;13293:10;:24;;;;13335:53;13380:6;13335:32;13352:14;13335:12;;:16;;:32;;;;:::i;:::-;:36;;:53;;;;:::i;:::-;13319:13;:69;;;;13407:54;13453:6;13407:33;13424:15;13407:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;13390:14;:71;;;;13164:305:::0;;;:::o;7153:47::-;;;;;;;;;;;;;;;;;:::o;20406:224::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20521:6:::1;20494:16;:24;20511:6;20494:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;20541:6;20538:85;;;20549:19;20558:6;20566:1;20549:8;:19::i;:::-;20538:85;;;20585:35;20594:6;20602:17;20612:6;20602:9;:17::i;:::-;20585:8;:35::i;:::-;20538:85;20406:224:::0;;:::o;7469:31::-;;;;:::o;19974:210::-;4186:12;:10;:12::i;:::-;4176:22;;:6;;;;;;;;;;:22;;;4168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20073:4:::1;20049:11;:21;20061:8;20049:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;20117:4;20088:16;:26;20105:8;20088:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;20167:8;20132:15;;:44;;;;;;;;;;;;;;;;;;19974:210:::0;:::o;19409:557::-;19501:1;19466:12;:24;19479:10;19466:24;;;;;;;;;;;;;;;;:37;19458:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;19565:21;19589;19599:10;19589:9;:21::i;:::-;19565:45;;19621:15;;;;;;;;;;;:38;;;19660:10;19672;19621:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19694:20;19717:40;19743:13;19717:21;19727:10;19717:9;:21::i;:::-;:25;;:40;;;;:::i;:::-;19694:63;;19768:15;;;;;;;;;;;:30;;;19799:10;19811:12;19768:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19862:42;19891:12;19862;:24;19875:10;19862:24;;;;;;;;;;;;;;;;:28;;:42;;;;:::i;:::-;19835:12;:24;19848:10;19835:24;;;;;;;;;;;;;;;:69;;;;19929:29;19945:12;19929:11;;:15;;:29;;;;:::i;:::-;19915:11;:43;;;;19447:519;;19409:557::o;7916:37::-;;;;:::o;3626:98::-;3679:7;3706:10;3699:17;;3626:98;:::o;18197:335::-;18307:1;18290:19;;:5;:19;;;18282:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18388:1;18369:21;;:7;:21;;;18361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18470:6;18440:11;:18;18452:5;18440:18;;;;;;;;;;;;;;;:27;18459:7;18440:27;;;;;;;;;;;;;;;:36;;;;18508:7;18492:32;;18501:5;18492:32;;;18517:6;18492:32;;;;;;:::i;:::-;;;;;;;;18197:335;;;:::o;21702:482::-;21789:1;21780:6;:10;:45;;;;;21824:1;21794:6;:19;21801:11;21794:19;;;;;;;;;;;;;;;:26;;;:31;21780:45;21777:177;;;21827:27;21842:11;21827:14;:27::i;:::-;21777:177;;;21884:1;21874:6;:11;:45;;;;;21918:1;21889:6;:19;21896:11;21889:19;;;;;;;;;;;;;;;:26;;;:30;21874:45;21871:83;;;21921:30;21939:11;21921:17;:30::i;:::-;21871:83;21777:177;21978:55;22026:6;21978:43;21994:6;:19;22001:11;21994:19;;;;;;;;;;;;;;;:26;;;21978:11;;:15;;:43;;;;:::i;:::-;:47;;:55;;;;:::i;:::-;21964:11;:69;;;;22073:6;22044;:19;22051:11;22044:19;;;;;;;;;;;;;;;:26;;:35;;;;22126:50;22149:6;:19;22156:11;22149:19;;;;;;;;;;;;;;;:26;;;22126:22;:50::i;:::-;22090:6;:19;22097:11;22090:19;;;;;;;;;;;;;;;:33;;:86;;;;21702:482;;:::o;10853:729::-;10942:37;10953:6;10961:9;10972:6;10942:10;:37::i;:::-;10990:38;11010:6;11018:9;10990:19;:38::i;:::-;11039:41;11054:6;11062:9;11073:6;11039:14;:41::i;:::-;11092:35;11109:6;11117:9;11092:16;:35::i;:::-;11138:39;11151:6;11159:9;11170:6;11138:12;:39::i;:::-;11189:35;11198:6;11206:9;11217:6;11189:8;:35::i;:::-;11255:29;11277:6;11255:9;:17;11265:6;11255:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;11235:9;:17;11245:6;11235:17;;;;;;;;;;;;;;;:49;;;;11295:22;11320:32;11334:6;11342:9;11320:13;:32::i;:::-;:78;;11392:6;11320:78;;;11355:34;11363:6;11371:9;11382:6;11355:7;:34::i;:::-;11320:78;11295:103;;11432:40;11457:14;11432:9;:20;11442:9;11432:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;11409:9;:20;11419:9;11409:20;;;;;;;;;;;;;;;:63;;;;11505:9;11488:43;;11497:6;11488:43;;;11516:14;11488:43;;;;;;:::i;:::-;;;;;;;;11542:32;11556:6;11564:9;11542:13;:32::i;:::-;10931:651;10853:729;;;:::o;2167:162::-;2253:7;2296:1;2291;:6;;2299:12;2283:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2325:1;2321;:5;2314:12;;2167:162;;;;;:::o;25189:170::-;25259:7;25286:65;25319:31;;25286:28;25296:17;;25286:5;:9;;:28;;;;:::i;:::-;:32;;:65;;;;:::i;:::-;25279:72;;25189:170;;;:::o;954:82::-;1012:7;1033:1;1029;:5;;;;:::i;:::-;1022:12;;954:82;;;;:::o;22483:676::-;22533:24;22560:12;:19;;;;22533:46;;22613:1;22593:16;:21;22590:37;;22618:7;;;22590:37;22637:15;22667;22685:9;22667:27;;22705:18;22738:414;22754:3;22744:7;:13;:46;;;;;22774:16;22761:10;:29;22744:46;22738:414;;;22826:16;22810:12;;:32;22807:55;;22859:1;22844:12;:16;;;;22807:55;22879:44;22896:12;22909;;22896:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22879:16;:44::i;:::-;22876:115;;;22943:46;22962:12;22975;;22962:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22943:18;:46::i;:::-;22876:115;23015:35;23027:22;23039:9;23027:7;:11;;:22;;;;:::i;:::-;23015:7;:11;;:35;;;;:::i;:::-;23005:45;;23075:9;23065:19;;23099:12;;:14;;;;;;;;;:::i;:::-;;;;;;23128:12;;;;;:::i;:::-;;;;22738:414;;;22522:637;;;;22483:676;;:::o;1042:82::-;1100:7;1121:1;1117;:5;;;;:::i;:::-;1110:12;;1042:82;;;;:::o;1130:::-;1188:7;1209:1;1205;:5;;;;:::i;:::-;1198:12;;1130:82;;;;:::o;866:::-;924:7;945:1;941;:5;;;;:::i;:::-;934:12;;866:82;;;;:::o;23319:234::-;23389:4;23461:15;23413:45;23448:9;;23413:17;:30;23431:11;23413:30;;;;;;;;;;;;;;;;:34;;:45;;;;:::i;:::-;:63;:132;;;;;23530:15;;23497:30;23515:11;23497:17;:30::i;:::-;:48;23413:132;23406:139;;23319:234;;;:::o;23899:801::-;23968:14;23985:30;24003:11;23985:17;:30::i;:::-;23968:47;;24026:15;24044:21;24026:39;;24109:1;24079:6;:19;24086:11;24079:19;;;;;;;;;;;;;;;:26;;;:31;:51;;;;24123:7;24114:6;:16;24079:51;:80;;;;24143:16;;24134:6;:25;24079:80;24076:95;;;24162:7;;;;24076:95;24201:1;24184:6;:19;:40;;;;;24217:7;24207:6;:17;;24184:40;:70;;;;;24238:16;;24228:6;:26;;24184:70;24181:512;;;24289:28;24310:6;24289:16;;:20;;:28;;;;:::i;:::-;24270:16;:47;;;;24340:11;24332:29;;:37;24362:6;24332:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24417:15;24384:17;:30;24402:11;24384:30;;;;;;;;;;;;;;;:48;;;;24483:45;24521:6;24483;:19;24490:11;24483:19;;;;;;;;;;;;;;;:33;;;:37;;:45;;;;:::i;:::-;24447:6;:19;24454:11;24447:19;;;;;;;;;;;;;;;:33;;:81;;;;24579:50;24602:6;:19;24609:11;24602:19;;;;;;;;;;;;;;;:26;;;24579:22;:50::i;:::-;24543:6;:19;24550:11;24543:19;;;;;;;;;;;;;;;:33;;:86;;;;24663:28;24684:6;24663:16;;:20;;:28;;;;:::i;:::-;24644:16;:47;;;;24181:512;23957:743;;23899:801;;:::o;25367:167::-;25466:12;:19;;;;25432:18;:31;25451:11;25432:31;;;;;;;;;;;;;;;:53;;;;25496:12;25514:11;25496:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25367:167;:::o;25542:288::-;25658:12;25691:1;25671:12;:19;;;;:21;;;;:::i;:::-;25658:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25610:12;25623:18;:31;25642:11;25623:31;;;;;;;;;;;;;;;;25610:45;;;;;;;;:::i;:::-;;;;;;;;;;:83;;;;;;;;;;;;;;;;;;25762:18;:31;25781:11;25762:31;;;;;;;;;;;;;;;;25704:18;:55;25723:12;25756:1;25736:12;:19;;;;:21;;;;:::i;:::-;25723:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25704:55;;;;;;;;;;;;;;;:89;;;;25804:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;25542:288;:::o;10490:355::-;10612:1;10594:20;;:6;:20;;;10586:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10696:1;10675:23;;:9;:23;;;10667:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10767:17;10777:6;10767:9;:17::i;:::-;10757:6;:27;;10749:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;10490:355;;;:::o;13477:210::-;13570:11;:19;13582:6;13570:19;;;;;;;;;;;;;;;;;;;;;;;;;13569:20;:47;;;;;13594:11;:22;13606:9;13594:22;;;;;;;;;;;;;;;;;;;;;;;;;13593:23;13569:47;13566:110;;;13626:14;;;;;;;;;;;13618:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;13566:110;13477:210;;:::o;13699:331::-;13803:11;:19;13815:6;13803:19;;;;;;;;;;;;;;;;;;;;;;;;;13802:20;:47;;;;;13827:11;:22;13839:9;13827:22;;;;;;;;;;;;;;;;;;;;;;;;;13826:23;13802:47;:77;;;;;13874:4;;;;;;;;;;;13853:26;;:9;:26;;;;13802:77;:107;;;;;8090:42;13883:26;;:9;:26;;;;13802:107;13799:224;;;13971:15;;13934:32;13959:6;13934:9;:20;13944:9;13934:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13933:53;;13925:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;13799:224;13699:331;;;:::o;14038:159::-;14135:4;;;;;;;;;;;14122:17;;:9;:17;;;:41;;;;;14144:11;:19;14156:6;14144:19;;;;;;;;;;;;;;;;;;;;;;;;;14143:20;14122:41;14119:71;;;14186:1;14165:9;;:23;;;;;;;:::i;:::-;;;;;;;;14119:71;14038:159;;:::o;14205:377::-;14337:1;14306:12;:20;14319:6;14306:20;;;;;;;;;;;;;;;;:33;14303:160;;;14387:9;:17;14397:6;14387:17;;;;;;;;;;;;;;;;14350:32;14361:12;:20;14374:6;14361:20;;;;;;;;;;;;;;;;14350:6;:10;;:32;;;;:::i;:::-;14349:55;;14341:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;14303:160;14491:12;;14481:6;:22;;:45;;;;14507:11;:19;14519:6;14507:19;;;;;;;;;;;;;;;;;;;;;;;;;14481:45;:71;;;;14530:11;:22;14542:9;14530:22;;;;;;;;;;;;;;;;;;;;;;;;;14481:71;14473:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;14205:377;;;:::o;16840:197::-;16932:41;16947:6;16955:9;16966:6;16932:14;:41::i;:::-;16929:101;;;16975:29;16990:13;;16975:14;:29::i;:::-;17026:1;17006:9;:22;;;;16929:101;16840:197;;;:::o;17045:160::-;17126:4;17151:11;:19;17163:6;17151:19;;;;;;;;;;;;;;;;;;;;;;;;;17150:20;:47;;;;;17175:11;:22;17187:9;17175:22;;;;;;;;;;;;;;;;;;;;;;;;;17174:23;17150:47;17143:54;;17045:160;;;;:::o;17440:432::-;17526:7;17582:1;17549:30;17561:6;17569:9;17549:11;:30::i;:::-;:34;17546:304;;;17595:17;17615:59;17643:30;17655:6;17663:9;17643:11;:30::i;:::-;17615:23;17626:11;;17615:6;:10;;:23;;;;:::i;:::-;:27;;:59;;;;:::i;:::-;17595:79;;17712:39;17741:9;17712;:24;17730:4;17712:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;17685:9;:24;17703:4;17685:24;;;;;;;;;;;;;;;:66;;;;17792:4;17767:42;;17776:6;17767:42;;;17799:9;17767:42;;;;;;:::i;:::-;;;;;;;;17827:21;17838:9;17827:6;:10;;:21;;;;:::i;:::-;17820:28;;;;;17546:304;17858:6;17851:13;;17440:432;;;;;;:::o;20891:803::-;20999:1;20972:6;:17;20979:9;20972:17;;;;;;;;;;;;;;;:24;;;:28;20969:64;;;21002:29;21021:9;21002:18;:29::i;:::-;20969:64;21070:1;21046:6;:14;21053:6;21046:14;;;;;;;;;;;;;;;:21;;;:25;:46;;;;;21088:4;;;;;;;;;;;21075:17;;:9;:17;;;;21046:46;21043:79;;;21094:26;21113:6;21094:18;:26::i;:::-;21043:79;21148:4;;;;;;;;;;;21135:17;;:9;:17;;;:46;;;;;21180:1;21156:6;:14;21163:6;21156:14;;;;;;;;;;;;;;;:21;;;:25;21135:46;21132:117;;;21201:46;21221:25;21239:6;21221:17;:25::i;:::-;21201:15;;:19;;:46;;;;:::i;:::-;21183:15;:64;;;;21132:117;21263:16;:24;21280:6;21263:24;;;;;;;;;;;;;;;;;;;;;;;;;21259:67;;21289:35;21298:6;21306:17;21316:6;21306:9;:17::i;:::-;21289:8;:35::i;:::-;21259:67;21340:16;:27;21357:9;21340:27;;;;;;;;;;;;;;;;;;;;;;;;;21336:76;;21369:41;21378:9;21389:20;21399:9;21389;:20::i;:::-;21369:8;:41::i;:::-;21336:76;21425:18;21436:6;21425:10;:18::i;:::-;:56;;;;;21448:25;:33;21474:6;21448:33;;;;;;;;;;;;;;;;;;;;;;;;;21447:34;21425:56;21422:91;;;21483:28;21492:6;21508:1;21483:8;:28::i;:::-;21422:91;21526:21;21537:9;21526:10;:21::i;:::-;:62;;;;;21552:25;:36;21578:9;21552:36;;;;;;;;;;;;;;;;;;;;;;;;;21551:37;21526:62;21523:100;;;21590:31;21599:9;21618:1;21590:8;:31::i;:::-;21523:100;21636:11;;;;;;;;;;;:24;;;;;21652:8;;;;;;;;;;;21651:9;21636:24;21633:54;;;21662:23;21670:14;;21662:7;:23::i;:::-;21633:54;20891:803;;:::o;16433:399::-;16531:4;16548:13;16574:14;;16564:6;:24;;16548:40;;16599:19;16649:13;;16621:24;16639:4;16621:9;:24::i;:::-;:41;;16599:63;;16681:8;;;;;;;;;;;16680:9;:24;;;;;16693:11;;;;;;;;;;;16680:24;:42;;;;;16708:14;;;;;;;;;;;16680:42;:54;;;;;16726:8;16680:54;:78;;;;;16739:11;:19;16751:6;16739:19;;;;;;;;;;;;;;;;;;;;;;;;;16738:20;16680:78;:99;;;;;16775:4;;;;;;;;;;;16762:17;;:9;:17;;;16680:99;:126;;;;;16796:10;;16783:9;;:23;;16680:126;:144;;;;;16810:14;16680:144;16673:151;;;;16433:399;;;;;:::o;14590:1044::-;7120:4;7109:8;;:15;;;;;;;;;;;;;;;;;;14661:20:::1;14684:53;14735:1;14685:44;14718:10;;14685:28;14702:10;;14685:12;;:16;;:28;;;;:::i;:::-;:32;;:44;;;;:::i;:::-;14684:50;;:53;;;;:::i;:::-;14661:76;;14748:32;14783:42;14812:12;14783:24;14794:12;;14783:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;14748:77;;14836:14;14853:36;14864:24;14853:6;:10;;:36;;;;:::i;:::-;14836:53;;14900:22;14925:21;14900:46;;14957:24;14974:6;14957:16;:24::i;:::-;14992:20;15015:41;15041:14;15015:21;:25;;:41;;;;:::i;:::-;14992:64;;15067:19;15088:48;15105:30;15122:12;;15105;:16;;:30;;;;:::i;:::-;15088:12;:16;;:48;;;;:::i;:::-;15067:69;;15147:29;15179;15195:12;;15179:11;:15;;:29;;;;:::i;:::-;15147:61;;15254:1;15222:21;:34;15219:103;;;15258:61;15271:24;15297:21;15258:12;:61::i;:::-;15219:103;15332:21;15356:43;15388:10;;15356:27;15380:1;15356:11;:15;;:27;;;;:::i;:::-;:31;;:43;;;;:::i;:::-;15332:67;;15437:1;15413:13;:26;15410:62;;;15441:29;15456:13;15441:14;:29::i;:::-;15410:62;15482:16;15501:43;15527:16;;15501:21;:25;;:43;;;;:::i;:::-;15482:62;;15577:1;15558:8;:21;15555:72;;;15589:16;;;;;;;;;;;15581:34;;:44;15616:8;15581:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;15555:72;14650:984;;;;;;;;;7140:5:::0;7129:8;;:16;;;;;;;;;;;;;;;;;;14590:1044;:::o;17213:219::-;17292:7;17328:4;;;;;;;;;;;17315:17;;:9;:17;;;17312:38;;17341:7;;17334:14;;;;17312:38;17373:4;;;;;;;;;;;17363:14;;:6;:14;;;17360:36;;17386:8;;17379:15;;;;17360:36;17413:11;;17406:18;;17213:219;;;;;:::o;9822:132::-;9879:4;9886:9;9928:4;9916:17;9908:25;;9950:1;9943:4;:8;9936:15;;;9822:132;;;:::o;15991:434::-;16057:21;16095:1;16081:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16057:40;;16126:4;16108;16113:1;16108:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;16152:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16142:4;16147:1;16142:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;16176:53;16193:4;16208:6;;;;;;;;;;;16217:11;16176:8;:53::i;:::-;16240:6;;;;;;;;;;;:57;;;16312:11;16338:1;16354:4;16381;16401:15;16240:177;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16046:379;15991:434;:::o;15642:341::-;15723:53;15740:4;15755:6;;;;;;;;;;;15764:11;15723:8;:53::i;:::-;15787:6;;;;;;;;;;;:22;;;15817:9;15850:4;15870:11;15896:1;15912;15928:16;;;;;;;;;;;15959:15;15787:188;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15642:341;;:::o;22192:283::-;22271:28;22292:6;22271:16;;:20;;:28;;;;:::i;:::-;22252:16;:47;;;;22327:26;22346:6;22327:14;;:18;;:26;;;;:::i;:::-;22310:14;:43;;;;22384:83;22406:60;22454:11;;22406:43;22442:6;22406:31;;:35;;:43;;;;:::i;:::-;:47;;:60;;;;:::i;:::-;22384:17;;:21;;:83;;;;:::i;:::-;22364:17;:103;;;;22192:283;:::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:90;1710:7;1753:5;1746:13;1739:21;1728:32;;1676:90;;;:::o;1772:116::-;1842:21;1857:5;1842:21;:::i;:::-;1835:5;1832:32;1822:60;;1878:1;1875;1868:12;1822:60;1772:116;:::o;1894:133::-;1937:5;1975:6;1962:20;1953:29;;1991:30;2015:5;1991:30;:::i;:::-;1894:133;;;;:::o;2033:323::-;2089:6;2138:2;2126:9;2117:7;2113:23;2109:32;2106:119;;;2144:79;;:::i;:::-;2106:119;2264:1;2289:50;2331:7;2322:6;2311:9;2307:22;2289:50;:::i;:::-;2279:60;;2235:114;2033:323;;;;:::o;2362:77::-;2399:7;2428:5;2417:16;;2362:77;;;:::o;2445:118::-;2532:24;2550:5;2532:24;:::i;:::-;2527:3;2520:37;2445:118;;:::o;2569:222::-;2662:4;2700:2;2689:9;2685:18;2677:26;;2713:71;2781:1;2770:9;2766:17;2757:6;2713:71;:::i;:::-;2569:222;;;;:::o;2797:126::-;2834:7;2874:42;2867:5;2863:54;2852:65;;2797:126;;;:::o;2929:96::-;2966:7;2995:24;3013:5;2995:24;:::i;:::-;2984:35;;2929:96;;;:::o;3031:122::-;3104:24;3122:5;3104:24;:::i;:::-;3097:5;3094:35;3084:63;;3143:1;3140;3133:12;3084:63;3031:122;:::o;3159:139::-;3205:5;3243:6;3230:20;3221:29;;3259:33;3286:5;3259:33;:::i;:::-;3159:139;;;;:::o;3304:122::-;3377:24;3395:5;3377:24;:::i;:::-;3370:5;3367:35;3357:63;;3416:1;3413;3406:12;3357:63;3304:122;:::o;3432:139::-;3478:5;3516:6;3503:20;3494:29;;3532:33;3559:5;3532:33;:::i;:::-;3432:139;;;;:::o;3577:474::-;3645:6;3653;3702:2;3690:9;3681:7;3677:23;3673:32;3670:119;;;3708:79;;:::i;:::-;3670:119;3828:1;3853:53;3898:7;3889:6;3878:9;3874:22;3853:53;:::i;:::-;3843:63;;3799:117;3955:2;3981:53;4026:7;4017:6;4006:9;4002:22;3981:53;:::i;:::-;3971:63;;3926:118;3577:474;;;;;:::o;4057:109::-;4138:21;4153:5;4138:21;:::i;:::-;4133:3;4126:34;4057:109;;:::o;4172:210::-;4259:4;4297:2;4286:9;4282:18;4274:26;;4310:65;4372:1;4361:9;4357:17;4348:6;4310:65;:::i;:::-;4172:210;;;;:::o;4388:619::-;4465:6;4473;4481;4530:2;4518:9;4509:7;4505:23;4501:32;4498:119;;;4536:79;;:::i;:::-;4498:119;4656:1;4681:53;4726:7;4717:6;4706:9;4702:22;4681:53;:::i;:::-;4671:63;;4627:117;4783:2;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4754:118;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;4388:619;;;;;:::o;5013:468::-;5078:6;5086;5135:2;5123:9;5114:7;5110:23;5106:32;5103:119;;;5141:79;;:::i;:::-;5103:119;5261:1;5286:53;5331:7;5322:6;5311:9;5307:22;5286:53;:::i;:::-;5276:63;;5232:117;5388:2;5414:50;5456:7;5447:6;5436:9;5432:22;5414:50;:::i;:::-;5404:60;;5359:115;5013:468;;;;;:::o;5487:619::-;5564:6;5572;5580;5629:2;5617:9;5608:7;5604:23;5600:32;5597:119;;;5635:79;;:::i;:::-;5597:119;5755:1;5780:53;5825:7;5816:6;5805:9;5801:22;5780:53;:::i;:::-;5770:63;;5726:117;5882:2;5908:53;5953:7;5944:6;5933:9;5929:22;5908:53;:::i;:::-;5898:63;;5853:118;6010:2;6036:53;6081:7;6072:6;6061:9;6057:22;6036:53;:::i;:::-;6026:63;;5981:118;5487:619;;;;;:::o;6112:329::-;6171:6;6220:2;6208:9;6199:7;6195:23;6191:32;6188:119;;;6226:79;;:::i;:::-;6188:119;6346:1;6371:53;6416:7;6407:6;6396:9;6392:22;6371:53;:::i;:::-;6361:63;;6317:117;6112:329;;;;:::o;6447:::-;6506:6;6555:2;6543:9;6534:7;6530:23;6526:32;6523:119;;;6561:79;;:::i;:::-;6523:119;6681:1;6706:53;6751:7;6742:6;6731:9;6727:22;6706:53;:::i;:::-;6696:63;;6652:117;6447:329;;;;:::o;6782:86::-;6817:7;6857:4;6850:5;6846:16;6835:27;;6782:86;;;:::o;6874:112::-;6957:22;6973:5;6957:22;:::i;:::-;6952:3;6945:35;6874:112;;:::o;6992:214::-;7081:4;7119:2;7108:9;7104:18;7096:26;;7132:67;7196:1;7185:9;7181:17;7172:6;7132:67;:::i;:::-;6992:214;;;;:::o;7212:1057::-;7316:6;7324;7332;7340;7348;7356;7405:3;7393:9;7384:7;7380:23;7376:33;7373:120;;;7412:79;;:::i;:::-;7373:120;7532:1;7557:53;7602:7;7593:6;7582:9;7578:22;7557:53;:::i;:::-;7547:63;;7503:117;7659:2;7685:53;7730:7;7721:6;7710:9;7706:22;7685:53;:::i;:::-;7675:63;;7630:118;7787:2;7813:53;7858:7;7849:6;7838:9;7834:22;7813:53;:::i;:::-;7803:63;;7758:118;7915:2;7941:53;7986:7;7977:6;7966:9;7962:22;7941:53;:::i;:::-;7931:63;;7886:118;8043:3;8070:53;8115:7;8106:6;8095:9;8091:22;8070:53;:::i;:::-;8060:63;;8014:119;8172:3;8199:53;8244:7;8235:6;8224:9;8220:22;8199:53;:::i;:::-;8189:63;;8143:119;7212:1057;;;;;;;;:::o;8275:474::-;8343:6;8351;8400:2;8388:9;8379:7;8375:23;8371:32;8368:119;;;8406:79;;:::i;:::-;8368:119;8526:1;8551:53;8596:7;8587:6;8576:9;8572:22;8551:53;:::i;:::-;8541:63;;8497:117;8653:2;8679:53;8724:7;8715:6;8704:9;8700:22;8679:53;:::i;:::-;8669:63;;8624:118;8275:474;;;;;:::o;8755:118::-;8842:24;8860:5;8842:24;:::i;:::-;8837:3;8830:37;8755:118;;:::o;8879:222::-;8972:4;9010:2;8999:9;8995:18;8987:26;;9023:71;9091:1;9080:9;9076:17;9067:6;9023:71;:::i;:::-;8879:222;;;;:::o;9107:442::-;9256:4;9294:2;9283:9;9279:18;9271:26;;9307:71;9375:1;9364:9;9360:17;9351:6;9307:71;:::i;:::-;9388:72;9456:2;9445:9;9441:18;9432:6;9388:72;:::i;:::-;9470;9538:2;9527:9;9523:18;9514:6;9470:72;:::i;:::-;9107:442;;;;;;:::o;9555:474::-;9623:6;9631;9680:2;9668:9;9659:7;9655:23;9651:32;9648:119;;;9686:79;;:::i;:::-;9648:119;9806:1;9831:53;9876:7;9867:6;9856:9;9852:22;9831:53;:::i;:::-;9821:63;;9777:117;9933:2;9959:53;10004:7;9995:6;9984:9;9980:22;9959:53;:::i;:::-;9949:63;;9904:118;9555:474;;;;;:::o;10035:182::-;10175:34;10171:1;10163:6;10159:14;10152:58;10035:182;:::o;10223:366::-;10365:3;10386:67;10450:2;10445:3;10386:67;:::i;:::-;10379:74;;10462:93;10551:3;10462:93;:::i;:::-;10580:2;10575:3;10571:12;10564:19;;10223:366;;;:::o;10595:419::-;10761:4;10799:2;10788:9;10784:18;10776:26;;10848:9;10842:4;10838:20;10834:1;10823:9;10819:17;10812:47;10876:131;11002:4;10876:131;:::i;:::-;10868:139;;10595:419;;;:::o;11020:232::-;11160:34;11156:1;11148:6;11144:14;11137:58;11229:15;11224:2;11216:6;11212:15;11205:40;11020:232;:::o;11258:366::-;11400:3;11421:67;11485:2;11480:3;11421:67;:::i;:::-;11414:74;;11497:93;11586:3;11497:93;:::i;:::-;11615:2;11610:3;11606:12;11599:19;;11258:366;;;:::o;11630:419::-;11796:4;11834:2;11823:9;11819:18;11811:26;;11883:9;11877:4;11873:20;11869:1;11858:9;11854:17;11847:47;11911:131;12037:4;11911:131;:::i;:::-;11903:139;;11630:419;;;:::o;12055:332::-;12176:4;12214:2;12203:9;12199:18;12191:26;;12227:71;12295:1;12284:9;12280:17;12271:6;12227:71;:::i;:::-;12308:72;12376:2;12365:9;12361:18;12352:6;12308:72;:::i;:::-;12055:332;;;;;:::o;12393:163::-;12533:15;12529:1;12521:6;12517:14;12510:39;12393:163;:::o;12562:366::-;12704:3;12725:67;12789:2;12784:3;12725:67;:::i;:::-;12718:74;;12801:93;12890:3;12801:93;:::i;:::-;12919:2;12914:3;12910:12;12903:19;;12562:366;;;:::o;12934:419::-;13100:4;13138:2;13127:9;13123:18;13115:26;;13187:9;13181:4;13177:20;13173:1;13162:9;13158:17;13151:47;13215:131;13341:4;13215:131;:::i;:::-;13207:139;;12934:419;;;:::o;13359:240::-;13499:34;13495:1;13487:6;13483:14;13476:58;13568:23;13563:2;13555:6;13551:15;13544:48;13359:240;:::o;13605:366::-;13747:3;13768:67;13832:2;13827:3;13768:67;:::i;:::-;13761:74;;13844:93;13933:3;13844:93;:::i;:::-;13962:2;13957:3;13953:12;13946:19;;13605:366;;;:::o;13977:419::-;14143:4;14181:2;14170:9;14166:18;14158:26;;14230:9;14224:4;14220:20;14216:1;14205:9;14201:17;14194:47;14258:131;14384:4;14258:131;:::i;:::-;14250:139;;13977:419;;;:::o;14402:137::-;14456:5;14487:6;14481:13;14472:22;;14503:30;14527:5;14503:30;:::i;:::-;14402:137;;;;:::o;14545:345::-;14612:6;14661:2;14649:9;14640:7;14636:23;14632:32;14629:119;;;14667:79;;:::i;:::-;14629:119;14787:1;14812:61;14865:7;14856:6;14845:9;14841:22;14812:61;:::i;:::-;14802:71;;14758:125;14545:345;;;;:::o;14896:234::-;15036:34;15032:1;15024:6;15020:14;15013:58;15105:17;15100:2;15092:6;15088:15;15081:42;14896:234;:::o;15136:366::-;15278:3;15299:67;15363:2;15358:3;15299:67;:::i;:::-;15292:74;;15375:93;15464:3;15375:93;:::i;:::-;15493:2;15488:3;15484:12;15477:19;;15136:366;;;:::o;15508:419::-;15674:4;15712:2;15701:9;15697:18;15689:26;;15761:9;15755:4;15751:20;15747:1;15736:9;15732:17;15725:47;15789:131;15915:4;15789:131;:::i;:::-;15781:139;;15508:419;;;:::o;15933:332::-;16054:4;16092:2;16081:9;16077:18;16069:26;;16105:71;16173:1;16162:9;16158:17;16149:6;16105:71;:::i;:::-;16186:72;16254:2;16243:9;16239:18;16230:6;16186:72;:::i;:::-;15933:332;;;;;:::o;16271:233::-;16411:34;16407:1;16399:6;16395:14;16388:58;16480:16;16475:2;16467:6;16463:15;16456:41;16271:233;:::o;16510:366::-;16652:3;16673:67;16737:2;16732:3;16673:67;:::i;:::-;16666:74;;16749:93;16838:3;16749:93;:::i;:::-;16867:2;16862:3;16858:12;16851:19;;16510:366;;;:::o;16882:419::-;17048:4;17086:2;17075:9;17071:18;17063:26;;17135:9;17129:4;17125:20;17121:1;17110:9;17106:17;17099:47;17163:131;17289:4;17163:131;:::i;:::-;17155:139;;16882:419;;;:::o;17307:223::-;17447:34;17443:1;17435:6;17431:14;17424:58;17516:6;17511:2;17503:6;17499:15;17492:31;17307:223;:::o;17536:366::-;17678:3;17699:67;17763:2;17758:3;17699:67;:::i;:::-;17692:74;;17775:93;17864:3;17775:93;:::i;:::-;17893:2;17888:3;17884:12;17877:19;;17536:366;;;:::o;17908:419::-;18074:4;18112:2;18101:9;18097:18;18089:26;;18161:9;18155:4;18151:20;18147:1;18136:9;18132:17;18125:47;18189:131;18315:4;18189:131;:::i;:::-;18181:139;;17908:419;;;:::o;18333:221::-;18473:34;18469:1;18461:6;18457:14;18450:58;18542:4;18537:2;18529:6;18525:15;18518:29;18333:221;:::o;18560:366::-;18702:3;18723:67;18787:2;18782:3;18723:67;:::i;:::-;18716:74;;18799:93;18888:3;18799:93;:::i;:::-;18917:2;18912:3;18908:12;18901:19;;18560:366;;;:::o;18932:419::-;19098:4;19136:2;19125:9;19121:18;19113:26;;19185:9;19179:4;19175:20;19171:1;19160:9;19156:17;19149:47;19213:131;19339:4;19213:131;:::i;:::-;19205:139;;18932:419;;;:::o;19357:180::-;19405:77;19402:1;19395:88;19502:4;19499:1;19492:15;19526:4;19523:1;19516:15;19543:194;19583:4;19603:20;19621:1;19603:20;:::i;:::-;19598:25;;19637:20;19655:1;19637:20;:::i;:::-;19632:25;;19681:1;19678;19674:9;19666:17;;19705:1;19699:4;19696:11;19693:37;;;19710:18;;:::i;:::-;19693:37;19543:194;;;;:::o;19743:180::-;19791:77;19788:1;19781:88;19888:4;19885:1;19878:15;19912:4;19909:1;19902:15;19929:233;19968:3;19991:24;20009:5;19991:24;:::i;:::-;19982:33;;20037:66;20030:5;20027:77;20024:103;;20107:18;;:::i;:::-;20024:103;20154:1;20147:5;20143:13;20136:20;;19929:233;;;:::o;20168:410::-;20208:7;20231:20;20249:1;20231:20;:::i;:::-;20226:25;;20265:20;20283:1;20265:20;:::i;:::-;20260:25;;20320:1;20317;20313:9;20342:30;20360:11;20342:30;:::i;:::-;20331:41;;20521:1;20512:7;20508:15;20505:1;20502:22;20482:1;20475:9;20455:83;20432:139;;20551:18;;:::i;:::-;20432:139;20216:362;20168:410;;;;:::o;20584:180::-;20632:77;20629:1;20622:88;20729:4;20726:1;20719:15;20753:4;20750:1;20743:15;20770:185;20810:1;20827:20;20845:1;20827:20;:::i;:::-;20822:25;;20861:20;20879:1;20861:20;:::i;:::-;20856:25;;20900:1;20890:35;;20905:18;;:::i;:::-;20890:35;20947:1;20944;20940:9;20935:14;;20770:185;;;;:::o;20961:191::-;21001:3;21020:20;21038:1;21020:20;:::i;:::-;21015:25;;21054:20;21072:1;21054:20;:::i;:::-;21049:25;;21097:1;21094;21090:9;21083:16;;21118:3;21115:1;21112:10;21109:36;;;21125:18;;:::i;:::-;21109:36;20961:191;;;;:::o;21158:180::-;21206:77;21203:1;21196:88;21303:4;21300:1;21293:15;21327:4;21324:1;21317:15;21344:224;21484:34;21480:1;21472:6;21468:14;21461:58;21553:7;21548:2;21540:6;21536:15;21529:32;21344:224;:::o;21574:366::-;21716:3;21737:67;21801:2;21796:3;21737:67;:::i;:::-;21730:74;;21813:93;21902:3;21813:93;:::i;:::-;21931:2;21926:3;21922:12;21915:19;;21574:366;;;:::o;21946:419::-;22112:4;22150:2;22139:9;22135:18;22127:26;;22199:9;22193:4;22189:20;22185:1;22174:9;22170:17;22163:47;22227:131;22353:4;22227:131;:::i;:::-;22219:139;;21946:419;;;:::o;22371:222::-;22511:34;22507:1;22499:6;22495:14;22488:58;22580:5;22575:2;22567:6;22563:15;22556:30;22371:222;:::o;22599:366::-;22741:3;22762:67;22826:2;22821:3;22762:67;:::i;:::-;22755:74;;22838:93;22927:3;22838:93;:::i;:::-;22956:2;22951:3;22947:12;22940:19;;22599:366;;;:::o;22971:419::-;23137:4;23175:2;23164:9;23160:18;23152:26;;23224:9;23218:4;23214:20;23210:1;23199:9;23195:17;23188:47;23252:131;23378:4;23252:131;:::i;:::-;23244:139;;22971:419;;;:::o;23396:236::-;23536:34;23532:1;23524:6;23520:14;23513:58;23605:19;23600:2;23592:6;23588:15;23581:44;23396:236;:::o;23638:366::-;23780:3;23801:67;23865:2;23860:3;23801:67;:::i;:::-;23794:74;;23877:93;23966:3;23877:93;:::i;:::-;23995:2;23990:3;23986:12;23979:19;;23638:366;;;:::o;24010:419::-;24176:4;24214:2;24203:9;24199:18;24191:26;;24263:9;24257:4;24253:20;24249:1;24238:9;24234:17;24227:47;24291:131;24417:4;24291:131;:::i;:::-;24283:139;;24010:419;;;:::o;24435:179::-;24575:31;24571:1;24563:6;24559:14;24552:55;24435:179;:::o;24620:366::-;24762:3;24783:67;24847:2;24842:3;24783:67;:::i;:::-;24776:74;;24859:93;24948:3;24859:93;:::i;:::-;24977:2;24972:3;24968:12;24961:19;;24620:366;;;:::o;24992:419::-;25158:4;25196:2;25185:9;25181:18;25173:26;;25245:9;25239:4;25235:20;25231:1;25220:9;25216:17;25209:47;25273:131;25399:4;25273:131;:::i;:::-;25265:139;;24992:419;;;:::o;25417:180::-;25557:32;25553:1;25545:6;25541:14;25534:56;25417:180;:::o;25603:366::-;25745:3;25766:67;25830:2;25825:3;25766:67;:::i;:::-;25759:74;;25842:93;25931:3;25842:93;:::i;:::-;25960:2;25955:3;25951:12;25944:19;;25603:366;;;:::o;25975:419::-;26141:4;26179:2;26168:9;26164:18;26156:26;;26228:9;26222:4;26218:20;26214:1;26203:9;26199:17;26192:47;26256:131;26382:4;26256:131;:::i;:::-;26248:139;;25975:419;;;:::o;26400:239::-;26540:34;26536:1;26528:6;26524:14;26517:58;26609:22;26604:2;26596:6;26592:15;26585:47;26400:239;:::o;26645:366::-;26787:3;26808:67;26872:2;26867:3;26808:67;:::i;:::-;26801:74;;26884:93;26973:3;26884:93;:::i;:::-;27002:2;26997:3;26993:12;26986:19;;26645:366;;;:::o;27017:419::-;27183:4;27221:2;27210:9;27206:18;27198:26;;27270:9;27264:4;27260:20;27256:1;27245:9;27241:17;27234:47;27298:131;27424:4;27298:131;:::i;:::-;27290:139;;27017:419;;;:::o;27442:167::-;27582:19;27578:1;27570:6;27566:14;27559:43;27442:167;:::o;27615:366::-;27757:3;27778:67;27842:2;27837:3;27778:67;:::i;:::-;27771:74;;27854:93;27943:3;27854:93;:::i;:::-;27972:2;27967:3;27963:12;27956:19;;27615:366;;;:::o;27987:419::-;28153:4;28191:2;28180:9;28176:18;28168:26;;28240:9;28234:4;28230:20;28226:1;28215:9;28211:17;28204:47;28268:131;28394:4;28268:131;:::i;:::-;28260:139;;27987:419;;;:::o;28412:180::-;28460:77;28457:1;28450:88;28557:4;28554:1;28547:15;28581:4;28578:1;28571:15;28598:143;28655:5;28686:6;28680:13;28671:22;;28702:33;28729:5;28702:33;:::i;:::-;28598:143;;;;:::o;28747:351::-;28817:6;28866:2;28854:9;28845:7;28841:23;28837:32;28834:119;;;28872:79;;:::i;:::-;28834:119;28992:1;29017:64;29073:7;29064:6;29053:9;29049:22;29017:64;:::i;:::-;29007:74;;28963:128;28747:351;;;;:::o;29104:85::-;29149:7;29178:5;29167:16;;29104:85;;;:::o;29195:60::-;29223:3;29244:5;29237:12;;29195:60;;;:::o;29261:158::-;29319:9;29352:61;29370:42;29379:32;29405:5;29379:32;:::i;:::-;29370:42;:::i;:::-;29352:61;:::i;:::-;29339:74;;29261:158;;;:::o;29425:147::-;29520:45;29559:5;29520:45;:::i;:::-;29515:3;29508:58;29425:147;;:::o;29578:114::-;29645:6;29679:5;29673:12;29663:22;;29578:114;;;:::o;29698:184::-;29797:11;29831:6;29826:3;29819:19;29871:4;29866:3;29862:14;29847:29;;29698:184;;;;:::o;29888:132::-;29955:4;29978:3;29970:11;;30008:4;30003:3;29999:14;29991:22;;29888:132;;;:::o;30026:108::-;30103:24;30121:5;30103:24;:::i;:::-;30098:3;30091:37;30026:108;;:::o;30140:179::-;30209:10;30230:46;30272:3;30264:6;30230:46;:::i;:::-;30308:4;30303:3;30299:14;30285:28;;30140:179;;;;:::o;30325:113::-;30395:4;30427;30422:3;30418:14;30410:22;;30325:113;;;:::o;30474:732::-;30593:3;30622:54;30670:5;30622:54;:::i;:::-;30692:86;30771:6;30766:3;30692:86;:::i;:::-;30685:93;;30802:56;30852:5;30802:56;:::i;:::-;30881:7;30912:1;30897:284;30922:6;30919:1;30916:13;30897:284;;;30998:6;30992:13;31025:63;31084:3;31069:13;31025:63;:::i;:::-;31018:70;;31111:60;31164:6;31111:60;:::i;:::-;31101:70;;30957:224;30944:1;30941;30937:9;30932:14;;30897:284;;;30901:14;31197:3;31190:10;;30598:608;;;30474:732;;;;:::o;31212:831::-;31475:4;31513:3;31502:9;31498:19;31490:27;;31527:71;31595:1;31584:9;31580:17;31571:6;31527:71;:::i;:::-;31608:80;31684:2;31673:9;31669:18;31660:6;31608:80;:::i;:::-;31735:9;31729:4;31725:20;31720:2;31709:9;31705:18;31698:48;31763:108;31866:4;31857:6;31763:108;:::i;:::-;31755:116;;31881:72;31949:2;31938:9;31934:18;31925:6;31881:72;:::i;:::-;31963:73;32031:3;32020:9;32016:19;32007:6;31963:73;:::i;:::-;31212:831;;;;;;;;:::o;32049:807::-;32298:4;32336:3;32325:9;32321:19;32313:27;;32350:71;32418:1;32407:9;32403:17;32394:6;32350:71;:::i;:::-;32431:72;32499:2;32488:9;32484:18;32475:6;32431:72;:::i;:::-;32513:80;32589:2;32578:9;32574:18;32565:6;32513:80;:::i;:::-;32603;32679:2;32668:9;32664:18;32655:6;32603:80;:::i;:::-;32693:73;32761:3;32750:9;32746:19;32737:6;32693:73;:::i;:::-;32776;32844:3;32833:9;32829:19;32820:6;32776:73;:::i;:::-;32049:807;;;;;;;;;:::o;32862:143::-;32919:5;32950:6;32944:13;32935:22;;32966:33;32993:5;32966:33;:::i;:::-;32862:143;;;;:::o;33011:663::-;33099:6;33107;33115;33164:2;33152:9;33143:7;33139:23;33135:32;33132:119;;;33170:79;;:::i;:::-;33132:119;33290:1;33315:64;33371:7;33362:6;33351:9;33347:22;33315:64;:::i;:::-;33305:74;;33261:128;33428:2;33454:64;33510:7;33501:6;33490:9;33486:22;33454:64;:::i;:::-;33444:74;;33399:129;33567:2;33593:64;33649:7;33640:6;33629:9;33625:22;33593:64;:::i;:::-;33583:74;;33538:129;33011:663;;;;;:::o

Swarm Source

ipfs://41c6e048851d6974889ef3596a662bed8353f2df9d71e3296a7161e5089553f6
[ 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.