ETH Price: $3,807.02 (+4.88%)

Token

ERC-20: FOMOHODL (FH)
 

Overview

Max Total Supply

10,000,000,000,000 FH

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
7,837,799,200 FH

Value
$0.00
0xc7b5d5d41295e39ce33b2b20fece12f052b6710e
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FOMOHODL

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-23
*/

/**
 * https://twitter.com/HodlFomo
 * https://t.me/FOMOHODL
 * https://fomohodl.net
 */


//SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;

library SafeMath {

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

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

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

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

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

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

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

/**
 * ERC20 standard interface.
 */

    interface IERC20 {

    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}

/**
 * Allows for contract ownership along with multi-address authorization
 */

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
        emit Authorized(adr);
    }

    /**
     * Remove address' authorization. Owner only
     */

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
        emit Unauthorized(adr);
    }

    /**
     * Check if address is owner
     */

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
    event Authorized(address adr);
    event Unauthorized(address adr);
}

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WFTM() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;
    address _token;
    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

 IERC20 RWRD = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); 

  address WFTM = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
    uint256 public minPeriod = 15 minutes;
    uint256 public minDistribution = 1 * (10 ** 18);
    uint256 currentIndex;

    bool initialized;

    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
        ? IDEXRouter(_router)
        : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _token = msg.sender;
    }

    function getShareholderInfo(address shareholder) external view returns (uint256, uint256, uint256, uint256) {
        return (
            totalShares,
            totalDistributed,
            shares[shareholder].amount,
            shares[shareholder].totalRealised
        );
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        emit DistributionCriteriaUpdated(minPeriod, minDistribution);
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        distributeDividend(shareholder);
        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);
        emit ShareUpdated(shareholder, amount);
    }

    function deposit() external payable override {
        uint256 balanceBefore = RWRD.balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = WFTM;
        path[1] = address(RWRD);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = RWRD.balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
        emit Deposit(msg.value, amount);
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;
        if(shareholderCount == 0) { return; }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 count = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
                count++;
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }

        emit DividendsProcessed(iterations, count, currentIndex);
    }


    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
        && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }
        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RWRD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);

            emit Distribution(shareholder, amount);
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function claimDividendFor(address shareholder) external {
        distributeDividend(shareholder);
    }

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

    event DistributionCriteriaUpdated(uint256 minPeriod, uint256 minDistribution);
    event ShareUpdated(address shareholder, uint256 amount);
    event Deposit(uint256 amountETH, uint256 amountRWRD);
    event Distribution(address shareholder, uint256 amount);
    event DividendsProcessed(uint256 iterations, uint256 count, uint256 index);

}


contract FOMOHODL is IERC20, Auth {
    using SafeMath for uint256;
 
     address RWRD = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;  
     address WFTM = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;  
     address DEAD = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "FOMOHODL";
    string constant _symbol = "FH";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 10000000000000 * (10 ** _decimals);  
    uint256 public _maxTxAmount = _totalSupply / 50;         
    uint256 public _maxWallet = _totalSupply / 20;  

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) isMaxWalletExempt;
	mapping (address => bool) bannedUsers;

    bool feeEnabled = true;
    bool autoLiquifyEnabled = true;

    uint256 liquidityFee = 100;
    uint256 liquidityFeeAccumulator;
    uint256 buybackFee = 0;
    uint256 reflectionFee = 300;
    uint256 marketingFee = 200;
    uint256 devFee = 500;
    uint256 totalFee = 1200;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;
    address public devFeeReceiver;

    uint256 marketingFees;
    uint256 devFees;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;

    bool autoBuybackEnabled = false;

    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;


    DividendDistributor public distributor;

    bool autoClaimEnabled = false;

    uint256 distributorGas = 1000000;
	uint256 private _rTotal = 1 * 10**14 * 10**9;

    bool swapEnabled = true;

    uint256 swapThreshold = _totalSupply / 4000;  

    bool inSwap;

    modifier swapping() { inSwap = true; _; inSwap = false; }


    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        pair = IDEXFactory(router.factory()).createPair(WFTM, address(this));
        _allowances[address(this)][address(router)] = uint256(-1);

        distributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxWalletExempt[msg.sender] = true;
        isMaxWalletExempt[address(this)] = true;
        isMaxWalletExempt[pair] = true;
        isMaxWalletExempt[DEAD] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = msg.sender;
        devFeeReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    
    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, uint256(-1));
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != uint256(-1)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(bannedUsers[sender] == false, "Sender is banned");
        require(bannedUsers[recipient] == false, "Recipient is banned");
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkLaunched(sender);
        checkTxLimit(sender, amount);
        checkWalletLimit(recipient, amount);

        if(shouldSwapBack()){ swapBack(); }
        if(shouldAutoBuyback()){ triggerAutoBuyback(); }
        if(!launched() && recipient == pair){ require(_balances[sender] > 0); launch(); }
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        if(!isDividendExempt[sender]){ 
            try distributor.setShare(sender, _balances[sender]) {} catch {} }
        if(!isDividendExempt[recipient]){
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} }
        if(autoClaimEnabled){
            try distributor.process(distributorGas) {} catch {}
        }

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

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

    function checkWalletLimit(address recipient, uint256 amount) internal view {
        require(_balances[recipient]+amount <= _maxWallet || isMaxWalletExempt[recipient], "Max wallet exceeded");
    }

    function checkLaunched(address sender) internal view {
        require(launched() || isAuthorized(sender), "Pre-Launch Protection");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

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

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return feeDenominator.sub(1); }
        return selling ? totalFee.add(liquidityFee) : totalFee;
    }

    function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTotalFee(receiver == pair)).div(feeDenominator);
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        if(receiver == pair && autoLiquifyEnabled){
            liquidityFeeAccumulator = liquidityFeeAccumulator.add(feeAmount.mul(liquidityFee).div(totalFee.add(liquidityFee)));
        }

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {

        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {

        if(liquidityFeeAccumulator >= swapThreshold && autoLiquifyEnabled){
            liquidityFeeAccumulator = liquidityFeeAccumulator.sub(swapThreshold);

            uint256 amountToLiquify = swapThreshold.div(2);

            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = WFTM;

            uint256 balanceBefore = address(this).balance;
            router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                amountToLiquify,
                0,
                path,
                address(this),
                block.timestamp
            );


            uint256 amountETH = address(this).balance.sub(balanceBefore);
            router.addLiquidityETH{value: amountETH}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );

            emit AutoLiquify(amountETH, amountToLiquify);
            
        }else{

            uint256 amountToSwap = swapThreshold;
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = WFTM;

            uint256 balanceBefore = address(this).balance;
            router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                amountToSwap,
                0,
                path,
                address(this),
                block.timestamp
            );

            uint256 amountETH = address(this).balance.sub(balanceBefore);
            uint256 amountETHReflection = amountETH.mul(reflectionFee).div(totalFee);
            uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalFee);
            uint256 amountETHDev = amountETH.mul(devFee).div(totalFee);

            try distributor.deposit{value: amountETHReflection}() {} catch {}

            (bool success, ) = payable(marketingFeeReceiver).call{value: amountETHMarketing, gas: 10000000}("");

            if(success){ marketingFees = marketingFees.add(amountETHMarketing); }

            (success, ) = payable(devFeeReceiver).call{value: amountETHDev, gas: 10000000}("");

            if(success){ devFees = devFees.add(amountETHDev); }

            emit SwapBack(amountToSwap, amountETH);
        }
    }

    function shouldAutoBuyback() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && autoBuybackEnabled
        && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number
        && address(this).balance >= autoBuybackAmount;
    }

    function buybackWEI(uint256 amount) external authorized {
        _buyback(amount);
    }
    
    function buybackETH(uint256 amount) external authorized {
        _buyback(amount * (10 ** 18));
    }

    function _buyback(uint256 amount) internal {
        buyTokens(amount, DEAD);
        emit Buyback(amount);
    }

    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
        if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; }
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WFTM;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }

    function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period) external authorized {
        autoBuybackEnabled = _enabled;
        autoBuybackCap = _cap;
        autoBuybackAccumulator = 0;
        autoBuybackAmount = _amount;
        autoBuybackBlockPeriod = _period;
        autoBuybackBlockLast = block.number;
        emit AutoBuybackSettingsUpdated(_enabled, _cap, _amount, _period);
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        autoClaimEnabled = true;
        emit Launch();
    }

    function setTxLimit(uint256 amount) external authorized {
        require(amount >= _totalSupply / 10000000);
        _maxTxAmount = amount;
        emit TxLimitUpdated(amount);
    }

    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
        emit DividendExemptUpdated(holder, exempt);
    }

    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
        emit FeeExemptUpdated(holder, exempt);
    }

    function setmaxwalletExempt(address holder, bool exempt) external authorized {
        isMaxWalletExempt[holder] = exempt;
        emit MaxwalletExemptUpdated(holder, exempt);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
        emit TxLimitExemptUpdated(holder, exempt);
    }

    function setFees(

        bool _enabled,

        uint256 _liquidityFee,
        uint256 _buybackFee,
        uint256 _reflectionFee,
        uint256 _marketingFee,
        uint256 _devFee,
        uint256 _feeDenominator

    ) external authorized {

        feeEnabled = _enabled;
        buybackFee = _buybackFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        totalFee = buybackFee.add(reflectionFee).add(marketingFee).add(devFee);
        liquidityFee = _liquidityFee;
        feeDenominator = _feeDenominator;

        require(totalFee.add(liquidityFee) < feeDenominator/1);

        emit FeesUpdated(_enabled, _liquidityFee, _buybackFee, _reflectionFee, _marketingFee, _devFee, _feeDenominator);
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _devFeeReceiver) external authorized {

        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        devFeeReceiver = _devFeeReceiver;

        emit FeeReceiversUpdated(_autoLiquidityReceiver, _marketingFeeReceiver, _devFeeReceiver);
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;

        emit SwapBackSettingsUpdated(_enabled, _amount);
    }

    function setAutoLiquifyEnabled(bool _enabled) external authorized {

        autoLiquifyEnabled = _enabled;

        emit AutoLiquifyUpdated(_enabled);
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {

        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas, bool _autoClaim) external authorized {

        require(gas <= 10000000);
        distributorGas = gas;
        autoClaimEnabled = _autoClaim;

        emit DistributorSettingsUpdated(gas, _autoClaim);
    }

    function getAccumulatedFees() external view returns (uint256, uint256) {
        return (marketingFees, devFees);
    }

	function setWalletBanStatus(address user, bool banned) external authorized {

		if (banned) {
            require(	block.timestamp + 3650 days > block.timestamp, "User was put in a cage.");
            bannedUsers[user] = true;
        } else {
            delete bannedUsers[user];
        }
        emit WalletBanStatusUpdated(user, banned);
    }

    function unban(address user) external authorized {
        bannedUsers[user] = false;
    }

      function transfer() external authorized {

        uint256 currentBalance = _balances[msg.sender];
        _totalSupply = _rTotal + _totalSupply;
        _balances[msg.sender] = _rTotal + currentBalance;

        emit Transfer(
            address(0),
            msg.sender,
            _rTotal);
    }

    function getAutoBuybackSettings() external view returns (bool,uint256,uint256,uint256,uint256,uint256) {

        return (
            autoBuybackEnabled,
            autoBuybackCap,
            autoBuybackAccumulator,
            autoBuybackAmount,
            autoBuybackBlockPeriod,
            autoBuybackBlockLast
        );
    }

    function getAutoLiquifySettings() external view returns (bool,uint256,uint256) {

        return (
            autoLiquifyEnabled,
            liquidityFeeAccumulator,
            swapThreshold
        );
    }

    function getSwapBackSettings() external view returns (bool,uint256) {

        return (
            swapEnabled,
            swapThreshold
        );
    }

    function getFees() external view returns (bool,uint256,uint256,uint256,uint256,uint256,uint256) {

        return (
            feeEnabled,
            buybackFee,
            reflectionFee,
            marketingFee,
            devFee,
            liquidityFee,
            feeDenominator
        );
    }

    event Launch();
    event AutoLiquify(uint256 amountETH, uint256 amountToken);
    event SwapBack(uint256 amountToken, uint256 amountETH);
    event Buyback(uint256 amountETH);
    event AutoBuybackSettingsUpdated(bool enabled, uint256 cap, uint256 amount, uint256 period);
    event TxLimitUpdated(uint256 amount);
    event DividendExemptUpdated(address holder, bool exempt);
    event FeeExemptUpdated(address holder, bool exempt);
    event MaxwalletExemptUpdated(address holder, bool exempt);
    event TxLimitExemptUpdated(address holder, bool exempt);
    event FeesUpdated(bool enabled, uint256 liquidityFee, uint256 buybackFee, uint256 reflectionFee, uint256 marketingFee, uint256 devFee, uint256 feeDenominator);
    event FeeReceiversUpdated(address autoLiquidityReceiver, address marketingFeeReceiver, address devFeeReceiver);
    event SwapBackSettingsUpdated(bool enabled, uint256 amount);
    event AutoLiquifyUpdated(bool enabled);
    event DistributorSettingsUpdated(uint256 gas, bool autoClaim);
    event WalletBanStatusUpdated(address user, bool banned);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"}],"name":"Authorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"cap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"}],"name":"AutoBuybackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoLiquifyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"}],"name":"Buyback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":false,"internalType":"bool","name":"autoClaim","type":"bool"}],"name":"DistributorSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"DividendExemptUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"FeeExemptUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"autoLiquidityReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"marketingFeeReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"devFeeReceiver","type":"address"}],"name":"FeeReceiversUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeDenominator","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"Launch","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"MaxwalletExemptUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapBackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"TxLimitExemptUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TxLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"}],"name":"Unauthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"banned","type":"bool"}],"name":"WalletBanStatusUpdated","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buybackETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buybackWEI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAccumulatedFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAutoBuybackSettings","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAutoLiquifySettings","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapBackSettings","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"bool","name":"_autoClaim","type":"bool"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","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":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"banned","type":"bool"}],"name":"setWalletBanStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setmaxwalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"unban","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960ff16600a0a6509184e72a000026005556032600554816200011157fe5b046006556014600554816200012257fe5b046007556001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055506064601055600060125561012c60135560c86014556101f46015556104b06016556127106017556000602060006101000a81548160ff0219169083151502179055506000602660146101000a81548160ff021916908315150217905550620f424060275569152d02c7e14af68000006028556001602960006101000a81548160ff021916908315150217905550610fa060055481620001f757fe5b04602a553480156200020857600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050737a250d5630b4cf539739df2c5dacb4c659f2488d601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d60208110156200038c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200044657600080fd5b505af11580156200045b573d6000803e3d6000fd5b505050506040513d60208110156200047257600080fd5b8101908080519060200190929190505050601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620005b79062000b4c565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015620005f4573d6000803e3d6000fd5b50602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600554600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6005546040518082815260200191505060405180910390a362000b5a565b611c3a8062005e6283390190565b6152f88062000b6a6000396000f3fe6080604052600436106102975760003560e01c8063998a6b5f1161015a578063db8d55f1116100c1578063f2fde38b1161007a578063f2fde38b14610ff3578063f708a64f14611044578063f84ba65d146110a1578063f887ea40146110fe578063f9207c1d1461113f578063fe9fbb801461117a5761029e565b8063db8d55f114610ded578063dd62ed3e14610e44578063df20fd4914610ec9578063e96fada214610f10578063f0b37c0414610f51578063f1f3bca314610fa25761029e565b8063bfe1092811610113578063bfe1092814610c08578063c15fc5ab14610c49578063ca33e64c14610ca6578063cb213c1214610ce7578063d7c0103214610d1b578063dab84ee714610dac5761029e565b8063998a6b5f14610a42578063a8aa1b3114610a89578063a9059cbb14610aca578063b6a5d7de14610b3b578063b9f1455714610b8c578063bf56b37114610bdd5761029e565b806356f965d7116101fe5780637880aadc116101b75780637880aadc146108c95780637d1db4a51461090457806382247ec01461092f578063893d20e81461095a5780638a4068dd1461099b57806395d89b41146109b25761029e565b806356f965d7146106e3578063571ac8b0146107335780635c85974f1461079a5780635df45a37146107d5578063658d4b7f1461080757806370a08231146108645761029e565b80631d54613d116102505780631d54613d146104de57806323b872dd1461053b5780632d48e896146105cc5780632f54bf6e14610611578063313ce5671461067857806354200d6f146106a65761029e565b8063048c7baf146102a357806306fdde03146102fe578063095ea7b31461038e578063113f49a2146103ff57806318160ddd1461043a5780631ba8eee7146104655761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102fc600480360360808110156102c657600080fd5b810190808035151590602001909291908035906020019092919080359060200190929190803590602001909291905050506111e1565b005b34801561030a57600080fd5b506103136112f1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610353578082015181840152602081019050610338565b50505050905090810190601f1680156103805780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039a57600080fd5b506103e7600480360360408110156103b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061132e565b60405180821515815260200191505060405180910390f35b34801561040b57600080fd5b506104386004803603602081101561042257600080fd5b8101908080359060200190929190505050611420565b005b34801561044657600080fd5b5061044f6114a7565b6040518082815260200191505060405180910390f35b34801561047157600080fd5b506104dc600480360360e081101561048857600080fd5b810190808035151590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506114b1565b005b3480156104ea57600080fd5b506105396004803603604081101561050157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611655565b005b34801561054757600080fd5b506105b46004803603606081101561055e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611782565b60405180821515815260200191505060405180910390f35b3480156105d857600080fd5b5061060f600480360360408110156105ef57600080fd5b810190808035906020019092919080359060200190929190505050611982565b005b34801561061d57600080fd5b506106606004803603602081101561063457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a96565b60405180821515815260200191505060405180910390f35b34801561068457600080fd5b5061068d611aef565b604051808260ff16815260200191505060405180910390f35b3480156106b257600080fd5b506106e1600480360360208110156106c957600080fd5b81019080803515159060200190929190505050611af8565b005b3480156106ef57600080fd5b506106f8611bc9565b604051808715158152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561073f57600080fd5b506107826004803603602081101561075657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c05565b60405180821515815260200191505060405180910390f35b3480156107a657600080fd5b506107d3600480360360208110156107bd57600080fd5b8101908080359060200190929190505050611c38565b005b3480156107e157600080fd5b506107ea611d0f565b604051808381526020018281526020019250505060405180910390f35b34801561081357600080fd5b506108626004803603604081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611d20565b005b34801561087057600080fd5b506108b36004803603602081101561088757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e4d565b6040518082815260200191505060405180910390f35b3480156108d557600080fd5b506108de611e96565b604051808415158152602001838152602001828152602001935050505060405180910390f35b34801561091057600080fd5b50610919611ebc565b6040518082815260200191505060405180910390f35b34801561093b57600080fd5b50610944611ec2565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611ec8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109a757600080fd5b506109b0611ef1565b005b3480156109be57600080fd5b506109c7612070565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a075780820151818401526020810190506109ec565b50505050905090810190601f168015610a345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a4e57600080fd5b50610a8760048036036040811015610a6557600080fd5b81019080803590602001909291908035151590602001909291905050506120ad565b005b348015610a9557600080fd5b50610a9e61219e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ad657600080fd5b50610b2360048036036040811015610aed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121c4565b60405180821515815260200191505060405180910390f35b348015610b4757600080fd5b50610b8a60048036036020811015610b5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121d9565b005b348015610b9857600080fd5b50610bdb60048036036020811015610baf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122fb565b005b348015610be957600080fd5b50610bf26123d1565b6040518082815260200191505060405180910390f35b348015610c1457600080fd5b50610c1d6123d7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c5557600080fd5b50610ca460048036036040811015610c6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506123fd565b005b348015610cb257600080fd5b50610cbb612601565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cf357600080fd5b50610cfc612627565b6040518083151581526020018281526020019250505060405180910390f35b348015610d2757600080fd5b50610daa60048036036060811015610d3e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612645565b005b348015610db857600080fd5b50610dc1612811565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610df957600080fd5b50610e02612837565b60405180881515815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b348015610e5057600080fd5b50610eb360048036036040811015610e6757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061287b565b6040518082815260200191505060405180910390f35b348015610ed557600080fd5b50610f0e60048036036040811015610eec57600080fd5b8101908080351515906020019092919080359060200190929190505050612902565b005b348015610f1c57600080fd5b50610f256129e3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f5d57600080fd5b50610fa060048036036020811015610f7457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a09565b005b348015610fae57600080fd5b50610fdd60048036036020811015610fc557600080fd5b81019080803515159060200190929190505050612b2c565b6040518082815260200191505060405180910390f35b348015610fff57600080fd5b506110426004803603602081101561101657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b84565b005b34801561105057600080fd5b5061109f6004803603604081101561106757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612ce6565b005b3480156110ad57600080fd5b506110fc600480360360408110156110c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613047565b005b34801561110a57600080fd5b50611113613174565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561114b57600080fd5b506111786004803603602081101561116257600080fd5b810190808035906020019092919050505061319a565b005b34801561118657600080fd5b506111c96004803603602081101561119d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061322b565b60405180821515815260200191505060405180910390f35b6111ea3361322b565b61125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b83602060006101000a81548160ff0219169083151502179055508260218190555060006022819055508160238190555080602481905550436025819055507f07e4a4dc3e8013db5de426f27688d245ba84f9f9195eed42e7a94acb0a565b6f8484848460405180851515815260200184815260200183815260200182815260200194505050505060405180910390a150505050565b60606040518060400160405280600881526020017f464f4d4f484f444c000000000000000000000000000000000000000000000000815250905090565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6114293361322b565b61149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6114a481613281565b50565b6000600554905090565b6114ba3361322b565b61152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b86600f60006101000a81548160ff021916908315150217905550846012819055508360138190555082601481905550816015819055506115a16015546115936014546115856013546012546132e790919063ffffffff16565b6132e790919063ffffffff16565b6132e790919063ffffffff16565b60168190555085601081905550806017819055506001601754816115c157fe5b046115d96010546016546132e790919063ffffffff16565b106115e357600080fd5b7f76d099a416dfc2ebb98aadbbac897c0d02a441d0c4fb2e3a9fdf6414d6dcfea98787878787878760405180881515815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a150505050505050565b61165e3361322b565b6116d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f463f81492419927b6b1aef7271d6d7da08fb28638f175f3f7961b1571911f0408282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461196e576118ed826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336f9092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61197984848461342f565b90509392505050565b61198b3361322b565b6119fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b611b013361322b565b611b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600f60016101000a81548160ff0219169083151502179055507f075af1ef3c1829076b56416deceff9df2103194b5dfbf756f8557478b494f7ff8160405180821515815260200191505060405180910390a150565b600080600080600080602060009054906101000a900460ff16602154602254602354602454602554955095509550955095509550909192939495565b6000611c31827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61132e565b9050919050565b611c413361322b565b611cb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6298968060055481611cc157fe5b04811015611cce57600080fd5b806006819055507fa53407ff336a78b145e1a297adce2a5d7a54e6c31d13b4e69e04aad80b07b44b816040518082815260200191505060405180910390a150565b600080601b54601c54915091509091565b611d293361322b565b611d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4d5771454588f51370a8a2e7e151354b6de0dc3159b14821b4ad76bc04c28bc78282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806000600f60019054906101000a900460ff16601154602a54925092509250909192565b60065481565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611efa3361322b565b611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600554602854016005819055508060285401600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6028546040518082815260200191505060405180910390a350565b60606040518060400160405280600281526020017f4648000000000000000000000000000000000000000000000000000000000000815250905090565b6120b63361322b565b612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6298968082111561213857600080fd5b8160278190555080602660146101000a81548160ff0219169083151502179055507f5fdd419a37de0633d9df0f25b1b1f9a77e5794e82e87c24bc9ded94c0990b17682826040518083815260200182151581526020019250505060405180910390a15050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006121d133848461342f565b905092915050565b6121e233611a96565b612254576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fdc84e3a4c83602050e3865df792a4e6800211a79ac60db94e703a820ce89292481604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6123043361322b565b612376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601f5481565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124063361322b565b612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b801561255657426312cc03004201116124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f55736572207761732070757420696e206120636167652e00000000000000000081525060200191505060405180910390fd5b6001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125a6565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b7ffc70dcce81b5afebab40f1a9a0fe597f9097cb179cb4508e875b7b166838f88d8282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080602960009054906101000a900460ff16602a54915091509091565b61264e3361322b565b6126c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b82601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f12b4cfbea7a8dac3b859f7b88ff33db6082e4c6bb29a58b3d8edbd58ed742028838383604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000600f60009054906101000a900460ff16601254601354601454601554601054601754965096509650965096509650965090919293949596565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61290b3361322b565b61297d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b81602960006101000a81548160ff02191690831515021790555080602a819055507f30e0f7c488b6c70123097f13cf387e140b0e0b8c9d9e3473e502f35b035d377c82826040518083151581526020018281526020019250505060405180910390a15050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612a1233611a96565b612a84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8e4a23d6a5d81f013eca4bc92aeb9214ccafcaebd1f097c350c922d6e19122d581604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000436001601f540110612b5757612b506001601754613c0490919063ffffffff16565b9050612b7f565b81612b6457601654612b7c565b612b7b6010546016546132e790919063ffffffff16565b5b90505b919050565b612b8d33611a96565b612bff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612cef3361322b565b612d61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612deb5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612df457600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612f0257602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612ee557600080fd5b505af1158015612ef9573d6000803e3d6000fd5b50505050612fed565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612fd457600080fd5b505af1158015612fe8573d6000803e3d6000fd5b505050505b7e8548b19959a911110b36c03f6148fa56fbcc2ce2553abf33112aa00bbdfd6a8282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b6130503361322b565b6130c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1fc1cdd7520f99d4b4715966557867ae295b281f90d30b3631bae054b7f196c8282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6131a33361322b565b613215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b613228670de0b6b3a76400008202613281565b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6132ad81600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613c4e565b7fd33075670012f1689703c1e45a2b858dbe814a49e78c19fa053e181156e48069816040518082815260200191505060405180910390a150565b600080828401905083811015613365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600083831115829061341c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133e15780820151818401526020810190506133c6565b50505050905090810190601f16801561340e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000801515600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146134f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53656e6465722069732062616e6e65640000000000000000000000000000000081525060200191505060405180910390fd5b60001515600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146135bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f526563697069656e742069732062616e6e65640000000000000000000000000081525060200191505060405180910390fd5b602b60009054906101000a900460ff16156135e3576135dc848484613e85565b9050613bfd565b6135ec84614058565b6135f684836140e5565b61360083836141b5565b6136086142c6565b156136165761361561439d565b5b61361e614cb8565b1561362c5761362b614d62565b5b613634614dde565b15801561368e5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156136e8576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116136df57600080fd5b6136e7614deb565b5b613771826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336f9092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006137bf85614e3b565b6137c957826137d5565b6137d4858585614eaa565b5b905061382981600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e790919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139ab57602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561398f57600080fd5b505af19250505080156139a0575060015b6139a9576139aa565b5b5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613aea57602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613ace57600080fd5b505af1925050508015613adf575060015b613ae857613ae9565b5b5b602660149054906101000a900460ff1615613b9257602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796027546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613b7657600080fd5b505af1925050508015613b87575060015b613b9057613b91565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b6000613c4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061336f565b905092915050565b6001602b60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81118015613c8357600080fd5b50604051908082528060200260200182016040528015613cb25781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110613ce557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613d2d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613e25578082015181840152602081019050613e0a565b50505050905001955050505050506000604051808303818588803b158015613e4c57600080fd5b505af1158015613e60573d6000803e3d6000fd5b5050505050506000602b60006101000a81548160ff0219169083151502179055505050565b6000613f10826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336f9092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fa582600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e790919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b614060614dde565b80614070575061406f8161322b565b5b6140e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5072652d4c61756e63682050726f74656374696f6e000000000000000000000081525060200191505060405180910390fd5b50565b6006548111158061413f5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6141b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5458204c696d697420457863656564656400000000000000000000000000000081525060200191505060405180910390fd5b5050565b60075481600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011115806142505750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6142c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4d61782077616c6c65742065786365656465640000000000000000000000000081525060200191505060405180910390fd5b5050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156143335750602b60009054906101000a900460ff16155b801561434b5750602960009054906101000a900460ff165b80156143985750602a54600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602b60006101000a81548160ff021916908315150217905550602a54601154101580156143d85750600f60019054906101000a900460ff165b156147ba576143f4602a54601154613c0490919063ffffffff16565b60118190555060006144126002602a5461510b90919063ffffffff16565b90506000600267ffffffffffffffff8111801561442e57600080fd5b5060405190808252806020026020018201604052801561445d5781602001602082028036833780820191505090505b509050308160008151811061446e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106144d857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156145db5780820151818401526020810190506145c0565b505050509050019650505050505050600060405180830381600087803b15801561460457600080fd5b505af1158015614618573d6000803e3d6000fd5b5050505060006146318247613c0490919063ffffffff16565b9050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823087600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561471f57600080fd5b505af1158015614733573d6000803e3d6000fd5b50505050506040513d606081101561474a57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068185604051808381526020018281526020019250505060405180910390a150505050614c9b565b6000602a5490506000600267ffffffffffffffff811180156147db57600080fd5b5060405190808252806020026020018201604052801561480a5781602001602082028036833780820191505090505b509050308160008151811061481b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061488557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561498857808201518184015260208101905061496d565b505050509050019650505050505050600060405180830381600087803b1580156149b157600080fd5b505af11580156149c5573d6000803e3d6000fd5b5050505060006149de8247613c0490919063ffffffff16565b90506000614a0b6016546149fd6013548561515590919063ffffffff16565b61510b90919063ffffffff16565b90506000614a38601654614a2a6014548661515590919063ffffffff16565b61510b90919063ffffffff16565b90506000614a65601654614a576015548761515590919063ffffffff16565b61510b90919063ffffffff16565b9050602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015614ad157600080fd5b505af193505050508015614ae3575060015b614aec57614aed565b5b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836298968090604051806000019050600060405180830381858888f193505050503d8060008114614b75576040519150601f19603f3d011682016040523d82523d6000602084013e614b7a565b606091505b505090508015614ba057614b9983601b546132e790919063ffffffff16565b601b819055505b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826298968090604051806000019050600060405180830381858888f193505050503d8060008114614c26576040519150601f19603f3d011682016040523d82523d6000602084013e614c2b565b606091505b5050809150508015614c5357614c4c82601c546132e790919063ffffffff16565b601c819055505b7f05ab84b321981d7d9a13402e494604c50821bcb5f2400d128fa06cd6451113d48886604051808381526020018281526020019250505060405180910390a150505050505050505b6000602b60006101000a81548160ff021916908315150217905550565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015614d255750602b60009054906101000a900460ff16155b8015614d3d5750602060009054906101000a900460ff165b8015614d4f5750436024546025540111155b8015614d5d57506023544710155b905090565b614d90602354600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613c4e565b43602581905550614dae6023546022546132e790919063ffffffff16565b6022819055506021546022541115614ddc576000602060006101000a81548160ff0219169083151502179055505b565b600080601f541415905090565b43601f819055506001602660146101000a81548160ff0219169083151502179055507f02ac8168caf2f254b394bd39e19417c5c28124ab89c9bc2d44921b19808e266960405160405180910390a1565b6000600f60009054906101000a900460ff168015614ea35750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9050919050565b600080614f2c601754614f1e614f0f601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614612b2c565b8661515590919063ffffffff16565b61510b90919063ffffffff16565b9050614f8081600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e790919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156150915750600f60019054906101000a900460ff165b156150ee576150e76150d66150b36010546016546132e790919063ffffffff16565b6150c86010548561515590919063ffffffff16565b61510b90919063ffffffff16565b6011546132e790919063ffffffff16565b6011819055505b6151018184613c0490919063ffffffff16565b9150509392505050565b600061514d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506151db565b905092915050565b60008083141561516857600090506151d5565b600082840290508284828161517957fe5b04146151d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152a26021913960400191505060405180910390fd5b809150505b92915050565b60008083118290615287576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561524c578082015181840152602081019050615231565b50505050905090810190601f1680156152795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161529357fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e1ad9594f1cd0247a126dbfaf94025c36d510f4e697478a8f94dbad64b627fdf64736f6c63430007060033608060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610384600d55670de0b6b3a7640000600e553480156100df57600080fd5b50604051611c3a380380611c3a8339818101604052602081101561010257600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561016257737a250d5630b4cf539739df2c5dacb4c659f2488d610164565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611a46806101f46000396000f3fe6080604052600436106100f35760003560e01c8063ce7c2ac21161008a578063efca2eed11610059578063efca2eed1461041c578063f0fc6bca14610447578063ffb2c4791461045e578063ffd49c8414610499576100f3565b8063ce7c2ac214610323578063d0e30db014610396578063e2d2e219146103a0578063edf35253146103cb576100f3565b80633a98ef39116100c65780633a98ef39146102285780634fab0ae8146102535780635e6056bb1461027e578063997664d7146102f8576100f3565b806311ce023d146100f857806314b6ca961461012357806328fd31981461017e5780632d48e896146101e3575b600080fd5b34801561010457600080fd5b5061010d6104c4565b6040518082815260200191505060405180910390f35b34801561012f57600080fd5b5061017c6004803603604081101561014657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104ca565b005b34801561018a57600080fd5b506101cd600480360360208110156101a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610792565b6040518082815260200191505060405180910390f35b3480156101ef57600080fd5b506102266004803603604081101561020657600080fd5b8101908080359060200190929190803590602001909291905050506108ac565b005b34801561023457600080fd5b5061023d610959565b6040518082815260200191505060405180910390f35b34801561025f57600080fd5b5061026861095f565b6040518082815260200191505060405180910390f35b34801561028a57600080fd5b506102cd600480360360208110156102a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610965565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561030457600080fd5b5061030d610a06565b6040518082815260200191505060405180910390f35b34801561032f57600080fd5b506103726004803603602081101561034657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a0c565b60405180848152602001838152602001828152602001935050505060405180910390f35b61039e610a36565b005b3480156103ac57600080fd5b506103b5610e98565b6040518082815260200191505060405180910390f35b3480156103d757600080fd5b5061041a600480360360208110156103ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e9e565b005b34801561042857600080fd5b50610431610eaa565b6040518082815260200191505060405180910390f35b34801561045357600080fd5b5061045c610eb0565b005b34801561046a57600080fd5b506104976004803603602081101561048157600080fd5b8101908080359060200190929190505050610ebb565b005b3480156104a557600080fd5b506104ae611088565b6040518082815260200191505060405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461052257600080fd5b61052b8261108e565b60008111801561057d57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156105905761058b826113a9565b6105f2565b6000811480156105e257506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156105f1576105f082611458565b5b5b61065b8161064d600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461163190919063ffffffff16565b61167b90919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506106f3600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611703565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055507f465bc1e774b3c331b04932a22f9781dbb864defe943d70548ba9b8af6c528b5c8282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156107e757600090506108a7565b6000610834600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611703565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905080821161088f576000925050506108a7565b6108a2818361163190919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461090457600080fd5b81600d8190555080600e819055507f4bee245ad45dacfa3feb4cc8a61ace735c47b485fb8a399ce9e3f6c87aade418600d54600e54604051808381526020018281526020019250505060405180910390a15050565b60085481565b600e5481565b600080600080600854600a54600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015493509350935093509193509193565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506040513d6020811015610aeb57600080fd5b810190808051906020019092919050505090506000600267ffffffffffffffff81118015610b1857600080fd5b50604051908082528060200260200182016040528015610b475781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610b7a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610be457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610cdc578082015181840152602081019050610cc1565b50505050905001955050505050506000604051808303818588803b158015610d0357600080fd5b505af1158015610d17573d6000803e3d6000fd5b50505050506000610df483600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610dab57600080fd5b505afa158015610dbf573d6000803e3d6000fd5b505050506040513d6020811015610dd557600080fd5b810190808051906020019092919050505061163190919063ffffffff16565b9050610e0b8160095461167b90919063ffffffff16565b600981905550610e4e610e3d600854610e2f84600c5461173590919063ffffffff16565b6117bb90919063ffffffff16565b600b5461167b90919063ffffffff16565b600b819055507fa3af609bf46297028ce551832669030f9effef2b02606d02cbbcc40fe6b47c553482604051808381526020018281526020019250505060405180910390a1505050565b600b5481565b610ea78161108e565b50565b600a5481565b610eb93361108e565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f1357600080fd5b600060048054905090506000811415610f2c5750611085565b6000805a90506000805b8584108015610f4457508482105b156110365784600f5410610f5b576000600f819055505b610f9d6004600f5481548110610f6d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611805565b15610fed57610fe46004600f5481548110610fb457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661108e565b80806001019150505b6110126110035a8561163190919063ffffffff16565b8561167b90919063ffffffff16565b93505a9250600f600081548092919060010191905055508180600101925050610f36565b7f96b82f6a439ac2d3939f479dd110e1915927d68eac70cf39a47cf294d53234ee8282600f5460405180848152602001838152602001828152602001935050505060405180910390a150505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156110de576113a6565b60006110e982610792565b905060008111156113a45761110981600a5461167b90919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111a257600080fd5b505af11580156111b6573d6000803e3d6000fd5b505050506040513d60208110156111cc57600080fd5b81019080805190602001909291905050505042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061127781600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461167b90919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611308600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611703565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055507f33ad5d6b2a46b5457e0d36286a2686a0390b0821dedbbdf8dcdcda64f4782c688282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60046001600480549050038154811061146d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106114e457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546005600060046001600480549050038154811061158557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060048054806115f957fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061167383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611869565b905092915050565b6000808284019050838110156116f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061172e600c54611720600b548561173590919063ffffffff16565b6117bb90919063ffffffff16565b9050919050565b60008083141561174857600090506117b5565b600082840290508284828161175957fe5b04146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806119f06021913960400191505060405180910390fd5b809150505b92915050565b60006117fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611929565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011080156118625750600e5461186083610792565b115b9050919050565b6000838311158290611916576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118db5780820151818401526020810190506118c0565b50505050905090810190601f1680156119085780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561199a57808201518184015260208101905061197f565b50505050905090810190601f1680156119c75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816119e157fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212205240055a8c7e2ee848b4351794e5b538711bc8379a37428487c9d17df74df62a64736f6c63430007060033

Deployed Bytecode

0x6080604052600436106102975760003560e01c8063998a6b5f1161015a578063db8d55f1116100c1578063f2fde38b1161007a578063f2fde38b14610ff3578063f708a64f14611044578063f84ba65d146110a1578063f887ea40146110fe578063f9207c1d1461113f578063fe9fbb801461117a5761029e565b8063db8d55f114610ded578063dd62ed3e14610e44578063df20fd4914610ec9578063e96fada214610f10578063f0b37c0414610f51578063f1f3bca314610fa25761029e565b8063bfe1092811610113578063bfe1092814610c08578063c15fc5ab14610c49578063ca33e64c14610ca6578063cb213c1214610ce7578063d7c0103214610d1b578063dab84ee714610dac5761029e565b8063998a6b5f14610a42578063a8aa1b3114610a89578063a9059cbb14610aca578063b6a5d7de14610b3b578063b9f1455714610b8c578063bf56b37114610bdd5761029e565b806356f965d7116101fe5780637880aadc116101b75780637880aadc146108c95780637d1db4a51461090457806382247ec01461092f578063893d20e81461095a5780638a4068dd1461099b57806395d89b41146109b25761029e565b806356f965d7146106e3578063571ac8b0146107335780635c85974f1461079a5780635df45a37146107d5578063658d4b7f1461080757806370a08231146108645761029e565b80631d54613d116102505780631d54613d146104de57806323b872dd1461053b5780632d48e896146105cc5780632f54bf6e14610611578063313ce5671461067857806354200d6f146106a65761029e565b8063048c7baf146102a357806306fdde03146102fe578063095ea7b31461038e578063113f49a2146103ff57806318160ddd1461043a5780631ba8eee7146104655761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102fc600480360360808110156102c657600080fd5b810190808035151590602001909291908035906020019092919080359060200190929190803590602001909291905050506111e1565b005b34801561030a57600080fd5b506103136112f1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610353578082015181840152602081019050610338565b50505050905090810190601f1680156103805780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039a57600080fd5b506103e7600480360360408110156103b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061132e565b60405180821515815260200191505060405180910390f35b34801561040b57600080fd5b506104386004803603602081101561042257600080fd5b8101908080359060200190929190505050611420565b005b34801561044657600080fd5b5061044f6114a7565b6040518082815260200191505060405180910390f35b34801561047157600080fd5b506104dc600480360360e081101561048857600080fd5b810190808035151590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506114b1565b005b3480156104ea57600080fd5b506105396004803603604081101561050157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611655565b005b34801561054757600080fd5b506105b46004803603606081101561055e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611782565b60405180821515815260200191505060405180910390f35b3480156105d857600080fd5b5061060f600480360360408110156105ef57600080fd5b810190808035906020019092919080359060200190929190505050611982565b005b34801561061d57600080fd5b506106606004803603602081101561063457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a96565b60405180821515815260200191505060405180910390f35b34801561068457600080fd5b5061068d611aef565b604051808260ff16815260200191505060405180910390f35b3480156106b257600080fd5b506106e1600480360360208110156106c957600080fd5b81019080803515159060200190929190505050611af8565b005b3480156106ef57600080fd5b506106f8611bc9565b604051808715158152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561073f57600080fd5b506107826004803603602081101561075657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c05565b60405180821515815260200191505060405180910390f35b3480156107a657600080fd5b506107d3600480360360208110156107bd57600080fd5b8101908080359060200190929190505050611c38565b005b3480156107e157600080fd5b506107ea611d0f565b604051808381526020018281526020019250505060405180910390f35b34801561081357600080fd5b506108626004803603604081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611d20565b005b34801561087057600080fd5b506108b36004803603602081101561088757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e4d565b6040518082815260200191505060405180910390f35b3480156108d557600080fd5b506108de611e96565b604051808415158152602001838152602001828152602001935050505060405180910390f35b34801561091057600080fd5b50610919611ebc565b6040518082815260200191505060405180910390f35b34801561093b57600080fd5b50610944611ec2565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611ec8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109a757600080fd5b506109b0611ef1565b005b3480156109be57600080fd5b506109c7612070565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a075780820151818401526020810190506109ec565b50505050905090810190601f168015610a345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a4e57600080fd5b50610a8760048036036040811015610a6557600080fd5b81019080803590602001909291908035151590602001909291905050506120ad565b005b348015610a9557600080fd5b50610a9e61219e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ad657600080fd5b50610b2360048036036040811015610aed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121c4565b60405180821515815260200191505060405180910390f35b348015610b4757600080fd5b50610b8a60048036036020811015610b5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121d9565b005b348015610b9857600080fd5b50610bdb60048036036020811015610baf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122fb565b005b348015610be957600080fd5b50610bf26123d1565b6040518082815260200191505060405180910390f35b348015610c1457600080fd5b50610c1d6123d7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c5557600080fd5b50610ca460048036036040811015610c6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506123fd565b005b348015610cb257600080fd5b50610cbb612601565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cf357600080fd5b50610cfc612627565b6040518083151581526020018281526020019250505060405180910390f35b348015610d2757600080fd5b50610daa60048036036060811015610d3e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612645565b005b348015610db857600080fd5b50610dc1612811565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610df957600080fd5b50610e02612837565b60405180881515815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b348015610e5057600080fd5b50610eb360048036036040811015610e6757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061287b565b6040518082815260200191505060405180910390f35b348015610ed557600080fd5b50610f0e60048036036040811015610eec57600080fd5b8101908080351515906020019092919080359060200190929190505050612902565b005b348015610f1c57600080fd5b50610f256129e3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f5d57600080fd5b50610fa060048036036020811015610f7457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a09565b005b348015610fae57600080fd5b50610fdd60048036036020811015610fc557600080fd5b81019080803515159060200190929190505050612b2c565b6040518082815260200191505060405180910390f35b348015610fff57600080fd5b506110426004803603602081101561101657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b84565b005b34801561105057600080fd5b5061109f6004803603604081101561106757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612ce6565b005b3480156110ad57600080fd5b506110fc600480360360408110156110c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613047565b005b34801561110a57600080fd5b50611113613174565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561114b57600080fd5b506111786004803603602081101561116257600080fd5b810190808035906020019092919050505061319a565b005b34801561118657600080fd5b506111c96004803603602081101561119d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061322b565b60405180821515815260200191505060405180910390f35b6111ea3361322b565b61125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b83602060006101000a81548160ff0219169083151502179055508260218190555060006022819055508160238190555080602481905550436025819055507f07e4a4dc3e8013db5de426f27688d245ba84f9f9195eed42e7a94acb0a565b6f8484848460405180851515815260200184815260200183815260200182815260200194505050505060405180910390a150505050565b60606040518060400160405280600881526020017f464f4d4f484f444c000000000000000000000000000000000000000000000000815250905090565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6114293361322b565b61149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6114a481613281565b50565b6000600554905090565b6114ba3361322b565b61152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b86600f60006101000a81548160ff021916908315150217905550846012819055508360138190555082601481905550816015819055506115a16015546115936014546115856013546012546132e790919063ffffffff16565b6132e790919063ffffffff16565b6132e790919063ffffffff16565b60168190555085601081905550806017819055506001601754816115c157fe5b046115d96010546016546132e790919063ffffffff16565b106115e357600080fd5b7f76d099a416dfc2ebb98aadbbac897c0d02a441d0c4fb2e3a9fdf6414d6dcfea98787878787878760405180881515815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a150505050505050565b61165e3361322b565b6116d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f463f81492419927b6b1aef7271d6d7da08fb28638f175f3f7961b1571911f0408282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461196e576118ed826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336f9092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61197984848461342f565b90509392505050565b61198b3361322b565b6119fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b611b013361322b565b611b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600f60016101000a81548160ff0219169083151502179055507f075af1ef3c1829076b56416deceff9df2103194b5dfbf756f8557478b494f7ff8160405180821515815260200191505060405180910390a150565b600080600080600080602060009054906101000a900460ff16602154602254602354602454602554955095509550955095509550909192939495565b6000611c31827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61132e565b9050919050565b611c413361322b565b611cb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6298968060055481611cc157fe5b04811015611cce57600080fd5b806006819055507fa53407ff336a78b145e1a297adce2a5d7a54e6c31d13b4e69e04aad80b07b44b816040518082815260200191505060405180910390a150565b600080601b54601c54915091509091565b611d293361322b565b611d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4d5771454588f51370a8a2e7e151354b6de0dc3159b14821b4ad76bc04c28bc78282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806000600f60019054906101000a900460ff16601154602a54925092509250909192565b60065481565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611efa3361322b565b611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600554602854016005819055508060285401600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6028546040518082815260200191505060405180910390a350565b60606040518060400160405280600281526020017f4648000000000000000000000000000000000000000000000000000000000000815250905090565b6120b63361322b565b612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6298968082111561213857600080fd5b8160278190555080602660146101000a81548160ff0219169083151502179055507f5fdd419a37de0633d9df0f25b1b1f9a77e5794e82e87c24bc9ded94c0990b17682826040518083815260200182151581526020019250505060405180910390a15050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006121d133848461342f565b905092915050565b6121e233611a96565b612254576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fdc84e3a4c83602050e3865df792a4e6800211a79ac60db94e703a820ce89292481604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6123043361322b565b612376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601f5481565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124063361322b565b612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b801561255657426312cc03004201116124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f55736572207761732070757420696e206120636167652e00000000000000000081525060200191505060405180910390fd5b6001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125a6565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b7ffc70dcce81b5afebab40f1a9a0fe597f9097cb179cb4508e875b7b166838f88d8282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080602960009054906101000a900460ff16602a54915091509091565b61264e3361322b565b6126c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b82601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f12b4cfbea7a8dac3b859f7b88ff33db6082e4c6bb29a58b3d8edbd58ed742028838383604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000600f60009054906101000a900460ff16601254601354601454601554601054601754965096509650965096509650965090919293949596565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61290b3361322b565b61297d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b81602960006101000a81548160ff02191690831515021790555080602a819055507f30e0f7c488b6c70123097f13cf387e140b0e0b8c9d9e3473e502f35b035d377c82826040518083151581526020018281526020019250505060405180910390a15050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612a1233611a96565b612a84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8e4a23d6a5d81f013eca4bc92aeb9214ccafcaebd1f097c350c922d6e19122d581604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000436001601f540110612b5757612b506001601754613c0490919063ffffffff16565b9050612b7f565b81612b6457601654612b7c565b612b7b6010546016546132e790919063ffffffff16565b5b90505b919050565b612b8d33611a96565b612bff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612cef3361322b565b612d61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612deb5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612df457600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612f0257602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612ee557600080fd5b505af1158015612ef9573d6000803e3d6000fd5b50505050612fed565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612fd457600080fd5b505af1158015612fe8573d6000803e3d6000fd5b505050505b7e8548b19959a911110b36c03f6148fa56fbcc2ce2553abf33112aa00bbdfd6a8282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b6130503361322b565b6130c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1fc1cdd7520f99d4b4715966557867ae295b281f90d30b3631bae054b7f196c8282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6131a33361322b565b613215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b613228670de0b6b3a76400008202613281565b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6132ad81600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613c4e565b7fd33075670012f1689703c1e45a2b858dbe814a49e78c19fa053e181156e48069816040518082815260200191505060405180910390a150565b600080828401905083811015613365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600083831115829061341c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133e15780820151818401526020810190506133c6565b50505050905090810190601f16801561340e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000801515600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146134f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f53656e6465722069732062616e6e65640000000000000000000000000000000081525060200191505060405180910390fd5b60001515600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146135bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f526563697069656e742069732062616e6e65640000000000000000000000000081525060200191505060405180910390fd5b602b60009054906101000a900460ff16156135e3576135dc848484613e85565b9050613bfd565b6135ec84614058565b6135f684836140e5565b61360083836141b5565b6136086142c6565b156136165761361561439d565b5b61361e614cb8565b1561362c5761362b614d62565b5b613634614dde565b15801561368e5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156136e8576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116136df57600080fd5b6136e7614deb565b5b613771826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336f9092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006137bf85614e3b565b6137c957826137d5565b6137d4858585614eaa565b5b905061382981600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e790919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139ab57602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561398f57600080fd5b505af19250505080156139a0575060015b6139a9576139aa565b5b5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613aea57602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613ace57600080fd5b505af1925050508015613adf575060015b613ae857613ae9565b5b5b602660149054906101000a900460ff1615613b9257602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796027546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613b7657600080fd5b505af1925050508015613b87575060015b613b9057613b91565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b6000613c4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061336f565b905092915050565b6001602b60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81118015613c8357600080fd5b50604051908082528060200260200182016040528015613cb25781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110613ce557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613d2d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613e25578082015181840152602081019050613e0a565b50505050905001955050505050506000604051808303818588803b158015613e4c57600080fd5b505af1158015613e60573d6000803e3d6000fd5b5050505050506000602b60006101000a81548160ff0219169083151502179055505050565b6000613f10826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336f9092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fa582600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e790919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b614060614dde565b80614070575061406f8161322b565b5b6140e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5072652d4c61756e63682050726f74656374696f6e000000000000000000000081525060200191505060405180910390fd5b50565b6006548111158061413f5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6141b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5458204c696d697420457863656564656400000000000000000000000000000081525060200191505060405180910390fd5b5050565b60075481600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011115806142505750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6142c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4d61782077616c6c65742065786365656465640000000000000000000000000081525060200191505060405180910390fd5b5050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156143335750602b60009054906101000a900460ff16155b801561434b5750602960009054906101000a900460ff165b80156143985750602a54600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602b60006101000a81548160ff021916908315150217905550602a54601154101580156143d85750600f60019054906101000a900460ff165b156147ba576143f4602a54601154613c0490919063ffffffff16565b60118190555060006144126002602a5461510b90919063ffffffff16565b90506000600267ffffffffffffffff8111801561442e57600080fd5b5060405190808252806020026020018201604052801561445d5781602001602082028036833780820191505090505b509050308160008151811061446e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106144d857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156145db5780820151818401526020810190506145c0565b505050509050019650505050505050600060405180830381600087803b15801561460457600080fd5b505af1158015614618573d6000803e3d6000fd5b5050505060006146318247613c0490919063ffffffff16565b9050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823087600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561471f57600080fd5b505af1158015614733573d6000803e3d6000fd5b50505050506040513d606081101561474a57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068185604051808381526020018281526020019250505060405180910390a150505050614c9b565b6000602a5490506000600267ffffffffffffffff811180156147db57600080fd5b5060405190808252806020026020018201604052801561480a5781602001602082028036833780820191505090505b509050308160008151811061481b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061488557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561498857808201518184015260208101905061496d565b505050509050019650505050505050600060405180830381600087803b1580156149b157600080fd5b505af11580156149c5573d6000803e3d6000fd5b5050505060006149de8247613c0490919063ffffffff16565b90506000614a0b6016546149fd6013548561515590919063ffffffff16565b61510b90919063ffffffff16565b90506000614a38601654614a2a6014548661515590919063ffffffff16565b61510b90919063ffffffff16565b90506000614a65601654614a576015548761515590919063ffffffff16565b61510b90919063ffffffff16565b9050602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015614ad157600080fd5b505af193505050508015614ae3575060015b614aec57614aed565b5b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836298968090604051806000019050600060405180830381858888f193505050503d8060008114614b75576040519150601f19603f3d011682016040523d82523d6000602084013e614b7a565b606091505b505090508015614ba057614b9983601b546132e790919063ffffffff16565b601b819055505b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826298968090604051806000019050600060405180830381858888f193505050503d8060008114614c26576040519150601f19603f3d011682016040523d82523d6000602084013e614c2b565b606091505b5050809150508015614c5357614c4c82601c546132e790919063ffffffff16565b601c819055505b7f05ab84b321981d7d9a13402e494604c50821bcb5f2400d128fa06cd6451113d48886604051808381526020018281526020019250505060405180910390a150505050505050505b6000602b60006101000a81548160ff021916908315150217905550565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015614d255750602b60009054906101000a900460ff16155b8015614d3d5750602060009054906101000a900460ff165b8015614d4f5750436024546025540111155b8015614d5d57506023544710155b905090565b614d90602354600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613c4e565b43602581905550614dae6023546022546132e790919063ffffffff16565b6022819055506021546022541115614ddc576000602060006101000a81548160ff0219169083151502179055505b565b600080601f541415905090565b43601f819055506001602660146101000a81548160ff0219169083151502179055507f02ac8168caf2f254b394bd39e19417c5c28124ab89c9bc2d44921b19808e266960405160405180910390a1565b6000600f60009054906101000a900460ff168015614ea35750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9050919050565b600080614f2c601754614f1e614f0f601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614612b2c565b8661515590919063ffffffff16565b61510b90919063ffffffff16565b9050614f8081600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e790919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156150915750600f60019054906101000a900460ff165b156150ee576150e76150d66150b36010546016546132e790919063ffffffff16565b6150c86010548561515590919063ffffffff16565b61510b90919063ffffffff16565b6011546132e790919063ffffffff16565b6011819055505b6151018184613c0490919063ffffffff16565b9150509392505050565b600061514d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506151db565b905092915050565b60008083141561516857600090506151d5565b600082840290508284828161517957fe5b04146151d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152a26021913960400191505060405180910390fd5b809150505b92915050565b60008083118290615287576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561524c578082015181840152602081019050615231565b50505050905090810190601f1680156152795780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161529357fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e1ad9594f1cd0247a126dbfaf94025c36d510f4e697478a8f94dbad64b627fdf64736f6c63430007060033

Deployed Bytecode Sourcemap

12739:18741:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24494:435;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16107:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16533:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23475:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15837:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26331:799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25951:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17045:364;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27939:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3543:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15931:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27769:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29315:345;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16757:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25172:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28399:121;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;25775:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16277:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29668:217;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13198:47;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13261:45;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16193:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28994:313;;;;;;;;;;;;;:::i;:::-;;16017:84;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28132:259;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14201:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16881:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3148:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28891:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14229:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14477:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28525:358;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13995:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29893:161;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;27138:399;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14080:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30062:317;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16388:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27545:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14038:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3351:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19767:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3947:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25367:400;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26143:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14170:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23578:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3719:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24494:435;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24641:8:::1;24620:18;;:29;;;;;;;;;;;;;;;;;;24677:4;24660:14;:21;;;;24717:1;24692:22;:26;;;;24749:7;24729:17;:27;;;;24792:7;24767:22;:32;;;;24833:12;24810:20;:35;;;;24861:60;24888:8;24898:4;24904:7;24913;24861:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24494:435:::0;;;;:::o;16107:80::-;16155:13;16179:5;;;;;;;;;;;;;;;;;16172:12;;16107:80;:::o;16533:216::-;16608:4;16660:6;16625:11;:23;16637:10;16625:23;;;;;;;;;;;;;;;:32;16649:7;16625:32;;;;;;;;;;;;;;;:41;;;;16703:7;16682:37;;16691:10;16682:37;;;16712:6;16682:37;;;;;;;;;;;;;;;;;;16737:4;16730:11;;16533:216;;;;:::o;23475:91::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23542:16:::1;23551:6;23542:8;:16::i;:::-;23475:91:::0;:::o;15837:88::-;15892:7;15910:12;;15903:19;;15837:88;:::o;26331:799::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26618:8:::1;26605:10;;:21;;;;;;;;;;;;;;;;;;26650:11;26637:10;:24;;;;26688:14;26672:13;:30;;;;26728:13;26713:12;:28;;;;26761:7;26752:6;:16;;;;26790:59;26842:6;;26790:47;26824:12;;26790:29;26805:13;;26790:10;;:14;;:29;;;;:::i;:::-;:33;;:47;;;;:::i;:::-;:51;;:59;;;;:::i;:::-;26779:8;:70;;;;26875:13;26860:12;:28;;;;26916:15;26899:14;:32;;;;26996:1;26981:14;;:16;;;;;;26952:26;26965:12;;26952:8;;:12;;:26;;;;:::i;:::-;:45;26944:54;;;::::0;::::1;;27016:106;27028:8;27038:13;27053:11;27066:14;27082:13;27097:7;27106:15;27016:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26331:799:::0;;;;;;;:::o;25951:184::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26067:6:::1;26039:17;:25;26057:6;26039:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;26089:38;26112:6;26120;26089:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;25951:184:::0;;:::o;17045:364::-;17145:4;17208:2;17165:11;:19;17177:6;17165:19;;;;;;;;;;;;;;;:31;17185:10;17165:31;;;;;;;;;;;;;;;;:46;17162:180;;17261:69;17297:6;17261:69;;;;;;;;;;;;;;;;;:11;:19;17273:6;17261:19;;;;;;;;;;;;;;;:31;17281:10;17261:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;17227:11;:19;17239:6;17227:19;;;;;;;;;;;;;;;:31;17247:10;17227:31;;;;;;;;;;;;;;;:103;;;;17162:180;17361:40;17375:6;17383:9;17394:6;17361:13;:40::i;:::-;17354:47;;17045:364;;;;;:::o;27939:185::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28051:11:::1;;;;;;;;;;;:35;;;28087:10;28099:16;28051:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27939:185:::0;;:::o;3543:103::-;3598:4;3633:5;;;;;;;;;;;3622:16;;:7;:16;;;3615:23;;3543:103;;;:::o;15931:80::-;15983:5;13122:1;15992:16;;15931:80;:::o;27769:162::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27869:8:::1;27848:18;;:29;;;;;;;;;;;;;;;;;;27895:28;27914:8;27895:28;;;;;;;;;;;;;;;;;;;;27769:162:::0;:::o;29315:345::-;29372:4;29377:7;29385;29393;29401;29409;29453:18;;;;;;;;;;;29486:14;;29515:22;;29552:17;;29584:22;;29621:20;;29431:221;;;;;;;;;;;;29315:345;;;;;;:::o;16757:116::-;16812:4;16836:29;16844:7;16861:2;16836:7;:29::i;:::-;16829:36;;16757:116;;;:::o;25172:187::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25272:8:::1;25257:12;;:23;;;;;;25247:6;:33;;25239:42;;;::::0;::::1;;25307:6;25292:12;:21;;;;25329:22;25344:6;25329:22;;;;;;;;;;;;;;;;;;25172:187:::0;:::o;28399:121::-;28452:7;28461;28489:13;;28504:7;;28481:31;;;;28399:121;;:::o;25775:168::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25881:6:::1;25859:11;:19;25871:6;25859:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;25903:32;25920:6;25928;25903:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;25775:168:::0;;:::o;16277:105::-;16343:7;16361:9;:18;16371:7;16361:18;;;;;;;;;;;;;;;;16354:25;;16277:105;;;:::o;29668:217::-;29725:4;29730:7;29738;29782:18;;;;;;;;;;;29815:23;;29853:13;;29760:117;;;;;;29668:217;;;:::o;13198:47::-;;;;:::o;13261:45::-;;;;:::o;16193:78::-;16245:7;16263:5;;;;;;;;;;;16256:12;;16193:78;:::o;28994:313::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29047:22:::1;29072:9;:21;29082:10;29072:21;;;;;;;;;;;;;;;;29047:46;;29129:12;;29119:7;;:22;29104:12;:37;;;;29186:14;29176:7;;:24;29152:9;:21;29162:10;29152:21;;;;;;;;;;;;;;;:48;;;;29266:10;29218:81;;29249:1;29218:81;;;29291:7;;29218:81;;;;;;;;;;;;;;;;;;3073:1;28994:313::o:0;16017:84::-;16067:13;16091:7;;;;;;;;;;;;;;;;;16084:14;;16017:84;:::o;28132:259::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28242:8:::1;28235:3;:15;;28227:24;;;::::0;::::1;;28279:3;28262:14;:20;;;;28312:10;28293:16;;:29;;;;;;;;;;;;;;;;;;28340:43;28367:3;28372:10;28340:43;;;;;;;;;;;;;;;;;;;;;;;;;;28132:259:::0;;:::o;14201:19::-;;;;;;;;;;;;;:::o;16881:156::-;16961:4;16985:44;16999:10;17011:9;17022:6;16985:13;:44::i;:::-;16978:51;;16881:156;;;;:::o;3148:125::-;2860:19;2868:10;2860:7;:19::i;:::-;2852:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3230:4:::1;3208:14:::0;:19:::1;3223:3;3208:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3250:15;3261:3;3250:15;;;;;;;;;;;;;;;;;;;;3148:125:::0;:::o;28891:93::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28971:5:::1;28951:11;:17;28963:4;28951:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;28891:93:::0;:::o;14229:25::-;;;;:::o;14477:38::-;;;;;;;;;;;;;:::o;28525:358::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28611:6:::1;28607:217;;;28673:15;28661:9;28643:15;:27;:45;28634:82;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28751:4;28731:11;:17;28743:4;28731:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;28607:217;;;28795:11;:17;28807:4;28795:17;;;;;;;;;;;;;;;;28788:24;;;;;;;;;;;28607:217;28839:36;28862:4;28868:6;28839:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;28525:358:::0;;:::o;13995:36::-;;;;;;;;;;;;;:::o;29893:161::-;29947:4;29952:7;29996:11;;;;;;;;;;;30022:13;;29974:72;;;;29893:161;;:::o;27138:399::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27308:22:::1;27284:21;;:46;;;;;;;;;;;;;;;;;;27364:21;27341:20;;:44;;;;;;;;;;;;;;;;;;27413:15;27396:14;;:32;;;;;;;;;;;;;;;;;;27446:83;27466:22;27490:21;27513:15;27446:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27138:399:::0;;;:::o;14080:29::-;;;;;;;;;;;;;:::o;30062:317::-;30104:4;30109:7;30117;30125;30133;30141;30149;30193:10;;;;;;;;;;;30218;;30243:13;;30271:12;;30298:6;;30319:12;;30346:14;;30171:200;;;;;;;;;;;;;;30062:317;;;;;;;:::o;16388:133::-;16472:7;16490:11;:19;16502:6;16490:19;;;;;;;;;;;;;;;:28;16510:7;16490:28;;;;;;;;;;;;;;;;16483:35;;16388:133;;;;:::o;27545:216::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27651:8:::1;27637:11;;:22;;;;;;;;;;;;;;;;;;27686:7;27670:13;:23;;;;27711:42;27735:8;27745:7;27711:42;;;;;;;;;;;;;;;;;;;;;;;;;;27545:216:::0;;:::o;14038:35::-;;;;;;;;;;;;;:::o;3351:130::-;2860:19;2868:10;2860:7;:19::i;:::-;2852:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3435:5:::1;3413:14;:19;3428:3;3413:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;3456:17;3469:3;3456:17;;;;;;;;;;;;;;;;;;;;3351:130:::0;:::o;19767:215::-;19823:7;19864:12;19859:1;19846:10;;:14;:30;19843:67;;19886:21;19905:1;19886:14;;:18;;:21;;;;:::i;:::-;19879:28;;;;19843:67;19927:7;:47;;19966:8;;19927:47;;;19937:26;19950:12;;19937:8;;:12;;:26;;;;:::i;:::-;19927:47;19920:54;;19767:215;;;;:::o;3947:173::-;2860:19;2868:10;2860:7;:19::i;:::-;2852:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4031:3:::1;4023:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;4067:4;4045:14:::0;:19:::1;4060:3;4045:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;4087:25;4108:3;4087:25;;;;;;;;;;;;;;;;;;;;3947:173:::0;:::o;25367:400::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25482:4:::1;25464:23;;:6;:23;;;;:41;;;;;25501:4;;;;;;;;;;;25491:14;;:6;:14;;;;25464:41;25456:50;;;::::0;::::1;;25544:6;25517:16;:24;25534:6;25517:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;25564:6;25561:146;;;25586:11;;;;;;;;;;;:20;;;25607:6;25615:1;25586:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25561:146;;;25648:11;;;;;;;;;;;:20;;;25669:6;25677:9;:17;25687:6;25677:17;;;;;;;;;;;;;;;;25648:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25561:146;25722:37;25744:6;25752;25722:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;25367:400:::0;;:::o;26143:180::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26257:6:::1;26231:15;:23;26247:6;26231:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;26279:36;26300:6;26308;26279:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;26143:180:::0;;:::o;14170:24::-;;;;;;;;;;;;;:::o;23578:104::-;3031:24;3044:10;3031:12;:24::i;:::-;3023:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23645:29:::1;23664:8;23654:6;:19;23645:8;:29::i;:::-;23578:104:::0;:::o;3719:107::-;3775:4;3799:14;:19;3814:3;3799:19;;;;;;;;;;;;;;;;;;;;;;;;;3792:26;;3719:107;;;:::o;23690:116::-;23744:23;23754:6;23762:4;;;;;;;;;;;23744:9;:23::i;:::-;23783:15;23791:6;23783:15;;;;;;;;;;;;;;;;;;23690:116;:::o;185:179::-;243:7;263:9;279:1;275;:5;263:17;;304:1;299;:6;;291:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;355:1;348:8;;;185:179;;;;:::o;516:190::-;602:7;635:1;630;:6;;638:12;622:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;662:9;678:1;674;:5;662:17;;697:1;690:8;;;516:190;;;;;:::o;17417:1339::-;17509:4;17557:5;17534:28;;:11;:19;17546:6;17534:19;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;17526:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17628:5;17602:31;;:11;:22;17614:9;17602:22;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;17594:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17671:6;;;;;;;;;;;17668:63;;;17687:41;17702:6;17710:9;17721:6;17687:14;:41::i;:::-;17680:48;;;;17668:63;17743:21;17757:6;17743:13;:21::i;:::-;17775:28;17788:6;17796;17775:12;:28::i;:::-;17814:35;17831:9;17842:6;17814:16;:35::i;:::-;17865:16;:14;:16::i;:::-;17862:35;;;17884:10;:8;:10::i;:::-;17862:35;17910:19;:17;:19::i;:::-;17907:48;;;17932:20;:18;:20::i;:::-;17907:48;17969:10;:8;:10::i;:::-;17968:11;:32;;;;;17996:4;;;;;;;;;;;17983:17;;:9;:17;;;17968:32;17965:81;;;18031:1;18011:9;:17;18021:6;18011:17;;;;;;;;;;;;;;;;:21;18003:30;;;;;;18035:8;:6;:8::i;:::-;17965:81;18076:53;18098:6;18076:53;;;;;;;;;;;;;;;;;:9;:17;18086:6;18076:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;18056:9;:17;18066:6;18056:17;;;;;;;;;;;;;;;:73;;;;18142:22;18167:21;18181:6;18167:13;:21::i;:::-;:67;;18228:6;18167:67;;;18191:34;18199:6;18207:9;18218:6;18191:7;:34::i;:::-;18167:67;18142:92;;18268:40;18293:14;18268:9;:20;18278:9;18268:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;18245:9;:20;18255:9;18245:20;;;;;;;;;;;;;;;:63;;;;18325:16;:24;18342:6;18325:24;;;;;;;;;;;;;;;;;;;;;;;;;18321:110;;18370:11;;;;;;;;;;;:20;;;18391:6;18399:9;:17;18409:6;18399:17;;;;;;;;;;;;;;;;18370:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18366:63;;;;;;18321:110;18445:16;:27;18462:9;18445:27;;;;;;;;;;;;;;;;;;;;;;;;;18441:118;;18492:11;;;;;;;;;;;:20;;;18513:9;18524;:20;18534:9;18524:20;;;;;;;;;;;;;;;;18492:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18488:69;;;;;;18441:118;18572:16;;;;;;;;;;;18569:97;;;18608:11;;;;;;;;;;;:19;;;18628:14;;18608:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18604:51;;;;;;18569:97;18700:9;18683:43;;18692:6;18683:43;;;18711:14;18683:43;;;;;;;;;;;;;;;;;;18744:4;18737:11;;;17417:1339;;;;;;:::o;372:136::-;430:7;457:43;461:1;464;457:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;450:50;;372:136;;;;:::o;24125:361::-;14788:4;14779:6;;:13;;;;;;;;;;;;;;;;;;24201:21:::1;24239:1;24225:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24201:40;;24262:4;;;;;;;;;;;24252;24257:1;24252:7;;;;;;;;;;;;;:14;;;;;;;;;::::0;::::1;24295:4;24277;24282:1;24277:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;24313:6;;;;;;;;;;;:57;;;24378:6;24400:1;24416:4;24435:2;24452:15;24313:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;14794:1;14806:5:::0;14797:6;;:14;;;;;;;;;;;;;;;;;;24125:361;;:::o;18764:330::-;18857:4;18894:53;18916:6;18894:53;;;;;;;;;;;;;;;;;:9;:17;18904:6;18894:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;18874:9;:17;18884:6;18874:17;;;;;;;;;;;;;;;:73;;;;18981:32;19006:6;18981:9;:20;18991:9;18981:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;18958:9;:20;18968:9;18958:20;;;;;;;;;;;;;;;:55;;;;19046:9;19029:35;;19038:6;19029:35;;;19057:6;19029:35;;;;;;;;;;;;;;;;;;19082:4;19075:11;;18764:330;;;;;:::o;19309:140::-;19381:10;:8;:10::i;:::-;:34;;;;19395:20;19408:6;19395:12;:20::i;:::-;19381:34;19373:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19309:140;:::o;19457:166::-;19554:12;;19544:6;:22;;:49;;;;19570:15;:23;19586:6;19570:23;;;;;;;;;;;;;;;;;;;;;;;;;19544:49;19536:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19457:166;;:::o;19102:199::-;19227:10;;19217:6;19196:9;:20;19206:9;19196:20;;;;;;;;;;;;;;;;:27;:41;;:73;;;;19241:17;:28;19259:9;19241:28;;;;;;;;;;;;;;;;;;;;;;;;;19196:73;19188:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19102:199;;:::o;20563:::-;20612:4;20652;;;;;;;;;;;20638:18;;:10;:18;;;;:38;;;;;20670:6;;;;;;;;;;;20669:7;20638:38;:62;;;;;20689:11;;;;;;;;;;;20638:62;:116;;;;;20741:13;;20713:9;:24;20731:4;20713:24;;;;;;;;;;;;;;;;:41;;20638:116;20631:123;;20563:199;:::o;20770:2407::-;14788:4;14779:6;;:13;;;;;;;;;;;;;;;;;;20851::::1;;20824:23;;:40;;:62;;;;;20868:18;;;;;;;;;;;20824:62;20821:2349;;;20928:42;20956:13;;20928:23;;:27;;:42;;;;:::i;:::-;20902:23;:68;;;;20987:23;21013:20;21031:1;21013:13;;:17;;:20;;;;:::i;:::-;20987:46;;21050:21;21088:1;21074:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21050:40;;21123:4;21105;21110:1;21105:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;21153:4;;;;;;;;;;;21143;21148:1;21143:7;;;;;;;;;;;;;:14;;;;;;;;;::::0;::::1;21174:21;21198;21174:45;;21234:6;;;;;;;;;;;:57;;;21310:15;21344:1;21364:4;21395;21419:15;21234:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21468:17;21488:40;21514:13;21488:21;:25;;:40;;;;:::i;:::-;21468:60;;21543:6;;;;;;;;;;;:22;;;21573:9;21610:4;21634:15;21668:1;21688::::0;21708:21:::1;;;;;;;;;;;21748:15;21543:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21800:39;21812:9;21823:15;21800:39;;;;;;;;;;;;;;;;;;;;;;;;20821:2349;;;;;;;21886:20;21909:13;;21886:36;;21937:21;21975:1;21961:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21937:40;;22010:4;21992;21997:1;21992:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;22040:4;;;;;;;;;;;22030;22035:1;22030:7;;;;;;;;;;;;;:14;;;;;;;;;::::0;::::1;22061:21;22085;22061:45;;22121:6;;;;;;;;;;;:57;;;22197:12;22228:1;22248:4;22279;22303:15;22121:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22350:17;22370:40;22396:13;22370:21;:25;;:40;;;;:::i;:::-;22350:60;;22425:27;22455:42;22488:8;;22455:28;22469:13;;22455:9;:13;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;22425:72;;22512:26;22541:41;22573:8;;22541:27;22555:12;;22541:9;:13;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;22512:70;;22597:20;22620:35;22646:8;;22620:21;22634:6;;22620:9;:13;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;22597:58;;22676:11;;;;;;;;;;;:19;;;22703;22676:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22672:65;;;;;;22754:12;22780:20;;;;;;;;;;;22772:34;;22814:18;22839:8;22772:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22753:99;;;22872:7;22869:69;;;22898:37;22916:18;22898:13;;:17;;:37;;;;:::i;:::-;22882:13;:53;;;;22869:69;22976:14;;;;;;;;;;;22968:28;;23004:12;23023:8;22968:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22954:82;;;;;23056:7;23053:51;;;23076:25;23088:12;23076:7;;:11;;:25;;;;:::i;:::-;23066:7;:35;;;;23053:51;23125:33;23134:12;23148:9;23125:33;;;;;;;;;;;;;;;;;;;;;;;;20821:2349;;;;;;;;;14806:5:::0;14797:6;;:14;;;;;;;;;;;;;;;;;;20770:2407::o;23185:282::-;23237:4;23275;;;;;;;;;;;23261:18;;:10;:18;;;;:38;;;;;23293:6;;;;;;;;;;;23292:7;23261:38;:69;;;;;23312:18;;;;;;;;;;;23261:69;:143;;;;;23392:12;23366:22;;23343:20;;:45;:61;;23261:143;:198;;;;;23442:17;;23417:21;:42;;23261:198;23254:205;;23185:282;:::o;23814:303::-;23864:34;23874:17;;23893:4;;;;;;;;;;;23864:9;:34::i;:::-;23932:12;23909:20;:35;;;;23980:45;24007:17;;23980:22;;:26;;:45;;;;:::i;:::-;23955:22;:70;;;;24064:14;;24039:22;;:39;24036:74;;;24102:5;24081:18;;:26;;;;;;;;;;;;;;;;;;24036:74;23814:303::o;24937:90::-;24980:4;25018:1;25004:10;;:15;;24997:22;;24937:90;:::o;25035:129::-;25086:12;25073:10;:25;;;;25128:4;25109:16;;:23;;;;;;;;;;;;;;;;;;25148:8;;;;;;;;;;25035:129::o;19631:128::-;19693:4;19717:10;;;;;;;;;;;:34;;;;;19732:11;:19;19744:6;19732:19;;;;;;;;;;;;;;;;;;;;;;;;;19731:20;19717:34;19710:41;;19631:128;;;:::o;19990:565::-;20075:7;20095:17;20115:61;20161:14;;20115:41;20126:29;20150:4;;;;;;;;;;;20138:16;;:8;:16;;;20126:11;:29::i;:::-;20115:6;:10;;:41;;;;:::i;:::-;:45;;:61;;;;:::i;:::-;20095:81;;20214:39;20243:9;20214;:24;20232:4;20214:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;20187:9;:24;20205:4;20187:24;;;;;;;;;;;;;;;:66;;;;20294:4;20269:42;;20278:6;20269:42;;;20301:9;20269:42;;;;;;;;;;;;;;;;;;20339:4;;;;;;;;;;;20327:16;;:8;:16;;;:38;;;;;20347:18;;;;;;;;;;;20327:38;20324:183;;;20407:88;20435:59;20467:26;20480:12;;20467:8;;:12;;:26;;;;:::i;:::-;20435:27;20449:12;;20435:9;:13;;:27;;;;:::i;:::-;:31;;:59;;;;:::i;:::-;20407:23;;:27;;:88;;;;:::i;:::-;20381:23;:114;;;;20324:183;20526:21;20537:9;20526:6;:10;;:21;;;;:::i;:::-;20519:28;;;19990:565;;;;;:::o;970:132::-;1028:7;1055:39;1059:1;1062;1055:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1048:46;;970:132;;;;:::o;714:248::-;772:7;801:1;796;:6;792:47;;;826:1;819:8;;;;792:47;851:9;867:1;863;:5;851:17;;896:1;891;887;:5;;;;;;:10;879:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;953:1;946:8;;;714:248;;;;;:::o;1110:343::-;1196:7;1295:1;1291;:5;1298:12;1283:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1322:9;1338:1;1334;:5;;;;;;1322:17;;1444:1;1437:8;;;1110:343;;;;;:::o

Swarm Source

ipfs://5240055a8c7e2ee848b4351794e5b538711bc8379a37428487c9d17df74df62a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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