ETH Price: $3,293.25 (-3.44%)
Gas: 13 Gwei

Token

Wukoin (WUK)
 

Overview

Max Total Supply

1,000,000,000 WUK

Holders

150 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
968,772.691102 WUK

Value
$0.00
0xbb71f4b8610596a100d79313501a18f61132d92b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Wukoin is the main currency of the Wukong Project - a long term project aiming at becoming the main point of reference for the whole crypto and tech community.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Wukoin

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-06
*/

/**
 * @author The Wukong Project Team
 * @title Wukoin - The erc20 token part of the Wukong Project that starts the crypto revolution
 * 
 * Born to be part of a big project,
 * the Wukoin Token gives holders access to a multitude
 * of present and future services of the Wukong Project's ecosystem.
 *
 * Apart from its utilities, the token comes also with some incredible tokenomics features
 * built right in the source code of its smart contract.
 * To help others, the project and yourself at the same time.
 *
 * **Share**
 * Part of the fees collected by the contract is used for charity initiatives
 * in a collective effort to make the world a better place and bring happiness
 * to its inhabitants.
 *
 * **Expand**
 * Another share of the fees goes to the marketing wallet to fund marketing campaigns,
 * with the purpose of raising people's awareness of the project.
 *
 * **Hold**
 * Even eligible holders benefit from the fees collected in the form of ETH reflections
 * and can claim them on the platform without the need to sell their own tokens: wukoin.wukongproject.com
 *
 * **Community**
 * It's all about YOU, from the beginning. The Wukoin Community fuels, funds and sustain
 * the development, expansion and charitable initiatives of the project by trading, using,
 * sharing Wukoin Tokens, discussing, helping each other and planning initiatives
 * of many kinds.
 *
 * Anti-bot
 * Our contract makes use of a powerful anti-bot system to promote a fair environment.
 * If you use bots/contracts to trade on Wukoin you are hereby declaring your investment in the project a DONATION.
 *
 * Website: wukongproject.com
 * Telegram: t.me/WukongProject
 *
 *
 *                      █▀▀▀▀▀█ ▄▀ ▄██▀█  █▀▀▀▀▀█
 *                      █ ███ █ ▀███▀ ▄▀  █ ███ █
 *                      █ ▀▀▀ █ █▄ ▄ █▀█▀ █ ▀▀▀ █
 *                      ▀▀▀▀▀▀▀ █▄▀ █ █ █ ▀▀▀▀▀▀▀
 *                      ██▄█▄▄▀█  █▄ █▀ ▄ █▀▀ ▀▀▄
 *                      █  ██▀▀▀█▀▀  ▄▀▄ █▀ ▄  ▀▀
 *                      ▀ █▀ ▄▀▄▀ ▄▄█▀▄  ███ █▄▀█
 *                      ▀▄▀▀█ ▀██▀▄ █▄▀ ▄▀▄▀█ ▀▄▀
 *                      ▀▀▀   ▀ ▄██▀▀ █▄█▀▀▀██▀ ▄
 *                      █▀▀▀▀▀█ ▀ ▄▄▄▀ ▀█ ▀ ██▄▀▀
 *                      █ ███ █ ▄▄█ ██▀▄█▀▀███▄▀ 
 *                      █ ▀▀▀ █ ▄▄▀▄▄▄▀██▄▄▀▀▄▀ ▀
 *                      ▀▀▀▀▀▀▀ ▀  ▀▀▀ ▀▀▀ ▀   ▀▀
 *
 *
 * Nullus ad Unum
 * 01100110 01111100 01111001
 * 20220205
 */

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

/**
 * Allows for contract ownership along with multi-address authorization
 */
abstract contract Ownable {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
        emit OwnershipTransferred(owner);
    }

    /**
     * Function modifier to require caller to be contract deployer
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownable: caller is not the owner"); _;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Transfer ownership to new address. Caller must be deployer. Leaves old deployer authorized
     */
    function transferOwnership(address payable addr) public onlyOwner {
        owner = addr;
        emit OwnershipTransferred(owner);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

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

    function 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 IReflector {
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function claimReflection(address shareholder) external;
}

contract Reflector is IReflector {
    using SafeMath for uint256;

    address private _token;
    address private _owner;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    address[] private shareholders;
    mapping (address => uint256) private shareholderIndexes;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalReflections;
    uint256 public totalDistributed;
    uint256 public reflectionsPerShare;
    uint256 private reflectionsPerShareAccuracyFactor = 10 ** 36;

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

    constructor (address owner) {
        _token = msg.sender;
        _owner = owner;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeReflection(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 = getCumulativeReflections(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 amount = msg.value;

        totalReflections = totalReflections.add(amount);
        reflectionsPerShare = reflectionsPerShare.add(reflectionsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }
    
    function distributeReflection(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeReflections(shares[shareholder].amount);
            payable(shareholder).transfer(amount);
        }
    }
    
    function claimReflection(address shareholder) external override onlyToken {
        distributeReflection(shareholder);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalReflections = getCumulativeReflections(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalReflections <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalReflections.sub(shareholderTotalExcluded);
    }

    function getCumulativeReflections(uint256 share) internal view returns (uint256) {
        return share.mul(reflectionsPerShare).div(reflectionsPerShareAccuracyFactor);
    }

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

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
    
    function manualSend(uint256 amount, address holder) external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        payable(holder).transfer(amount > 0 ? amount : contractETHBalance);
    }
}

interface IAntiBotService {
    function scanAddress(address _recipient, address _sender, address _origin) external returns (bool);
    function registerBlock(address _recipient, address _sender, address _origin) external;
}

contract Wukoin is Context, IERC20, Ownable {
    using SafeMath for uint256;

    address private WETH;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    address private ZERO = 0x0000000000000000000000000000000000000000;
    
    // TOKEN
    string private constant  _name = "Wukoin";
    string private constant _symbol = "WUK";
    uint8 private constant _decimals = 9;

    uint256 private _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 private _maxTxAmountBuy = _totalSupply;
    uint256 private _maxTxAmountSell = _totalSupply;
    uint256 private _walletCap = _totalSupply.div(25);

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

    mapping (address => bool) private isFeeExempt;
    mapping (address => bool) private isTxLimitExempt;
    mapping (address => bool) private isReflectionExempt;
    mapping (address => bool) private bots;
    mapping (address => bool) private notBots;

    uint256 private initialBlockLimit = 1;

    uint256 private reflectionFee = 10;
    uint256 private teamFee = 3;
    uint256 private mantraFee = 3;
    uint256 private marketingFee = 2;
    uint256 private totalFee = 18;
    uint256 private feeDenominator = 100;
    
    address private teamReceiver;
    address private mantraReceiver;
    address private marketingReceiver;
    
    // EXCHANGES
    IDEXRouter public router;
    address public pair;
    
    // ANTIBOT
    IAntiBotService private antiBot;
    bool private botBlocker = false;
    bool private botWrecker = true;
    bool private botScanner = true;

    // LAUNCH
    bool private liquidityInitialized = false;
    uint256 public launchedAt;
    uint256 private launchTime = 1760659200;

    Reflector private reflector;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 1000;
    
    bool private isSwapping;
    modifier swapping() { isSwapping = true; _; isSwapping = false; }

    constructor (
        address _owner,
        address _teamWallet,
        address _mantraWallet,
        address _marketingWallet
    ) Ownable(_owner) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        WETH = router.WETH();
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        reflector = new Reflector(_owner);
        
        // AntiBot
        antiBot = IAntiBotService(0xCD5312d086f078D1554e8813C27Cf6C9D1C3D9b3); 

        isFeeExempt[_owner] = true;
        isFeeExempt[_teamWallet] = true;
        isFeeExempt[_mantraWallet] = true;
        isFeeExempt[_marketingWallet] = true;
        
        isTxLimitExempt[_owner] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[_teamWallet] = true;
        isTxLimitExempt[_mantraWallet] = true;
        isTxLimitExempt[_marketingWallet] = true;
        
        isReflectionExempt[pair] = true;
        isReflectionExempt[address(this)] = true;
        isReflectionExempt[DEAD] = true;

        teamReceiver = _teamWallet;
        mantraReceiver = _mantraWallet;
        marketingReceiver = _marketingWallet;

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

    receive() external payable { }
    
    // DEFAULTS
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner; }
    
    // OVERRIDES
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    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]; }

    /**
     * Allow a specific address to spend a specific amount of your tokens
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        require(msg.sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }
    
    /**
     * Allow a specific address to spend an unlimited amount of your tokens
     */
    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }
    
    /**
     * Transfer a certain amount of your tokens to a specific address
     */
    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] != type(uint256).max){
            _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(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(isSwapping){ return _basicTransfer(sender, recipient, amount); }
        
        checkTxLimit(sender, recipient, amount);
        checkWalletCap(sender, recipient, amount);

        if(shouldSwapBack()){ swapBack(); }
        
        if(_isExchangeTransfer(sender, recipient)) {
            require(isOwner(sender) || launched(), "Wen lunch?");
            
            if (botScanner) {
                scanTxAddresses(sender, recipient); //check if sender or recipient is a bot   
            }
            
            if (botBlocker) {
                require(!_isBot(recipient) && !_isBot(sender), "Beep Beep Boop, You're a piece of poop");
            }
        }

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

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

        if(sender != pair && !isReflectionExempt[sender]){ try reflector.setShare(sender, _balances[sender]) {} catch {} }
        if(recipient != pair && !isReflectionExempt[recipient]){ try reflector.setShare(recipient, _balances[recipient]) {} catch {} }

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        sender == pair
            ? require(amount <= _maxTxAmountBuy && block.timestamp >= launchTime.add(1 hours) || amount <= _totalSupply.div(200) || isTxLimitExempt[recipient], "Buy TX Limit Exceeded")
            : require(amount <= _maxTxAmountSell || isTxLimitExempt[sender], "Sell TX Limit Exceeded");
    }
    
    function checkWalletCap(address sender, address recipient, uint256 amount) internal view {
        if (sender == pair && !isTxLimitExempt[recipient]) {
            block.timestamp >= launchTime.add(2 hours)
            ? require(balanceOf(recipient) + amount < _walletCap, "Wallet Capacity Exceeded")
            : require(balanceOf(recipient) + amount < _totalSupply.div(50), "Wallet Capacity Exceeded");
        }
    }
    
    function scanTxAddresses(address sender, address recipient) internal {
        if (antiBot.scanAddress(recipient, pair, tx.origin)) {
            _setBot(recipient, true);
        }
        
        if (antiBot.scanAddress(sender, pair, tx.origin)) {
            _setBot(sender, true);
        }
        antiBot.registerBlock(sender, recipient, tx.origin);   
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !(isFeeExempt[sender] || isFeeExempt[recipient]);
    }
    
    /**
     * Take fees from transfers based on the total amount of fees and deposit them into the contract
     * @return swapped amount after fees subtraction
     */
    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount;
        bool bot;
        
        if (sender != pair) {
            bot = botWrecker && _isBot(sender);
        } else {
            bot = botWrecker && _isBot(recipient);
        }
        
        if (bot || launchedAt + initialBlockLimit >= block.number) {
            feeAmount = amount.mul(feeDenominator.sub(1)).div(feeDenominator);
            _balances[mantraReceiver] = _balances[mantraReceiver].add(feeAmount);
            emit Transfer(sender, mantraReceiver, feeAmount);
        } else {
            feeAmount = amount.mul(totalFee).div(feeDenominator);
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !isSwapping
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }
    
    function swapBack() internal swapping {
        uint256 amountToSwap = swapThreshold;

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

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 amountETH = address(this).balance.sub(balanceBefore);
        uint256 amountReflection = amountETH.mul(reflectionFee).div(totalFee);
        uint256 amountTeam = amountETH.mul(teamFee).div(totalFee);
        uint256 amountMantra = amountETH.mul(mantraFee).div(totalFee);
        uint256 amountMarketing = amountETH.sub(amountReflection).sub(amountTeam).sub(amountMantra);

        try reflector.deposit{value: amountReflection}() {} catch {}
        
        if (amountTeam > 0) {
            payable(teamReceiver).transfer(amountTeam);
        }
        
        if (amountMantra > 0) {
            payable(mantraReceiver).transfer(amountMantra);
        }
        
        if (amountMarketing > 0) {
            payable(marketingReceiver).transfer(amountMarketing);
        }
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0 && block.timestamp >= launchTime;
    }
    
    function launch(uint256 _timer) external onlyOwner() {
        launchTime = block.timestamp.add(_timer);
        launchedAt = block.number;
    }

    function setInitialBlockLimit(uint256 blocks) external onlyOwner {
        require(blocks > 0, "Blocks should be greater than 0");
        initialBlockLimit = blocks;
    }

    function setBuyTxLimit(uint256 amount) external onlyOwner {
        _maxTxAmountBuy = amount;
    }
    
    function setSellTxLimit(uint256 amount) external onlyOwner {
        _maxTxAmountSell = amount;
    }
    
    function setWalletCap(uint256 amount) external onlyOwner {
        _walletCap = amount;
    }
    
    function setBot(address _address, bool toggle) external onlyOwner {
        bots[_address] = toggle;
        notBots[_address] = !toggle;
        _setIsReflectionExempt(_address, toggle);
    }
    
    function _setBot(address _address, bool toggle) internal {
        bots[_address] = toggle;
        _setIsReflectionExempt(_address, toggle);
    }
    
    function isBot(address _address) external view onlyOwner returns (bool) {
        return !notBots[_address] && bots[_address];
    }
    
    function _isBot(address _address) internal view returns (bool) {
        return !notBots[_address] && bots[_address];
    }
    
    function _isExchangeTransfer(address _sender, address _recipient) private view returns (bool) {
        return _sender == pair || _recipient == pair;
    }
    
    function _setIsReflectionExempt(address holder, bool exempt) internal {
        require(holder != address(this) && holder != pair);
        isReflectionExempt[holder] = exempt;
        if(exempt){
            reflector.setShare(holder, 0);
        }else{
            reflector.setShare(holder, _balances[holder]);
        }
    }

    function setIsReflectionExempt(address holder, bool exempt) external onlyOwner {
        _setIsReflectionExempt(holder, exempt);
    }

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

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

    function setFees( uint256 _reflectionFee, uint256 _teamFee, uint256 _mantraFee, uint256 _marketingFee, uint256 _feeDenominator) external onlyOwner {
        reflectionFee = _reflectionFee;
        teamFee = _teamFee;
        mantraFee = _mantraFee;
        marketingFee = _marketingFee;
        totalFee = _reflectionFee.add(_teamFee).add(_mantraFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        //Total fees has to be less than 50%
        require(totalFee < feeDenominator/2);
    }
    
    function setFeesReceivers(address _teamReceiver, address _mantraReceiver, address _marketingReceiver) external onlyOwner {
        teamReceiver = _teamReceiver;
        mantraReceiver = _mantraReceiver;
        marketingReceiver = _marketingReceiver;
    }

    function setTeamReceiver(address _teamReceiver) external onlyOwner {
        teamReceiver = _teamReceiver;
    }
    
    function setMantraReceiver(address _mantraReceiver) external onlyOwner {
        mantraReceiver = _mantraReceiver;
    }
    
    function setMarketingReceiver(address _marketingReceiver) external onlyOwner {
        marketingReceiver = _marketingReceiver;
    }
    
    function manualSend() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        payable(teamReceiver).transfer(contractETHBalance);
    }

    function setSwapBackSettings(bool enabled, uint256 amount) external onlyOwner {
        swapEnabled = enabled;
        swapThreshold = amount;
    }
    
    
    /**
     * Claim reflections collected by your address till now. Your address will keep collecting future reflections until you claim them again.
     */
    function claimReflection() external {
        reflector.claimReflection(msg.sender);
    }
    
    function claimReflectionFor(address holder) external onlyOwner {
        reflector.claimReflection(holder);
    }
    
    /**
     * Check the amount of reflections this address can still claim
     */
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        return reflector.getUnpaidEarnings(shareholder);
    }

    function manualBurn(uint256 amount) external onlyOwner returns (bool) {
        return _basicTransfer(address(this), DEAD, amount);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }
    
    /**
     * Change AntiBot Scanning service contract address: useful to update its version
     */
    function assignAntiBot(address _address) external onlyOwner() {
        antiBot = IAntiBotService(_address);                 
    }
    
    /**
     * Toggle Bot Scanning external service ON/OFF: choose whether or not the external antibot scannel should be active
     */
    function toggleBotScanner() external onlyOwner() returns (bool) {
        bool _localBool;
        if(botScanner){
            botScanner = false;
            _localBool = false;
        }
        else{
            botScanner = true;
            _localBool = true;
        }
        return _localBool;
    }
    
    /**
     * Whether or not the FTP bot scanning service is active
     */
    function isBotScannerEnabled() external view returns (bool) {
        return botScanner;
    }
    
    /**
     * Toggle Bot Blocker mode ON/OFF: choose whether or not bots should be blocked before wrecking them
     */
    function toggleBotBlocker() external onlyOwner() returns (bool) {
        bool _localBool;
        if(botBlocker){
            botBlocker = false;
            _localBool = false;
        }
        else{
            botBlocker = true;
            _localBool = true;
        }
        return _localBool;
    }
    
    /**
     * Whether or not the contract will prevent detected bots from completing transactions
     */
    function isBotBlockerEnabled() external view returns (bool) {
        return botBlocker;
    }
    
    /**
     * Toggle Bot Wrecker mode ON/OFF: choose whether or not bots should be wrecked
     */
    function toggleBotWrecker() external onlyOwner() returns (bool) {
        bool _localBool;
        if(botWrecker){
            botWrecker = false;
            _localBool = false;
        }
        else{
            botWrecker = true;
            _localBool = true;
        }
        return _localBool;
    }
    
    /**
     * Whether or not the contract will wreck bots and take their donation
     */
    function isBotWreckerEnabled() external view returns (bool) {
        return botWrecker;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_teamWallet","type":"address"},{"internalType":"address","name":"_mantraWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"_address","type":"address"}],"name":"assignAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"claimReflectionFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBotBlockerEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBotScannerEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBotWreckerEnabled","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":[{"internalType":"uint256","name":"_timer","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","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":"address","name":"_address","type":"address"},{"internalType":"bool","name":"toggle","type":"bool"}],"name":"setBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBuyTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"},{"internalType":"uint256","name":"_mantraFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamReceiver","type":"address"},{"internalType":"address","name":"_mantraReceiver","type":"address"},{"internalType":"address","name":"_marketingReceiver","type":"address"}],"name":"setFeesReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setInitialBlockLimit","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":"setIsReflectionExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mantraReceiver","type":"address"}],"name":"setMantraReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingReceiver","type":"address"}],"name":"setMarketingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSellTxLimit","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":"address","name":"_teamReceiver","type":"address"}],"name":"setTeamReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setWalletCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"toggleBotBlocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleBotScanner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleBotWrecker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000099919062000ff3565b633b9aca00620000aa919062001130565b600455600454600555600454600655620000d6601960045462000cd360201b6200224a1790919060201c565b6007556001600f55600a601055600360115560036012556002601355601260145560646015556000601b60146101000a81548160ff0219169083151502179055506001601b60156101000a81548160ff0219169083151502179055506001601b60166101000a81548160ff0219169083151502179055506000601b60176101000a81548160ff0219169083151502179055506368f18700601d556001601e60146101000a81548160ff0219169083151502179055506103e86004546200019d919062000f60565b601f55348015620001ad57600080fd5b5060405162007c6638038062007c668339818101604052810190620001d3919062000de4565b83806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162000265919062000eb9565b60405180910390a150737a250d5630b4cf539739df2c5dacb4c659f2488d601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032c57600080fd5b505afa15801562000341573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000367919062000db2565b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041057600080fd5b505afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000db2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401620004a992919062000ed6565b602060405180830381600087803b158015620004c457600080fd5b505af1158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff919062000db2565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083604051620006119062000d8d565b6200061d919062000eb9565b604051809103906000f0801580156200063a573d6000803e3d6000fd5b50601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cd5312d086f078d1554e8813c27cf6c9d1c3d9b3601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600454600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000cc1919062000f27565b60405180910390a350505050620012ad565b600062000d1d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000d2560201b60201c565b905092915050565b6000808311829062000d6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d66919062000f03565b60405180910390fd5b506000838562000d80919062000f60565b9050809150509392505050565b611635806200663183390190565b60008151905062000dac8162001293565b92915050565b60006020828403121562000dcb5762000dca62001270565b5b600062000ddb8482850162000d9b565b91505092915050565b6000806000806080858703121562000e015762000e0062001270565b5b600062000e118782880162000d9b565b945050602062000e248782880162000d9b565b935050604062000e378782880162000d9b565b925050606062000e4a8782880162000d9b565b91505092959194509250565b62000e618162001191565b82525050565b600062000e748262000f44565b62000e80818562000f4f565b935062000e92818560208601620011dc565b62000e9d8162001275565b840191505092915050565b62000eb381620011c5565b82525050565b600060208201905062000ed0600083018462000e56565b92915050565b600060408201905062000eed600083018562000e56565b62000efc602083018462000e56565b9392505050565b6000602082019050818103600083015262000f1f818462000e67565b905092915050565b600060208201905062000f3e600083018462000ea8565b92915050565b600081519050919050565b600082825260208201905092915050565b600062000f6d82620011c5565b915062000f7a83620011c5565b92508262000f8d5762000f8c62001241565b5b828204905092915050565b6000808291508390505b600185111562000fea5780860481111562000fc25762000fc162001212565b5b600185161562000fd25780820291505b808102905062000fe28562001286565b945062000fa2565b94509492505050565b60006200100082620011c5565b91506200100d83620011cf565b92506200103c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001044565b905092915050565b60008262001056576001905062001129565b8162001066576000905062001129565b81600181146200107f57600281146200108a57620010c0565b600191505062001129565b60ff8411156200109f576200109e62001212565b5b8360020a915084821115620010b957620010b862001212565b5b5062001129565b5060208310610133831016604e8410600b8410161715620010fa5782820a905083811115620010f457620010f362001212565b5b62001129565b62001109848484600162000f98565b9250905081840481111562001123576200112262001212565b5b81810290505b9392505050565b60006200113d82620011c5565b91506200114a83620011c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001186576200118562001212565b5b828202905092915050565b60006200119e82620011a5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015620011fc578082015181840152602081019050620011df565b838111156200120c576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b6200129e8162001191565b8114620012aa57600080fd5b50565b61537480620012bd6000396000f3fe60806040526004361061028c5760003560e01c80636606490a1161015a578063aeff60b9116100c1578063dd62ed3e1161007a578063dd62ed3e146109eb578063df20fd4914610a28578063f2fde38b14610a51578063f429389014610a7a578063f84ba65d14610a91578063f887ea4014610aba57610293565b8063aeff60b9146108eb578063b3c7a88314610916578063bf56b37114610941578063c3647c8c1461096c578063c52ad9fb14610995578063dcf27b9f146109c057610293565b806385b12c7c1161011357806385b12c7c146107db578063893d20e81461080457806395d89b411461082f578063991937ed1461085a578063a8aa1b3114610883578063a9059cbb146108ae57610293565b80636606490a146106cd5780636ddd1713146106f657806370a0823114610721578063736ad0501461075e57806375b6253214610787578063838fee35146107b057610293565b80632b112e49116101fe5780633a8739ab116101b75780633a8739ab146105af5780633bbac579146105d8578063571ac8b01461061557806362caa70414610652578063658d4b7f1461067b57806365a64668146106a457610293565b80632b112e49146104b35780632f54bf6e146104de578063313ce5671461051b5780633307d37214610546578063342aa8b51461056f578063375632931461059857610293565b8063095ea7b311610250578063095ea7b31461036b57806318160ddd146103a8578063232c5cf9146103d357806323b63585146103fc57806323b872dd1461043957806328fd31981461047657610293565b80630445b6671461029857806304a66b48146102c357806306fdde03146102ec578063088862ab1461031757806308cad4e51461034257610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ae5565b6040516102ba9190614bec565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906145b3565b610aeb565b005b3480156102f857600080fd5b50610301610bb6565b60405161030e9190614a0a565b60405180910390f35b34801561032357600080fd5b5061032c610bf3565b60405161033991906149d4565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190614559565b610c9f565b005b34801561037757600080fd5b50610392600480360381019061038d91906144ac565b610cf1565b60405161039f91906149d4565b60405180910390f35b3480156103b457600080fd5b506103bd610ec2565b6040516103ca9190614bec565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f591906143c6565b610ecc565b005b34801561040857600080fd5b50610423600480360381019061041e9190614559565b610fdc565b60405161043091906149d4565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190614419565b61105a565b60405161046d91906149d4565b60405180910390f35b34801561048257600080fd5b5061049d6004803603810190610498919061432c565b61125a565b6040516104aa9190614bec565b60405180910390f35b3480156104bf57600080fd5b506104c861130e565b6040516104d59190614bec565b60405180910390f35b3480156104ea57600080fd5b506105056004803603810190610500919061432c565b611390565b60405161051291906149d4565b60405180910390f35b34801561052757600080fd5b506105306113e9565b60405161053d9190614c61565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061446c565b6113f2565b005b34801561057b57600080fd5b506105966004803603810190610591919061446c565b611448565b005b3480156105a457600080fd5b506105ad61154d565b005b3480156105bb57600080fd5b506105d660048036038101906105d1919061432c565b6115dc565b005b3480156105e457600080fd5b506105ff60048036038101906105fa919061432c565b6116b4565b60405161060c91906149d4565b60405180910390f35b34801561062157600080fd5b5061063c6004803603810190610637919061432c565b6117a8565b60405161064991906149d4565b60405180910390f35b34801561065e57600080fd5b506106796004803603810190610674919061432c565b6117db565b005b34801561068757600080fd5b506106a2600480360381019061069d919061446c565b611867565b005b3480156106b057600080fd5b506106cb60048036038101906106c69190614559565b61190a565b005b3480156106d957600080fd5b506106f460048036038101906106ef919061432c565b61195c565b005b34801561070257600080fd5b5061070b6119e8565b60405161071891906149d4565b60405180910390f35b34801561072d57600080fd5b506107486004803603810190610743919061432c565b6119fb565b6040516107559190614bec565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190614559565b611a44565b005b34801561079357600080fd5b506107ae60048036038101906107a9919061432c565b611a96565b005b3480156107bc57600080fd5b506107c5611b22565b6040516107d291906149d4565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190614559565b611b39565b005b34801561081057600080fd5b50610819611ba4565b6040516108269190614930565b60405180910390f35b34801561083b57600080fd5b50610844611bcd565b6040516108519190614a0a565b60405180910390f35b34801561086657600080fd5b50610881600480360381019061087c919061432c565b611c0a565b005b34801561088f57600080fd5b50610898611c96565b6040516108a59190614930565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d091906144ac565b611cbc565b6040516108e291906149d4565b60405180910390f35b3480156108f757600080fd5b50610900611cd1565b60405161090d91906149d4565b60405180910390f35b34801561092257600080fd5b5061092b611d7d565b60405161093891906149d4565b60405180910390f35b34801561094d57600080fd5b50610956611d94565b6040516109639190614bec565b60405180910390f35b34801561097857600080fd5b50610993600480360381019061098e9190614559565b611d9a565b005b3480156109a157600080fd5b506109aa611e2f565b6040516109b791906149d4565b60405180910390f35b3480156109cc57600080fd5b506109d5611e46565b6040516109e291906149d4565b60405180910390f35b3480156109f757600080fd5b50610a126004803603810190610a0d9190614386565b611ef2565b604051610a1f9190614bec565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190614519565b611f79565b005b348015610a5d57600080fd5b50610a786004803603810190610a739190614359565b611fe6565b005b348015610a8657600080fd5b50610a8f6120c8565b005b348015610a9d57600080fd5b50610ab86004803603810190610ab3919061446c565b612181565b005b348015610ac657600080fd5b50610acf612224565b604051610adc91906149ef565b60405180910390f35b601f5481565b610af433611390565b610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90614b2c565b60405180910390fd5b84601081905550836011819055508260128190555081601381905550610b8682610b7885610b6a888a61229490919063ffffffff16565b61229490919063ffffffff16565b61229490919063ffffffff16565b601481905550806015819055506002601554610ba29190614d27565b60145410610baf57600080fd5b5050505050565b60606040518060400160405280600681526020017f57756b6f696e0000000000000000000000000000000000000000000000000000815250905090565b6000610bfe33611390565b610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490614b2c565b60405180910390fd5b6000601b60149054906101000a900460ff1615610c78576000601b60146101000a81548160ff02191690831515021790555060009050610c98565b6001601b60146101000a81548160ff021916908315150217905550600190505b8091505090565b610ca833611390565b610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde90614b2c565b60405180910390fd5b8060068190555050565b60008073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990614bac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990614a4c565b60405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610eb09190614bec565b60405180910390a36001905092915050565b6000600454905090565b610ed533611390565b610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90614b2c565b60405180910390fd5b82601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000610fe733611390565b611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90614b2c565b60405180910390fd5b61105330600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122f2565b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611246576111c5826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125e79092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61125184848461264b565b90509392505050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b81526004016112b79190614930565b60206040518083038186803b1580156112cf57600080fd5b505afa1580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113079190614586565b9050919050565b600061138b61133e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119fb565b61137d61136c600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119fb565b600454612daf90919063ffffffff16565b612daf90919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b6113fb33611390565b61143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190614b2c565b60405180910390fd5b6114448282612df9565b5050565b61145133611390565b611490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148790614b2c565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506115498282612df9565b5050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354eee553336040518263ffffffff1660e01b81526004016115a89190614930565b600060405180830381600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b50505050565b6115e533611390565b611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b90614b2c565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354eee553826040518263ffffffff1660e01b815260040161167f9190614930565b600060405180830381600087803b15801561169957600080fd5b505af11580156116ad573d6000803e3d6000fd5b5050505050565b60006116bf33611390565b6116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590614b2c565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117a15750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050919050565b60006117d4827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610cf1565b9050919050565b6117e433611390565b611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90614b2c565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61187033611390565b6118af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a690614b2c565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61191333611390565b611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614b2c565b60405180910390fd5b8060078190555050565b61196533611390565b6119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b90614b2c565b60405180910390fd5b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e60149054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a4d33611390565b611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390614b2c565b60405180910390fd5b8060058190555050565b611a9f33611390565b611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad590614b2c565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601b60149054906101000a900460ff16905090565b611b4233611390565b611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890614b2c565b60405180910390fd5b611b94814261229490919063ffffffff16565b601d8190555043601c8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f57554b0000000000000000000000000000000000000000000000000000000000815250905090565b611c1333611390565b611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990614b2c565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cc933848461264b565b905092915050565b6000611cdc33611390565b611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1290614b2c565b60405180910390fd5b6000601b60159054906101000a900460ff1615611d56576000601b60156101000a81548160ff02191690831515021790555060009050611d76565b6001601b60156101000a81548160ff021916908315150217905550600190505b8091505090565b6000601b60159054906101000a900460ff16905090565b601c5481565b611da333611390565b611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990614b2c565b60405180910390fd5b60008111611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614acc565b60405180910390fd5b80600f8190555050565b6000601b60169054906101000a900460ff16905090565b6000611e5133611390565b611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790614b2c565b60405180910390fd5b6000601b60169054906101000a900460ff1615611ecb576000601b60166101000a81548160ff02191690831515021790555060009050611eeb565b6001601b60166101000a81548160ff021916908315150217905550600190505b8091505090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f8233611390565b611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb890614b2c565b60405180910390fd5b81601e60146101000a81548160ff02191690831515021790555080601f819055505050565b611fef33611390565b61202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614b2c565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516120bd9190614930565b60405180910390a150565b6120d133611390565b612110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210790614b2c565b60405180910390fd5b6000479050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561217d573d6000803e3d6000fd5b5050565b61218a33611390565b6121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090614b2c565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061228c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613051565b905092915050565b60008082846122a39190614cd1565b9050838110156122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df90614a8c565b60405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235a90614b6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90614a2c565b60405180910390fd5b60008211612416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240d90614b4c565b60405180910390fd5b61249f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125e79092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061253482600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229490919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125d49190614bec565b60405180910390a3600190509392505050565b600083831115829061262f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126269190614a0a565b60405180910390fd5b506000838561263e9190614db2565b9050809150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b390614b6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561272c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272390614a2c565b60405180910390fd5b6000821161276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276690614b4c565b60405180910390fd5b602060009054906101000a900460ff16156127965761278f8484846122f2565b9050612da8565b6127a18484846130b4565b6127ac848484613288565b6127b461341f565b156127c2576127c16134f6565b5b6127cc848461399e565b156128ba576127da84611390565b806127e957506127e8613a51565b5b612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f90614b8c565b60405180910390fd5b601b60169054906101000a900460ff1615612848576128478484613a6c565b5b601b60149054906101000a900460ff16156128b95761286683613cc9565b158015612879575061287784613cc9565b155b6128b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128af90614bcc565b60405180910390fd5b5b5b612943826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125e79092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006129928585613d75565b61299c57826129a8565b6129a7858585613e21565b5b90506129fc81600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229490919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612ae75750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bbe57601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612b889291906149ab565b600060405180830381600087803b158015612ba257600080fd5b505af1925050508015612bb3575060015b612bbc57612bbd565b5b5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612c665750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d3d57601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612d079291906149ab565b600060405180830381600087803b158015612d2157600080fd5b505af1925050508015612d32575060015b612d3b57612d3c565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d9a9190614bec565b60405180910390a360019150505b9392505050565b6000612df183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125e7565b905092915050565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e835750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612e8c57600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612f7e57601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401612f47929190614982565b600060405180830381600087803b158015612f6157600080fd5b505af1158015612f75573d6000803e3d6000fd5b5050505061304d565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161301a9291906149ab565b600060405180830381600087803b15801561303457600080fd5b505af1158015613048573d6000803e3d6000fd5b505050505b5050565b60008083118290613098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308f9190614a0a565b60405180910390fd5b50600083856130a79190614d27565b9050809150509392505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146131a757600654811115806131635750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6131a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319990614b0c565b60405180910390fd5b613283565b60055481111580156131cf57506131cb610e10601d5461229490919063ffffffff16565b4210155b806131ef57506131eb60c860045461224a90919063ffffffff16565b8111155b806132435750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327990614aac565b60405180910390fd5b5b505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561332f5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561341a5761334b611c20601d5461229490919063ffffffff16565b4210156133c157613368603260045461224a90919063ffffffff16565b81613372846119fb565b61337c9190614cd1565b106133bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b390614a6c565b60405180910390fd5b613419565b600754816133ce846119fb565b6133d89190614cd1565b10613418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340f90614a6c565b60405180910390fd5b5b5b505050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561348c5750602060009054906101000a900460ff16155b80156134a45750601e60149054906101000a900460ff165b80156134f15750601f54600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff0219169083151502179055506000601f5490506000600267ffffffffffffffff81111561353557613534614f55565b5b6040519080825280602002602001820160405280156135635781602001602082028036833780820191505090505b509050308160008151811061357b5761357a614f26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106135ec576135eb614f26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040161368f959493929190614c07565b600060405180830381600087803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b5050505060006136d68247612daf90919063ffffffff16565b905060006137036014546136f5601054856141ce90919063ffffffff16565b61224a90919063ffffffff16565b90506000613730601454613722601154866141ce90919063ffffffff16565b61224a90919063ffffffff16565b9050600061375d60145461374f601254876141ce90919063ffffffff16565b61224a90919063ffffffff16565b905060006137988261378a8561377c888a612daf90919063ffffffff16565b612daf90919063ffffffff16565b612daf90919063ffffffff16565b9050601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561380457600080fd5b505af193505050508015613816575060015b61381f57613820565b5b600083111561389357601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613891573d6000803e3d6000fd5b505b600082111561390657601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613904573d6000803e3d6000fd5b505b600081111561397957601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613977573d6000803e3d6000fd5b505b50505050505050506000602060006101000a81548160ff021916908315150217905550565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480613a495750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b600080601c5414158015613a675750601d544210155b905090565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166312bdf42382601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16326040518463ffffffff1660e01b8152600401613aed9392919061494b565b602060405180830381600087803b158015613b0757600080fd5b505af1158015613b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3f91906144ec565b15613b5057613b4f816001614249565b5b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166312bdf42383601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16326040518463ffffffff1660e01b8152600401613bd19392919061494b565b602060405180830381600087803b158015613beb57600080fd5b505af1158015613bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2391906144ec565b15613c3457613c33826001614249565b5b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663155d0ed98383326040518463ffffffff1660e01b8152600401613c939392919061494b565b600060405180830381600087803b158015613cad57600080fd5b505af1158015613cc1573d6000803e3d6000fd5b505050505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613d6e5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050919050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613e185750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15905092915050565b6000806000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614613ea357601b60159054906101000a900460ff168015613e9c5750613e9b86613cc9565b5b9050613ec7565b601b60159054906101000a900460ff168015613ec45750613ec385613cc9565b5b90505b8080613ee2575043600f54601c54613edf9190614cd1565b10155b1561408a57613f23601554613f15613f066001601554612daf90919063ffffffff16565b876141ce90919063ffffffff16565b61224a90919063ffffffff16565b9150613f998260086000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229490919063ffffffff16565b60086000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161407d9190614bec565b60405180910390a36141b0565b6140b36015546140a5601454876141ce90919063ffffffff16565b61224a90919063ffffffff16565b915061410782600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229490919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141a79190614bec565b60405180910390a35b6141c38285612daf90919063ffffffff16565b925050509392505050565b6000808314156141e15760009050614243565b600082846141ef9190614d58565b90508284826141fe9190614d27565b1461423e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161423590614aec565b60405180910390fd5b809150505b92915050565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506142aa8282612df9565b5050565b6000813590506142bd816152e2565b92915050565b6000813590506142d2816152f9565b92915050565b6000813590506142e781615310565b92915050565b6000815190506142fc81615310565b92915050565b60008135905061431181615327565b92915050565b60008151905061432681615327565b92915050565b60006020828403121561434257614341614f84565b5b6000614350848285016142ae565b91505092915050565b60006020828403121561436f5761436e614f84565b5b600061437d848285016142c3565b91505092915050565b6000806040838503121561439d5761439c614f84565b5b60006143ab858286016142ae565b92505060206143bc858286016142ae565b9150509250929050565b6000806000606084860312156143df576143de614f84565b5b60006143ed868287016142ae565b93505060206143fe868287016142ae565b925050604061440f868287016142ae565b9150509250925092565b60008060006060848603121561443257614431614f84565b5b6000614440868287016142ae565b9350506020614451868287016142ae565b925050604061446286828701614302565b9150509250925092565b6000806040838503121561448357614482614f84565b5b6000614491858286016142ae565b92505060206144a2858286016142d8565b9150509250929050565b600080604083850312156144c3576144c2614f84565b5b60006144d1858286016142ae565b92505060206144e285828601614302565b9150509250929050565b60006020828403121561450257614501614f84565b5b6000614510848285016142ed565b91505092915050565b600080604083850312156145305761452f614f84565b5b600061453e858286016142d8565b925050602061454f85828601614302565b9150509250929050565b60006020828403121561456f5761456e614f84565b5b600061457d84828501614302565b91505092915050565b60006020828403121561459c5761459b614f84565b5b60006145aa84828501614317565b91505092915050565b600080600080600060a086880312156145cf576145ce614f84565b5b60006145dd88828901614302565b95505060206145ee88828901614302565b94505060406145ff88828901614302565b935050606061461088828901614302565b925050608061462188828901614302565b9150509295509295909350565b600061463a8383614646565b60208301905092915050565b61464f81614de6565b82525050565b61465e81614de6565b82525050565b600061466f82614c8c565b6146798185614caf565b935061468483614c7c565b8060005b838110156146b557815161469c888261462e565b97506146a783614ca2565b925050600181019050614688565b5085935050505092915050565b6146cb81614e0a565b82525050565b6146da81614e4d565b82525050565b6146e981614e5f565b82525050565b60006146fa82614c97565b6147048185614cc0565b9350614714818560208601614e95565b61471d81614f89565b840191505092915050565b6000614735602383614cc0565b915061474082614f9a565b604082019050919050565b6000614758602283614cc0565b915061476382614fe9565b604082019050919050565b600061477b601883614cc0565b915061478682615038565b602082019050919050565b600061479e601b83614cc0565b91506147a982615061565b602082019050919050565b60006147c1601583614cc0565b91506147cc8261508a565b602082019050919050565b60006147e4601f83614cc0565b91506147ef826150b3565b602082019050919050565b6000614807602183614cc0565b9150614812826150dc565b604082019050919050565b600061482a601683614cc0565b91506148358261512b565b602082019050919050565b600061484d602083614cc0565b915061485882615154565b602082019050919050565b6000614870602983614cc0565b915061487b8261517d565b604082019050919050565b6000614893602583614cc0565b915061489e826151cc565b604082019050919050565b60006148b6600a83614cc0565b91506148c18261521b565b602082019050919050565b60006148d9602483614cc0565b91506148e482615244565b604082019050919050565b60006148fc602683614cc0565b915061490782615293565b604082019050919050565b61491b81614e36565b82525050565b61492a81614e40565b82525050565b60006020820190506149456000830184614655565b92915050565b60006060820190506149606000830186614655565b61496d6020830185614655565b61497a6040830184614655565b949350505050565b60006040820190506149976000830185614655565b6149a460208301846146e0565b9392505050565b60006040820190506149c06000830185614655565b6149cd6020830184614912565b9392505050565b60006020820190506149e960008301846146c2565b92915050565b6000602082019050614a0460008301846146d1565b92915050565b60006020820190508181036000830152614a2481846146ef565b905092915050565b60006020820190508181036000830152614a4581614728565b9050919050565b60006020820190508181036000830152614a658161474b565b9050919050565b60006020820190508181036000830152614a858161476e565b9050919050565b60006020820190508181036000830152614aa581614791565b9050919050565b60006020820190508181036000830152614ac5816147b4565b9050919050565b60006020820190508181036000830152614ae5816147d7565b9050919050565b60006020820190508181036000830152614b05816147fa565b9050919050565b60006020820190508181036000830152614b258161481d565b9050919050565b60006020820190508181036000830152614b4581614840565b9050919050565b60006020820190508181036000830152614b6581614863565b9050919050565b60006020820190508181036000830152614b8581614886565b9050919050565b60006020820190508181036000830152614ba5816148a9565b9050919050565b60006020820190508181036000830152614bc5816148cc565b9050919050565b60006020820190508181036000830152614be5816148ef565b9050919050565b6000602082019050614c016000830184614912565b92915050565b600060a082019050614c1c6000830188614912565b614c2960208301876146e0565b8181036040830152614c3b8186614664565b9050614c4a6060830185614655565b614c576080830184614912565b9695505050505050565b6000602082019050614c766000830184614921565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614cdc82614e36565b9150614ce783614e36565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d1c57614d1b614ec8565b5b828201905092915050565b6000614d3282614e36565b9150614d3d83614e36565b925082614d4d57614d4c614ef7565b5b828204905092915050565b6000614d6382614e36565b9150614d6e83614e36565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614da757614da6614ec8565b5b828202905092915050565b6000614dbd82614e36565b9150614dc883614e36565b925082821015614ddb57614dda614ec8565b5b828203905092915050565b6000614df182614e16565b9050919050565b6000614e0382614e16565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e5882614e71565b9050919050565b6000614e6a82614e36565b9050919050565b6000614e7c82614e83565b9050919050565b6000614e8e82614e16565b9050919050565b60005b83811015614eb3578082015181840152602081019050614e98565b83811115614ec2576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f57616c6c65742043617061636974792045786365656465640000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f427579205458204c696d69742045786365656465640000000000000000000000600082015250565b7f426c6f636b732073686f756c642062652067726561746572207468616e203000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c205458204c696d697420457863656564656400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f57656e206c756e63683f00000000000000000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f42656570204265657020426f6f702c20596f752772652061207069656365206f60008201527f6620706f6f700000000000000000000000000000000000000000000000000000602082015250565b6152eb81614de6565b81146152f657600080fd5b50565b61530281614df8565b811461530d57600080fd5b50565b61531981614e0a565b811461532457600080fd5b50565b61533081614e36565b811461533b57600080fd5b5056fea2646970667358221220e987659effee658ef983a715fe8690d00edc70cc3190e04c2c3ad553e1eeafcf64736f6c6343000807003360806040526ec097ce7bc90715b34b9f10000000006009553480156200002457600080fd5b50604051620016353803806200163583398181016040528101906200004a9190620000e9565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200016e565b600081519050620000e38162000154565b92915050565b6000602082840312156200010257620001016200014f565b5b60006200011284828501620000d2565b91505092915050565b600062000128826200012f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200015f816200011b565b81146200016b57600080fd5b50565b6114b7806200017e6000396000f3fe6080604052600436106100915760003560e01c806354eee5531161005957806354eee5531461017b5780639077ac59146101a4578063ce7c2ac2146101cf578063d0e30db01461020e578063efca2eed1461021857610091565b8063018763ed146100965780631014edf5146100c157806314b6ca96146100ea57806328fd3198146101135780633a98ef3914610150575b600080fd5b3480156100a257600080fd5b506100ab610243565b6040516100b89190611117565b60405180910390f35b3480156100cd57600080fd5b506100e860048036038101906100e39190610fe7565b610249565b005b3480156100f657600080fd5b50610111600480360381019061010c9190610fa7565b610303565b005b34801561011f57600080fd5b5061013a60048036038101906101359190610f7a565b6105c2565b6040516101479190611117565b60405180910390f35b34801561015c57600080fd5b506101656106dc565b6040516101729190611117565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190610f7a565b6106e2565b005b3480156101b057600080fd5b506101b9610746565b6040516101c69190611117565b60405180910390f35b3480156101db57600080fd5b506101f660048036038101906101f19190610f7a565b61074c565b60405161020593929190611132565b60405180910390f35b610216610776565b005b34801561022457600080fd5b5061022d610834565b60405161023a9190611117565b60405180910390f35b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a357600080fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc600085116102d057826102d2565b845b9081150290604051600060405180830381858888f193505050501580156102fd573d6000803e3d6000fd5b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461035b57600080fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103b0576103af8261083a565b5b60008111801561040257506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104155761041082610a34565b610477565b60008114801561046757506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104765761047582610ae3565b5b5b6104e0816104d2600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600554610cea90919063ffffffff16565b610d3490919063ffffffff16565b60058190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610578600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610d92565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561061757600090506106d7565b6000610664600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610d92565b90506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106bf576000925050506106d7565b6106d28183610cea90919063ffffffff16565b925050505b919050565b60055481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461073a57600080fd5b6107438161083a565b50565b60085481565b60046020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107ce57600080fd5b60003490506107e881600654610d3490919063ffffffff16565b60068190555061082b61081a60055461080c84600954610dc490919063ffffffff16565b610e3f90919063ffffffff16565b600854610d3490919063ffffffff16565b60088190555050565b60075481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561088a57610a31565b6000610895826105c2565b90506000811115610a2f576108b581600754610d3490919063ffffffff16565b60078190555061091081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610d3490919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506109a1600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610d92565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a2d573d6000803e3d6000fd5b505b505b50565b600280549050600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60026001600280549050610af79190611266565b81548110610b0857610b07611396565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110610b8657610b85611396565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546003600060026001600280549050610c269190611266565b81548110610c3757610c36611396565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002805480610cb257610cb1611367565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b6000610d2c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e89565b905092915050565b6000808284610d439190611185565b905083811015610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f906110d7565b60405180910390fd5b8091505092915050565b6000610dbd600954610daf60085485610dc490919063ffffffff16565b610e3f90919063ffffffff16565b9050919050565b600080831415610dd75760009050610e39565b60008284610de5919061120c565b9050828482610df491906111db565b14610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906110f7565b60405180910390fd5b809150505b92915050565b6000610e8183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610eed565b905092915050565b6000838311158290610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec891906110b5565b60405180910390fd5b5060008385610ee09190611266565b9050809150509392505050565b60008083118290610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b91906110b5565b60405180910390fd5b5060008385610f4391906111db565b9050809150509392505050565b600081359050610f5f81611453565b92915050565b600081359050610f748161146a565b92915050565b600060208284031215610f9057610f8f6113c5565b5b6000610f9e84828501610f50565b91505092915050565b60008060408385031215610fbe57610fbd6113c5565b5b6000610fcc85828601610f50565b9250506020610fdd85828601610f65565b9150509250929050565b60008060408385031215610ffe57610ffd6113c5565b5b600061100c85828601610f65565b925050602061101d85828601610f50565b9150509250929050565b600061103282611169565b61103c8185611174565b935061104c8185602086016112d6565b611055816113ca565b840191505092915050565b600061106d601b83611174565b9150611078826113db565b602082019050919050565b6000611090602183611174565b915061109b82611404565b604082019050919050565b6110af816112cc565b82525050565b600060208201905081810360008301526110cf8184611027565b905092915050565b600060208201905081810360008301526110f081611060565b9050919050565b6000602082019050818103600083015261111081611083565b9050919050565b600060208201905061112c60008301846110a6565b92915050565b600060608201905061114760008301866110a6565b61115460208301856110a6565b61116160408301846110a6565b949350505050565b600081519050919050565b600082825260208201905092915050565b6000611190826112cc565b915061119b836112cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156111d0576111cf611309565b5b828201905092915050565b60006111e6826112cc565b91506111f1836112cc565b92508261120157611200611338565b5b828204905092915050565b6000611217826112cc565b9150611222836112cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561125b5761125a611309565b5b828202905092915050565b6000611271826112cc565b915061127c836112cc565b92508282101561128f5761128e611309565b5b828203905092915050565b60006112a5826112ac565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156112f45780820151818401526020810190506112d9565b83811115611303576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b61145c8161129a565b811461146757600080fd5b50565b611473816112cc565b811461147e57600080fd5b5056fea264697066735822122037b0d16f8ec42fd251f91a181408760fd1dcf4f955d197adc78ac035bbc851c464736f6c63430008070033000000000000000000000000090901d693d251012d98cd71a0a2062a85053f5c000000000000000000000000efb9fc3c6cc2b63745527ffb1bcc0fa7ace7a93900000000000000000000000083cf27cd79bd97415b5c768703864f0040a5582e000000000000000000000000a9bc44453043bc5420cc45a833379a788cb1af6d

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80636606490a1161015a578063aeff60b9116100c1578063dd62ed3e1161007a578063dd62ed3e146109eb578063df20fd4914610a28578063f2fde38b14610a51578063f429389014610a7a578063f84ba65d14610a91578063f887ea4014610aba57610293565b8063aeff60b9146108eb578063b3c7a88314610916578063bf56b37114610941578063c3647c8c1461096c578063c52ad9fb14610995578063dcf27b9f146109c057610293565b806385b12c7c1161011357806385b12c7c146107db578063893d20e81461080457806395d89b411461082f578063991937ed1461085a578063a8aa1b3114610883578063a9059cbb146108ae57610293565b80636606490a146106cd5780636ddd1713146106f657806370a0823114610721578063736ad0501461075e57806375b6253214610787578063838fee35146107b057610293565b80632b112e49116101fe5780633a8739ab116101b75780633a8739ab146105af5780633bbac579146105d8578063571ac8b01461061557806362caa70414610652578063658d4b7f1461067b57806365a64668146106a457610293565b80632b112e49146104b35780632f54bf6e146104de578063313ce5671461051b5780633307d37214610546578063342aa8b51461056f578063375632931461059857610293565b8063095ea7b311610250578063095ea7b31461036b57806318160ddd146103a8578063232c5cf9146103d357806323b63585146103fc57806323b872dd1461043957806328fd31981461047657610293565b80630445b6671461029857806304a66b48146102c357806306fdde03146102ec578063088862ab1461031757806308cad4e51461034257610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ae5565b6040516102ba9190614bec565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906145b3565b610aeb565b005b3480156102f857600080fd5b50610301610bb6565b60405161030e9190614a0a565b60405180910390f35b34801561032357600080fd5b5061032c610bf3565b60405161033991906149d4565b60405180910390f35b34801561034e57600080fd5b5061036960048036038101906103649190614559565b610c9f565b005b34801561037757600080fd5b50610392600480360381019061038d91906144ac565b610cf1565b60405161039f91906149d4565b60405180910390f35b3480156103b457600080fd5b506103bd610ec2565b6040516103ca9190614bec565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f591906143c6565b610ecc565b005b34801561040857600080fd5b50610423600480360381019061041e9190614559565b610fdc565b60405161043091906149d4565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190614419565b61105a565b60405161046d91906149d4565b60405180910390f35b34801561048257600080fd5b5061049d6004803603810190610498919061432c565b61125a565b6040516104aa9190614bec565b60405180910390f35b3480156104bf57600080fd5b506104c861130e565b6040516104d59190614bec565b60405180910390f35b3480156104ea57600080fd5b506105056004803603810190610500919061432c565b611390565b60405161051291906149d4565b60405180910390f35b34801561052757600080fd5b506105306113e9565b60405161053d9190614c61565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061446c565b6113f2565b005b34801561057b57600080fd5b506105966004803603810190610591919061446c565b611448565b005b3480156105a457600080fd5b506105ad61154d565b005b3480156105bb57600080fd5b506105d660048036038101906105d1919061432c565b6115dc565b005b3480156105e457600080fd5b506105ff60048036038101906105fa919061432c565b6116b4565b60405161060c91906149d4565b60405180910390f35b34801561062157600080fd5b5061063c6004803603810190610637919061432c565b6117a8565b60405161064991906149d4565b60405180910390f35b34801561065e57600080fd5b506106796004803603810190610674919061432c565b6117db565b005b34801561068757600080fd5b506106a2600480360381019061069d919061446c565b611867565b005b3480156106b057600080fd5b506106cb60048036038101906106c69190614559565b61190a565b005b3480156106d957600080fd5b506106f460048036038101906106ef919061432c565b61195c565b005b34801561070257600080fd5b5061070b6119e8565b60405161071891906149d4565b60405180910390f35b34801561072d57600080fd5b506107486004803603810190610743919061432c565b6119fb565b6040516107559190614bec565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190614559565b611a44565b005b34801561079357600080fd5b506107ae60048036038101906107a9919061432c565b611a96565b005b3480156107bc57600080fd5b506107c5611b22565b6040516107d291906149d4565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd9190614559565b611b39565b005b34801561081057600080fd5b50610819611ba4565b6040516108269190614930565b60405180910390f35b34801561083b57600080fd5b50610844611bcd565b6040516108519190614a0a565b60405180910390f35b34801561086657600080fd5b50610881600480360381019061087c919061432c565b611c0a565b005b34801561088f57600080fd5b50610898611c96565b6040516108a59190614930565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d091906144ac565b611cbc565b6040516108e291906149d4565b60405180910390f35b3480156108f757600080fd5b50610900611cd1565b60405161090d91906149d4565b60405180910390f35b34801561092257600080fd5b5061092b611d7d565b60405161093891906149d4565b60405180910390f35b34801561094d57600080fd5b50610956611d94565b6040516109639190614bec565b60405180910390f35b34801561097857600080fd5b50610993600480360381019061098e9190614559565b611d9a565b005b3480156109a157600080fd5b506109aa611e2f565b6040516109b791906149d4565b60405180910390f35b3480156109cc57600080fd5b506109d5611e46565b6040516109e291906149d4565b60405180910390f35b3480156109f757600080fd5b50610a126004803603810190610a0d9190614386565b611ef2565b604051610a1f9190614bec565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190614519565b611f79565b005b348015610a5d57600080fd5b50610a786004803603810190610a739190614359565b611fe6565b005b348015610a8657600080fd5b50610a8f6120c8565b005b348015610a9d57600080fd5b50610ab86004803603810190610ab3919061446c565b612181565b005b348015610ac657600080fd5b50610acf612224565b604051610adc91906149ef565b60405180910390f35b601f5481565b610af433611390565b610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90614b2c565b60405180910390fd5b84601081905550836011819055508260128190555081601381905550610b8682610b7885610b6a888a61229490919063ffffffff16565b61229490919063ffffffff16565b61229490919063ffffffff16565b601481905550806015819055506002601554610ba29190614d27565b60145410610baf57600080fd5b5050505050565b60606040518060400160405280600681526020017f57756b6f696e0000000000000000000000000000000000000000000000000000815250905090565b6000610bfe33611390565b610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490614b2c565b60405180910390fd5b6000601b60149054906101000a900460ff1615610c78576000601b60146101000a81548160ff02191690831515021790555060009050610c98565b6001601b60146101000a81548160ff021916908315150217905550600190505b8091505090565b610ca833611390565b610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde90614b2c565b60405180910390fd5b8060068190555050565b60008073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990614bac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990614a4c565b60405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610eb09190614bec565b60405180910390a36001905092915050565b6000600454905090565b610ed533611390565b610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90614b2c565b60405180910390fd5b82601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000610fe733611390565b611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90614b2c565b60405180910390fd5b61105330600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122f2565b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611246576111c5826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125e79092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61125184848461264b565b90509392505050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b81526004016112b79190614930565b60206040518083038186803b1580156112cf57600080fd5b505afa1580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113079190614586565b9050919050565b600061138b61133e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119fb565b61137d61136c600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119fb565b600454612daf90919063ffffffff16565b612daf90919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b6113fb33611390565b61143a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143190614b2c565b60405180910390fd5b6114448282612df9565b5050565b61145133611390565b611490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148790614b2c565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506115498282612df9565b5050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354eee553336040518263ffffffff1660e01b81526004016115a89190614930565b600060405180830381600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b50505050565b6115e533611390565b611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b90614b2c565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354eee553826040518263ffffffff1660e01b815260040161167f9190614930565b600060405180830381600087803b15801561169957600080fd5b505af11580156116ad573d6000803e3d6000fd5b5050505050565b60006116bf33611390565b6116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590614b2c565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117a15750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050919050565b60006117d4827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610cf1565b9050919050565b6117e433611390565b611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90614b2c565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61187033611390565b6118af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a690614b2c565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61191333611390565b611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614b2c565b60405180910390fd5b8060078190555050565b61196533611390565b6119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b90614b2c565b60405180910390fd5b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e60149054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a4d33611390565b611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390614b2c565b60405180910390fd5b8060058190555050565b611a9f33611390565b611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad590614b2c565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601b60149054906101000a900460ff16905090565b611b4233611390565b611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890614b2c565b60405180910390fd5b611b94814261229490919063ffffffff16565b601d8190555043601c8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f57554b0000000000000000000000000000000000000000000000000000000000815250905090565b611c1333611390565b611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990614b2c565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cc933848461264b565b905092915050565b6000611cdc33611390565b611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1290614b2c565b60405180910390fd5b6000601b60159054906101000a900460ff1615611d56576000601b60156101000a81548160ff02191690831515021790555060009050611d76565b6001601b60156101000a81548160ff021916908315150217905550600190505b8091505090565b6000601b60159054906101000a900460ff16905090565b601c5481565b611da333611390565b611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990614b2c565b60405180910390fd5b60008111611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614acc565b60405180910390fd5b80600f8190555050565b6000601b60169054906101000a900460ff16905090565b6000611e5133611390565b611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790614b2c565b60405180910390fd5b6000601b60169054906101000a900460ff1615611ecb576000601b60166101000a81548160ff02191690831515021790555060009050611eeb565b6001601b60166101000a81548160ff021916908315150217905550600190505b8091505090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f8233611390565b611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb890614b2c565b60405180910390fd5b81601e60146101000a81548160ff02191690831515021790555080601f819055505050565b611fef33611390565b61202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614b2c565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516120bd9190614930565b60405180910390a150565b6120d133611390565b612110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210790614b2c565b60405180910390fd5b6000479050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561217d573d6000803e3d6000fd5b5050565b61218a33611390565b6121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090614b2c565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061228c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613051565b905092915050565b60008082846122a39190614cd1565b9050838110156122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df90614a8c565b60405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235a90614b6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90614a2c565b60405180910390fd5b60008211612416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240d90614b4c565b60405180910390fd5b61249f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125e79092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061253482600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229490919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125d49190614bec565b60405180910390a3600190509392505050565b600083831115829061262f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126269190614a0a565b60405180910390fd5b506000838561263e9190614db2565b9050809150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b390614b6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561272c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272390614a2c565b60405180910390fd5b6000821161276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276690614b4c565b60405180910390fd5b602060009054906101000a900460ff16156127965761278f8484846122f2565b9050612da8565b6127a18484846130b4565b6127ac848484613288565b6127b461341f565b156127c2576127c16134f6565b5b6127cc848461399e565b156128ba576127da84611390565b806127e957506127e8613a51565b5b612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f90614b8c565b60405180910390fd5b601b60169054906101000a900460ff1615612848576128478484613a6c565b5b601b60149054906101000a900460ff16156128b95761286683613cc9565b158015612879575061287784613cc9565b155b6128b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128af90614bcc565b60405180910390fd5b5b5b612943826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125e79092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006129928585613d75565b61299c57826129a8565b6129a7858585613e21565b5b90506129fc81600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229490919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612ae75750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bbe57601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612b889291906149ab565b600060405180830381600087803b158015612ba257600080fd5b505af1925050508015612bb3575060015b612bbc57612bbd565b5b5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612c665750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d3d57601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612d079291906149ab565b600060405180830381600087803b158015612d2157600080fd5b505af1925050508015612d32575060015b612d3b57612d3c565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d9a9190614bec565b60405180910390a360019150505b9392505050565b6000612df183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125e7565b905092915050565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e835750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612e8c57600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612f7e57601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401612f47929190614982565b600060405180830381600087803b158015612f6157600080fd5b505af1158015612f75573d6000803e3d6000fd5b5050505061304d565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161301a9291906149ab565b600060405180830381600087803b15801561303457600080fd5b505af1158015613048573d6000803e3d6000fd5b505050505b5050565b60008083118290613098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308f9190614a0a565b60405180910390fd5b50600083856130a79190614d27565b9050809150509392505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146131a757600654811115806131635750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6131a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319990614b0c565b60405180910390fd5b613283565b60055481111580156131cf57506131cb610e10601d5461229490919063ffffffff16565b4210155b806131ef57506131eb60c860045461224a90919063ffffffff16565b8111155b806132435750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327990614aac565b60405180910390fd5b5b505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561332f5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561341a5761334b611c20601d5461229490919063ffffffff16565b4210156133c157613368603260045461224a90919063ffffffff16565b81613372846119fb565b61337c9190614cd1565b106133bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b390614a6c565b60405180910390fd5b613419565b600754816133ce846119fb565b6133d89190614cd1565b10613418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340f90614a6c565b60405180910390fd5b5b5b505050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561348c5750602060009054906101000a900460ff16155b80156134a45750601e60149054906101000a900460ff165b80156134f15750601f54600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff0219169083151502179055506000601f5490506000600267ffffffffffffffff81111561353557613534614f55565b5b6040519080825280602002602001820160405280156135635781602001602082028036833780820191505090505b509050308160008151811061357b5761357a614f26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106135ec576135eb614f26565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040161368f959493929190614c07565b600060405180830381600087803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b5050505060006136d68247612daf90919063ffffffff16565b905060006137036014546136f5601054856141ce90919063ffffffff16565b61224a90919063ffffffff16565b90506000613730601454613722601154866141ce90919063ffffffff16565b61224a90919063ffffffff16565b9050600061375d60145461374f601254876141ce90919063ffffffff16565b61224a90919063ffffffff16565b905060006137988261378a8561377c888a612daf90919063ffffffff16565b612daf90919063ffffffff16565b612daf90919063ffffffff16565b9050601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561380457600080fd5b505af193505050508015613816575060015b61381f57613820565b5b600083111561389357601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613891573d6000803e3d6000fd5b505b600082111561390657601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613904573d6000803e3d6000fd5b505b600081111561397957601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613977573d6000803e3d6000fd5b505b50505050505050506000602060006101000a81548160ff021916908315150217905550565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480613a495750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b600080601c5414158015613a675750601d544210155b905090565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166312bdf42382601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16326040518463ffffffff1660e01b8152600401613aed9392919061494b565b602060405180830381600087803b158015613b0757600080fd5b505af1158015613b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3f91906144ec565b15613b5057613b4f816001614249565b5b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166312bdf42383601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16326040518463ffffffff1660e01b8152600401613bd19392919061494b565b602060405180830381600087803b158015613beb57600080fd5b505af1158015613bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2391906144ec565b15613c3457613c33826001614249565b5b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663155d0ed98383326040518463ffffffff1660e01b8152600401613c939392919061494b565b600060405180830381600087803b158015613cad57600080fd5b505af1158015613cc1573d6000803e3d6000fd5b505050505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613d6e5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050919050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613e185750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15905092915050565b6000806000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614613ea357601b60159054906101000a900460ff168015613e9c5750613e9b86613cc9565b5b9050613ec7565b601b60159054906101000a900460ff168015613ec45750613ec385613cc9565b5b90505b8080613ee2575043600f54601c54613edf9190614cd1565b10155b1561408a57613f23601554613f15613f066001601554612daf90919063ffffffff16565b876141ce90919063ffffffff16565b61224a90919063ffffffff16565b9150613f998260086000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229490919063ffffffff16565b60086000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161407d9190614bec565b60405180910390a36141b0565b6140b36015546140a5601454876141ce90919063ffffffff16565b61224a90919063ffffffff16565b915061410782600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229490919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141a79190614bec565b60405180910390a35b6141c38285612daf90919063ffffffff16565b925050509392505050565b6000808314156141e15760009050614243565b600082846141ef9190614d58565b90508284826141fe9190614d27565b1461423e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161423590614aec565b60405180910390fd5b809150505b92915050565b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506142aa8282612df9565b5050565b6000813590506142bd816152e2565b92915050565b6000813590506142d2816152f9565b92915050565b6000813590506142e781615310565b92915050565b6000815190506142fc81615310565b92915050565b60008135905061431181615327565b92915050565b60008151905061432681615327565b92915050565b60006020828403121561434257614341614f84565b5b6000614350848285016142ae565b91505092915050565b60006020828403121561436f5761436e614f84565b5b600061437d848285016142c3565b91505092915050565b6000806040838503121561439d5761439c614f84565b5b60006143ab858286016142ae565b92505060206143bc858286016142ae565b9150509250929050565b6000806000606084860312156143df576143de614f84565b5b60006143ed868287016142ae565b93505060206143fe868287016142ae565b925050604061440f868287016142ae565b9150509250925092565b60008060006060848603121561443257614431614f84565b5b6000614440868287016142ae565b9350506020614451868287016142ae565b925050604061446286828701614302565b9150509250925092565b6000806040838503121561448357614482614f84565b5b6000614491858286016142ae565b92505060206144a2858286016142d8565b9150509250929050565b600080604083850312156144c3576144c2614f84565b5b60006144d1858286016142ae565b92505060206144e285828601614302565b9150509250929050565b60006020828403121561450257614501614f84565b5b6000614510848285016142ed565b91505092915050565b600080604083850312156145305761452f614f84565b5b600061453e858286016142d8565b925050602061454f85828601614302565b9150509250929050565b60006020828403121561456f5761456e614f84565b5b600061457d84828501614302565b91505092915050565b60006020828403121561459c5761459b614f84565b5b60006145aa84828501614317565b91505092915050565b600080600080600060a086880312156145cf576145ce614f84565b5b60006145dd88828901614302565b95505060206145ee88828901614302565b94505060406145ff88828901614302565b935050606061461088828901614302565b925050608061462188828901614302565b9150509295509295909350565b600061463a8383614646565b60208301905092915050565b61464f81614de6565b82525050565b61465e81614de6565b82525050565b600061466f82614c8c565b6146798185614caf565b935061468483614c7c565b8060005b838110156146b557815161469c888261462e565b97506146a783614ca2565b925050600181019050614688565b5085935050505092915050565b6146cb81614e0a565b82525050565b6146da81614e4d565b82525050565b6146e981614e5f565b82525050565b60006146fa82614c97565b6147048185614cc0565b9350614714818560208601614e95565b61471d81614f89565b840191505092915050565b6000614735602383614cc0565b915061474082614f9a565b604082019050919050565b6000614758602283614cc0565b915061476382614fe9565b604082019050919050565b600061477b601883614cc0565b915061478682615038565b602082019050919050565b600061479e601b83614cc0565b91506147a982615061565b602082019050919050565b60006147c1601583614cc0565b91506147cc8261508a565b602082019050919050565b60006147e4601f83614cc0565b91506147ef826150b3565b602082019050919050565b6000614807602183614cc0565b9150614812826150dc565b604082019050919050565b600061482a601683614cc0565b91506148358261512b565b602082019050919050565b600061484d602083614cc0565b915061485882615154565b602082019050919050565b6000614870602983614cc0565b915061487b8261517d565b604082019050919050565b6000614893602583614cc0565b915061489e826151cc565b604082019050919050565b60006148b6600a83614cc0565b91506148c18261521b565b602082019050919050565b60006148d9602483614cc0565b91506148e482615244565b604082019050919050565b60006148fc602683614cc0565b915061490782615293565b604082019050919050565b61491b81614e36565b82525050565b61492a81614e40565b82525050565b60006020820190506149456000830184614655565b92915050565b60006060820190506149606000830186614655565b61496d6020830185614655565b61497a6040830184614655565b949350505050565b60006040820190506149976000830185614655565b6149a460208301846146e0565b9392505050565b60006040820190506149c06000830185614655565b6149cd6020830184614912565b9392505050565b60006020820190506149e960008301846146c2565b92915050565b6000602082019050614a0460008301846146d1565b92915050565b60006020820190508181036000830152614a2481846146ef565b905092915050565b60006020820190508181036000830152614a4581614728565b9050919050565b60006020820190508181036000830152614a658161474b565b9050919050565b60006020820190508181036000830152614a858161476e565b9050919050565b60006020820190508181036000830152614aa581614791565b9050919050565b60006020820190508181036000830152614ac5816147b4565b9050919050565b60006020820190508181036000830152614ae5816147d7565b9050919050565b60006020820190508181036000830152614b05816147fa565b9050919050565b60006020820190508181036000830152614b258161481d565b9050919050565b60006020820190508181036000830152614b4581614840565b9050919050565b60006020820190508181036000830152614b6581614863565b9050919050565b60006020820190508181036000830152614b8581614886565b9050919050565b60006020820190508181036000830152614ba5816148a9565b9050919050565b60006020820190508181036000830152614bc5816148cc565b9050919050565b60006020820190508181036000830152614be5816148ef565b9050919050565b6000602082019050614c016000830184614912565b92915050565b600060a082019050614c1c6000830188614912565b614c2960208301876146e0565b8181036040830152614c3b8186614664565b9050614c4a6060830185614655565b614c576080830184614912565b9695505050505050565b6000602082019050614c766000830184614921565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614cdc82614e36565b9150614ce783614e36565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d1c57614d1b614ec8565b5b828201905092915050565b6000614d3282614e36565b9150614d3d83614e36565b925082614d4d57614d4c614ef7565b5b828204905092915050565b6000614d6382614e36565b9150614d6e83614e36565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614da757614da6614ec8565b5b828202905092915050565b6000614dbd82614e36565b9150614dc883614e36565b925082821015614ddb57614dda614ec8565b5b828203905092915050565b6000614df182614e16565b9050919050565b6000614e0382614e16565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e5882614e71565b9050919050565b6000614e6a82614e36565b9050919050565b6000614e7c82614e83565b9050919050565b6000614e8e82614e16565b9050919050565b60005b83811015614eb3578082015181840152602081019050614e98565b83811115614ec2576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f57616c6c65742043617061636974792045786365656465640000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f427579205458204c696d69742045786365656465640000000000000000000000600082015250565b7f426c6f636b732073686f756c642062652067726561746572207468616e203000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c205458204c696d697420457863656564656400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f57656e206c756e63683f00000000000000000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f42656570204265657020426f6f702c20596f752772652061207069656365206f60008201527f6620706f6f700000000000000000000000000000000000000000000000000000602082015250565b6152eb81614de6565b81146152f657600080fd5b50565b61530281614df8565b811461530d57600080fd5b50565b61531981614e0a565b811461532457600080fd5b50565b61533081614e36565b811461533b57600080fd5b5056fea2646970667358221220e987659effee658ef983a715fe8690d00edc70cc3190e04c2c3ad553e1eeafcf64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000090901d693d251012d98cd71a0a2062a85053f5c000000000000000000000000efb9fc3c6cc2b63745527ffb1bcc0fa7ace7a93900000000000000000000000083cf27cd79bd97415b5c768703864f0040a5582e000000000000000000000000a9bc44453043bc5420cc45a833379a788cb1af6d

-----Decoded View---------------
Arg [0] : _owner (address): 0x090901d693d251012D98Cd71A0a2062A85053f5c
Arg [1] : _teamWallet (address): 0xEFb9FC3c6cc2B63745527fFB1BCC0FA7AcE7A939
Arg [2] : _mantraWallet (address): 0x83Cf27CD79bd97415B5c768703864F0040A5582E
Arg [3] : _marketingWallet (address): 0xA9bC44453043bC5420CC45a833379a788Cb1Af6D

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000090901d693d251012d98cd71a0a2062a85053f5c
Arg [1] : 000000000000000000000000efb9fc3c6cc2b63745527ffb1bcc0fa7ace7a939
Arg [2] : 00000000000000000000000083cf27cd79bd97415b5c768703864f0040a5582e
Arg [3] : 000000000000000000000000a9bc44453043bc5420cc45a833379a788cb1af6d


Deployed Bytecode Sourcemap

11693:18895:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13599:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25895:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15369:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29414:318;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24099:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15984:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15545:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26425:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28078:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16857:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27926:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28229:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5470:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15211:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25489:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24321:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27608:92;;;;;;;;;;;;;:::i;:::-;;27712:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24692:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16470:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28488:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25633:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24214:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26819:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13562:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15639:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23986:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26953:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29854:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23647:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15446:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15288:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26693:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13183:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16693:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30065:318;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30489:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13446:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23803:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29182:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28772:318;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15750:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27278:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5698:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27099:171;;;;;;;;;;;;;:::i;:::-;;25760:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13152:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13599:50;;;;:::o;25895:518::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26069:14:::1;26053:13;:30;;;;26104:8;26094:7;:18;;;;26135:10;26123:9;:22;;;;26171:13;26156:12;:28;;;;26206:63;26255:13;26206:44;26239:10;26206:28;26225:8;26206:14;:18;;:28;;;;:::i;:::-;:32;;:44;;;;:::i;:::-;:48;;:63;;;;:::i;:::-;26195:8;:74;;;;26297:15;26280:14;:32;;;;26403:1;26388:14;;:16;;;;:::i;:::-;26377:8;;:27;26369:36;;;::::0;::::1;;25895:518:::0;;;;;:::o;15369:71::-;15408:13;15432:5;;;;;;;;;;;;;;;;;15425:12;;15369:71;:::o;29414:318::-;29472:4;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29489:15:::1;29518:10;;;;;;;;;;;29515:182;;;29557:5;29544:10;;:18;;;;;;;;;;;;;;;;;;29590:5;29577:18;;29515:182;;;29649:4;29636:10;;:17;;;;;;;;;;;;;;;;;;29681:4;29668:17;;29515:182;29714:10;29707:17;;;29414:318:::0;:::o;24099:103::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24188:6:::1;24169:16;:25;;;;24099:103:::0;:::o;15984:379::-;16059:4;16106:1;16084:24;;:10;:24;;;;16076:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16187:1;16168:21;;:7;:21;;;;16160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16274:6;16239:11;:23;16251:10;16239:23;;;;;;;;;;;;;;;:32;16263:7;16239:32;;;;;;;;;;;;;;;:41;;;;16317:7;16296:37;;16305:10;16296:37;;;16326:6;16296:37;;;;;;:::i;:::-;;;;;;;;16351:4;16344:11;;15984:379;;;;:::o;15545:88::-;15600:7;15618:12;;15611:19;;15545:88;:::o;26425:260::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26572:13:::1;26557:12;;:28;;;;;;;;;;;;;;;;;;26613:15;26596:14;;:32;;;;;;;;;;;;;;;;;;26659:18;26639:17;;:38;;;;;;;;;;;;;;;;;;26425:260:::0;;;:::o;28078:139::-;28142:4;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28166:43:::1;28189:4;28196;;;;;;;;;;;28202:6;28166:14;:43::i;:::-;28159:50;;28078:139:::0;;;:::o;16857:370::-;16957:4;17012:17;16977:11;:19;16989:6;16977:19;;;;;;;;;;;;;;;:31;16997:10;16977:31;;;;;;;;;;;;;;;;:52;16974:186;;17079:69;17115:6;17079:69;;;;;;;;;;;;;;;;;:11;:19;17091:6;17079:19;;;;;;;;;;;;;;;:31;17099:10;17079:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;17045:11;:19;17057:6;17045:19;;;;;;;;;;;;;;;:31;17065:10;17045:31;;;;;;;;;;;;;;;:103;;;;16974:186;17179:40;17193:6;17201:9;17212:6;17179:13;:40::i;:::-;17172:47;;16857:370;;;;;:::o;27926:144::-;27995:7;28022:9;;;;;;;;;;;:27;;;28050:11;28022:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28015:47;;27926:144;;;:::o;28229:142::-;28282:7;28309:54;28347:15;28357:4;;;;;;;;;;;28347:9;:15::i;:::-;28309:33;28326:15;28336:4;;;;;;;;;;;28326:9;:15::i;:::-;28309:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;28302:61;;28229:142;:::o;5470:103::-;5525:4;5560:5;;;;;;;;;;;5549:16;;:7;:16;;;5542:23;;5470:103;;;:::o;15211:71::-;15254:5;12099:1;15263:16;;15211:71;:::o;25489:136::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25579:38:::1;25602:6;25610;25579:22;:38::i;:::-;25489:136:::0;;:::o;24321:197::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24415:6:::1;24398:4;:14;24403:8;24398:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;24453:6;24452:7;24432;:17;24440:8;24432:17;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;24470:40;24493:8;24503:6;24470:22;:40::i;:::-;24321:197:::0;;:::o;27608:92::-;27655:9;;;;;;;;;;;:25;;;27681:10;27655:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27608:92::o;27712:115::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27786:9:::1;;;;;;;;;;;:25;;;27812:6;27786:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27712:115:::0;:::o;24692:134::-;24758:4;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24783:7:::1;:17;24791:8;24783:17;;;;;;;;;;;;;;;;;;;;;;;;;24782:18;:36;;;;;24804:4;:14;24809:8;24804:14;;;;;;;;;;;;;;;;;;;;;;;;;24782:36;24775:43;;24692:134:::0;;;:::o;16470:122::-;16525:4;16549:35;16557:7;16566:17;16549:7;:35::i;:::-;16542:42;;16470:122;;;:::o;28488:133::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28587:8:::1;28561:7;;:35;;;;;;;;;;;;;;;;;;28488:133:::0;:::o;25633:119::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25738:6:::1;25716:11;:19;25728:6;25716:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;25633:119:::0;;:::o;24214:95::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24295:6:::1;24282:10;:19;;;;24214:95:::0;:::o;26819:122::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26918:15:::1;26901:14;;:32;;;;;;;;;;;;;;;;;;26819:122:::0;:::o;13562:30::-;;;;;;;;;;;;;:::o;15639:105::-;15705:7;15723:9;:18;15733:7;15723:18;;;;;;;;;;;;;;;;15716:25;;15639:105;;;:::o;23986:101::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24073:6:::1;24055:15;:24;;;;23986:101:::0;:::o;26953:134::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27061:18:::1;27041:17;;:38;;;;;;;;;;;;;;;;;;26953:134:::0;:::o;29854:96::-;29908:4;29932:10;;;;;;;;;;;29925:17;;29854:96;:::o;23647:148::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23724:27:::1;23744:6;23724:15;:19;;:27;;;;:::i;:::-;23711:10;:40;;;;23775:12;23762:10;:25;;;;23647:148:::0;:::o;15446:69::-;15489:7;15507:5;;;;;;;;;;;15500:12;;15446:69;:::o;15288:75::-;15329:13;15353:7;;;;;;;;;;;;;;;;;15346:14;;15288:75;:::o;26693:114::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26786:13:::1;26771:12;;:28;;;;;;;;;;;;;;;;;;26693:114:::0;:::o;13183:19::-;;;;;;;;;;;;;:::o;16693:156::-;16773:4;16797:44;16811:10;16823:9;16834:6;16797:13;:44::i;:::-;16790:51;;16693:156;;;;:::o;30065:318::-;30123:4;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30140:15:::1;30169:10;;;;;;;;;;;30166:182;;;30208:5;30195:10;;:18;;;;;;;;;;;;;;;;;;30241:5;30228:18;;30166:182;;;30300:4;30287:10;;:17;;;;;;;;;;;;;;;;;;30332:4;30319:17;;30166:182;30365:10;30358:17;;;30065:318:::0;:::o;30489:96::-;30543:4;30567:10;;;;;;;;;;;30560:17;;30489:96;:::o;13446:25::-;;;;:::o;23803:175::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23896:1:::1;23887:6;:10;23879:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;23964:6;23944:17;:26;;;;23803:175:::0;:::o;29182:96::-;29236:4;29260:10;;;;;;;;;;;29253:17;;29182:96;:::o;28772:318::-;28830:4;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28847:15:::1;28876:10;;;;;;;;;;;28873:182;;;28915:5;28902:10;;:18;;;;;;;;;;;;;;;;;;28948:5;28935:18;;28873:182;;;29007:4;28994:10;;:17;;;;;;;;;;;;;;;;;;29039:4;29026:17;;28873:182;29072:10;29065:17;;;28772:318:::0;:::o;15750:133::-;15834:7;15852:11;:19;15864:6;15852:19;;;;;;;;;;;;;;;:28;15872:7;15852:28;;;;;;;;;;;;;;;;15845:35;;15750:133;;;;:::o;27278:151::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27381:7:::1;27367:11;;:21;;;;;;;;;;;;;;;;;;27415:6;27399:13;:22;;;;27278:151:::0;;:::o;5698:140::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5783:4:::1;5775:5;::::0;:12:::1;;;;;;;;;;;;;;;;;;5803:27;5824:5;::::0;::::1;;;;;;;;5803:27;;;;;;:::i;:::-;;;;;;;;5698:140:::0;:::o;27099:171::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27151:26:::1;27180:21;27151:50;;27220:12;;;;;;;;;;;27212:30;;:50;27243:18;27212:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27140:130;27099:171::o:0;25760:127::-;5343:19;5351:10;5343:7;:19::i;:::-;5335:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25873:6:::1;25847:15;:23;25863:6;25847:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;25760:127:::0;;:::o;13152:24::-;;;;;;;;;;;;;:::o;4624:132::-;4682:7;4709:39;4713:1;4716;4709:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4702:46;;4624:132;;;;:::o;3849:179::-;3907:7;3927:9;3943:1;3939;:5;;;;:::i;:::-;3927:17;;3968:1;3963;:6;;3955:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4019:1;4012:8;;;3849:179;;;;:::o;18933:568::-;19026:4;19069:1;19051:20;;:6;:20;;;;19043:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;19153:1;19132:23;;:9;:23;;;;19124:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19223:1;19214:6;:10;19206:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19301:53;19323:6;19301:53;;;;;;;;;;;;;;;;;:9;:17;19311:6;19301:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;19281:9;:17;19291:6;19281:17;;;;;;;;;;;;;;;:73;;;;19388:32;19413:6;19388:9;:20;19398:9;19388:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;19365:9;:20;19375:9;19365:20;;;;;;;;;;;;;;;:55;;;;19453:9;19436:35;;19445:6;19436:35;;;19464:6;19436:35;;;;;;:::i;:::-;;;;;;;;19489:4;19482:11;;18933:568;;;;;:::o;4176:190::-;4262:7;4295:1;4290;:6;;4298:12;4282:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4322:9;4338:1;4334;:5;;;;:::i;:::-;4322:17;;4357:1;4350:8;;;4176:190;;;;;:::o;17235:1686::-;17327:4;17370:1;17352:20;;:6;:20;;;;17344:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17454:1;17433:23;;:9;:23;;;;17425:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17524:1;17515:6;:10;17507:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17595:10;;;;;;;;;;;17592:67;;;17615:41;17630:6;17638:9;17649:6;17615:14;:41::i;:::-;17608:48;;;;17592:67;17679:39;17692:6;17700:9;17711:6;17679:12;:39::i;:::-;17729:41;17744:6;17752:9;17763:6;17729:14;:41::i;:::-;17786:16;:14;:16::i;:::-;17783:35;;;17805:10;:8;:10::i;:::-;17783:35;17841:38;17861:6;17869:9;17841:19;:38::i;:::-;17838:445;;;17904:15;17912:6;17904:7;:15::i;:::-;:29;;;;17923:10;:8;:10::i;:::-;17904:29;17896:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;17981:10;;;;;;;;;;;17977:128;;;18012:34;18028:6;18036:9;18012:15;:34::i;:::-;17977:128;18137:10;;;;;;;;;;;18133:139;;;18177:17;18184:9;18177:6;:17::i;:::-;18176:18;:37;;;;;18199:14;18206:6;18199;:14::i;:::-;18198:15;18176:37;18168:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;18133:139;17838:445;18315:53;18337:6;18315:53;;;;;;;;;;;;;;;;;:9;:17;18325:6;18315:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;18295:9;:17;18305:6;18295:17;;;;;;;;;;;;;;;:73;;;;18381:22;18406:32;18420:6;18428:9;18406:13;:32::i;:::-;:78;;18478:6;18406:78;;;18441:34;18449:6;18457:9;18468:6;18441:7;:34::i;:::-;18406:78;18381:103;;18528:40;18553:14;18528:9;:20;18538:9;18528:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;18505:9;:20;18515:9;18505:20;;;;;;;;;;;;;;;:63;;;;18594:4;;;;;;;;;;;18584:14;;:6;:14;;;;:45;;;;;18603:18;:26;18622:6;18603:26;;;;;;;;;;;;;;;;;;;;;;;;;18602:27;18584:45;18581:114;;;18636:9;;;;;;;;;;;:18;;;18655:6;18663:9;:17;18673:6;18663:17;;;;;;;;;;;;;;;;18636:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18632:61;;;;;;18581:114;18721:4;;;;;;;;;;;18708:17;;:9;:17;;;;:51;;;;;18730:18;:29;18749:9;18730:29;;;;;;;;;;;;;;;;;;;;;;;;;18729:30;18708:51;18705:126;;;18766:9;;;;;;;;;;;:18;;;18785:9;18796;:20;18806:9;18796:20;;;;;;;;;;;;;;;;18766:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18762:67;;;;;;18705:126;18865:9;18848:43;;18857:6;18848:43;;;18876:14;18848:43;;;;;;:::i;:::-;;;;;;;;18909:4;18902:11;;;17235:1686;;;;;;:::o;4034:136::-;4092:7;4119:43;4123:1;4126;4119:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4112:50;;4034:136;;;;:::o;25144:337::-;25251:4;25233:23;;:6;:23;;;;:41;;;;;25270:4;;;;;;;;;;;25260:14;;:6;:14;;;;25233:41;25225:50;;;;;;25315:6;25286:18;:26;25305:6;25286:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25335:6;25332:142;;;25357:9;;;;;;;;;;;:18;;;25376:6;25384:1;25357:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25332:142;;;25417:9;;;;;;;;;;;:18;;;25436:6;25444:9;:17;25454:6;25444:17;;;;;;;;;;;;;;;;25417:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25332:142;25144:337;;:::o;4762:189::-;4848:7;4880:1;4876;:5;4883:12;4868:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4907:9;4923:1;4919;:5;;;;:::i;:::-;4907:17;;4942:1;4935:8;;;4762:189;;;;;:::o;19509:410::-;19617:4;;;;;;;;;;;19607:14;;:6;:14;;;:304;;19841:16;;19831:6;:26;;:53;;;;19861:15;:23;19877:6;19861:23;;;;;;;;;;;;;;;;;;;;;;;;;19831:53;19823:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;19607:304;;;19655:15;;19645:6;:25;;:71;;;;;19693:23;19708:7;19693:10;;:14;;:23;;;;:::i;:::-;19674:15;:42;;19645:71;:106;;;;19730:21;19747:3;19730:12;;:16;;:21;;;;:::i;:::-;19720:6;:31;;19645:106;:136;;;;19755:15;:26;19771:9;19755:26;;;;;;;;;;;;;;;;;;;;;;;;;19645:136;19637:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;19607:304;19509:410;;;:::o;19931:427::-;20045:4;;;;;;;;;;;20035:14;;:6;:14;;;:45;;;;;20054:15;:26;20070:9;20054:26;;;;;;;;;;;;;;;;;;;;;;;;;20053:27;20035:45;20031:320;;;20116:23;20131:7;20116:10;;:14;;:23;;;;:::i;:::-;20097:15;:42;;:242;;20290:20;20307:2;20290:12;;:16;;:20;;;;:::i;:::-;20281:6;20258:20;20268:9;20258;:20::i;:::-;:29;;;;:::i;:::-;:52;20250:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;20097:242;;;20195:10;;20186:6;20163:20;20173:9;20163;:20::i;:::-;:29;;;;:::i;:::-;:42;20155:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;20097:242;20031:320;19931:427;;;:::o;22014:201::-;22063:4;22101;;;;;;;;;;;22087:18;;:10;:18;;;;:42;;;;;22119:10;;;;;;;;;;;22118:11;22087:42;:66;;;;;22142:11;;;;;;;;;;;22087:66;:120;;;;;22194:13;;22166:9;:24;22184:4;22166:24;;;;;;;;;;;;;;;;:41;;22087:120;22080:127;;22014:201;:::o;22227:1277::-;13727:4;13714:10;;:17;;;;;;;;;;;;;;;;;;22276:20:::1;22299:13;;22276:36;;22325:21;22363:1;22349:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22325:40;;22394:4;22376;22381:1;22376:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;22420:4;;;;;;;;;;;22410;22415:1;22410:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;22437:21;22461;22437:45;;22495:6;;;;;;;;;;;:57;;;22567:12;22594:1;22610:4;22637;22657:15;22495:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22694:17;22714:40;22740:13;22714:21;:25;;:40;;;;:::i;:::-;22694:60;;22765:24;22792:42;22825:8;;22792:28;22806:13;;22792:9;:13;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;22765:69;;22845:18;22866:36;22893:8;;22866:22;22880:7;;22866:9;:13;;:22;;;;:::i;:::-;:26;;:36;;;;:::i;:::-;22845:57;;22913:20;22936:38;22965:8;;22936:24;22950:9;;22936;:13;;:24;;;;:::i;:::-;:28;;:38;;;;:::i;:::-;22913:61;;22985:23;23011:65;23063:12;23011:47;23047:10;23011:31;23025:16;23011:9;:13;;:31;;;;:::i;:::-;:35;;:47;;;;:::i;:::-;:51;;:65;;;;:::i;:::-;22985:91;;23093:9;;;;;;;;;;;:17;;;23118:16;23093:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;23089:60;;;;;;23186:1;23173:10;:14;23169:89;;;23212:12;;;;;;;;;;;23204:30;;:42;23235:10;23204:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23169:89;23297:1;23282:12;:16;23278:95;;;23323:14;;;;;;;;;;;23315:32;;:46;23348:12;23315:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23278:95;23415:1;23397:15;:19;23393:104;;;23441:17;;;;;;;;;;;23433:35;;:52;23469:15;23433:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23393:104;22265:1239;;;;;;;;13749:5:::0;13736:10;;:18;;;;;;;;;;;;;;;;;;22227:1277::o;24975:157::-;25063:4;25098;;;;;;;;;;;25087:15;;:7;:15;;;:37;;;;25120:4;;;;;;;;;;;25106:18;;:10;:18;;;25087:37;25080:44;;24975:157;;;;:::o;23512:123::-;23555:4;23593:1;23579:10;;:15;;:48;;;;;23617:10;;23598:15;:29;;23579:48;23572:55;;23512:123;:::o;20370:374::-;20454:7;;;;;;;;;;;:19;;;20474:9;20485:4;;;;;;;;;;;20491:9;20454:47;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20450:104;;;20518:24;20526:9;20537:4;20518:7;:24::i;:::-;20450:104;20578:7;;;;;;;;;;;:19;;;20598:6;20606:4;;;;;;;;;;;20612:9;20578:44;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20574:98;;;20639:21;20647:6;20655:4;20639:7;:21::i;:::-;20574:98;20682:7;;;;;;;;;;;:21;;;20704:6;20712:9;20723;20682:51;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20370:374;;:::o;24838:125::-;24895:4;24920:7;:17;24928:8;24920:17;;;;;;;;;;;;;;;;;;;;;;;;;24919:18;:36;;;;;24941:4;:14;24946:8;24941:14;;;;;;;;;;;;;;;;;;;;;;;;;24919:36;24912:43;;24838:125;;;:::o;20752:161::-;20833:4;20859:11;:19;20871:6;20859:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;20882:11;:22;20894:9;20882:22;;;;;;;;;;;;;;;;;;;;;;;;;20859:45;20857:48;20850:55;;20752:161;;;;:::o;21099:907::-;21185:7;21205:17;21233:8;21276:4;;;;;;;;;;;21266:14;;:6;:14;;;21262:151;;21303:10;;;;;;;;;;;:28;;;;;21317:14;21324:6;21317;:14::i;:::-;21303:28;21297:34;;21262:151;;;21370:10;;;;;;;;;;;:31;;;;;21384:17;21391:9;21384:6;:17::i;:::-;21370:31;21364:37;;21262:151;21437:3;:53;;;;21478:12;21457:17;;21444:10;;:30;;;;:::i;:::-;:46;;21437:53;21433:525;;;21519:53;21557:14;;21519:33;21530:21;21549:1;21530:14;;:18;;:21;;;;:::i;:::-;21519:6;:10;;:33;;;;:::i;:::-;:37;;:53;;;;:::i;:::-;21507:65;;21615:40;21645:9;21615;:25;21625:14;;;;;;;;;;;21615:25;;;;;;;;;;;;;;;;:29;;:40;;;;:::i;:::-;21587:9;:25;21597:14;;;;;;;;;;;21587:25;;;;;;;;;;;;;;;:68;;;;21692:14;;;;;;;;;;;21675:43;;21684:6;21675:43;;;21708:9;21675:43;;;;;;:::i;:::-;;;;;;;;21433:525;;;21763:40;21788:14;;21763:20;21774:8;;21763:6;:10;;:20;;;;:::i;:::-;:24;;:40;;;;:::i;:::-;21751:52;;21845:39;21874:9;21845;:24;21863:4;21845:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;21818:9;:24;21836:4;21818:24;;;;;;;;;;;;;;;:66;;;;21929:4;21904:42;;21913:6;21904:42;;;21936:9;21904:42;;;;;;:::i;:::-;;;;;;;;21433:525;21977:21;21988:9;21977:6;:10;;:21;;;;:::i;:::-;21970:28;;;;21099:907;;;;;:::o;4372:246::-;4430:7;4459:1;4454;:6;4450:47;;;4484:1;4477:8;;;;4450:47;4507:9;4523:1;4519;:5;;;;:::i;:::-;4507:17;;4552:1;4547;4543;:5;;;;:::i;:::-;:10;4535:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4609:1;4602:8;;;4372:246;;;;;:::o;24530:150::-;24615:6;24598:4;:14;24603:8;24598:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;24632:40;24655:8;24665:6;24632:22;:40::i;:::-;24530:150;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:155::-;206:5;244:6;231:20;222:29;;260:41;295:5;260:41;:::i;:::-;152:155;;;;:::o;313:133::-;356:5;394:6;381:20;372:29;;410:30;434:5;410:30;:::i;:::-;313:133;;;;:::o;452:137::-;506:5;537:6;531:13;522:22;;553:30;577:5;553:30;:::i;:::-;452:137;;;;:::o;595:139::-;641:5;679:6;666:20;657:29;;695:33;722:5;695:33;:::i;:::-;595:139;;;;:::o;740:143::-;797:5;828:6;822:13;813:22;;844:33;871:5;844:33;:::i;:::-;740:143;;;;:::o;889:329::-;948:6;997:2;985:9;976:7;972:23;968:32;965:119;;;1003:79;;:::i;:::-;965:119;1123:1;1148:53;1193:7;1184:6;1173:9;1169:22;1148:53;:::i;:::-;1138:63;;1094:117;889:329;;;;:::o;1224:345::-;1291:6;1340:2;1328:9;1319:7;1315:23;1311:32;1308:119;;;1346:79;;:::i;:::-;1308:119;1466:1;1491:61;1544:7;1535:6;1524:9;1520:22;1491:61;:::i;:::-;1481:71;;1437:125;1224:345;;;;:::o;1575:474::-;1643:6;1651;1700:2;1688:9;1679:7;1675:23;1671:32;1668:119;;;1706:79;;:::i;:::-;1668:119;1826:1;1851:53;1896:7;1887:6;1876:9;1872:22;1851:53;:::i;:::-;1841:63;;1797:117;1953:2;1979:53;2024:7;2015:6;2004:9;2000:22;1979:53;:::i;:::-;1969:63;;1924:118;1575:474;;;;;:::o;2055:619::-;2132:6;2140;2148;2197:2;2185:9;2176:7;2172:23;2168:32;2165:119;;;2203:79;;:::i;:::-;2165:119;2323:1;2348:53;2393:7;2384:6;2373:9;2369:22;2348:53;:::i;:::-;2338:63;;2294:117;2450:2;2476:53;2521:7;2512:6;2501:9;2497:22;2476:53;:::i;:::-;2466:63;;2421:118;2578:2;2604:53;2649:7;2640:6;2629:9;2625:22;2604:53;:::i;:::-;2594:63;;2549:118;2055:619;;;;;:::o;2680:::-;2757:6;2765;2773;2822:2;2810:9;2801:7;2797:23;2793:32;2790:119;;;2828:79;;:::i;:::-;2790:119;2948:1;2973:53;3018:7;3009:6;2998:9;2994:22;2973:53;:::i;:::-;2963:63;;2919:117;3075:2;3101:53;3146:7;3137:6;3126:9;3122:22;3101:53;:::i;:::-;3091:63;;3046:118;3203:2;3229:53;3274:7;3265:6;3254:9;3250:22;3229:53;:::i;:::-;3219:63;;3174:118;2680:619;;;;;:::o;3305:468::-;3370:6;3378;3427:2;3415:9;3406:7;3402:23;3398:32;3395:119;;;3433:79;;:::i;:::-;3395:119;3553:1;3578:53;3623:7;3614:6;3603:9;3599:22;3578:53;:::i;:::-;3568:63;;3524:117;3680:2;3706:50;3748:7;3739:6;3728:9;3724:22;3706:50;:::i;:::-;3696:60;;3651:115;3305:468;;;;;:::o;3779:474::-;3847:6;3855;3904:2;3892:9;3883:7;3879:23;3875:32;3872:119;;;3910:79;;:::i;:::-;3872:119;4030:1;4055:53;4100:7;4091:6;4080:9;4076:22;4055:53;:::i;:::-;4045:63;;4001:117;4157:2;4183:53;4228:7;4219:6;4208:9;4204:22;4183:53;:::i;:::-;4173:63;;4128:118;3779:474;;;;;:::o;4259:345::-;4326:6;4375:2;4363:9;4354:7;4350:23;4346:32;4343:119;;;4381:79;;:::i;:::-;4343:119;4501:1;4526:61;4579:7;4570:6;4559:9;4555:22;4526:61;:::i;:::-;4516:71;;4472:125;4259:345;;;;:::o;4610:468::-;4675:6;4683;4732:2;4720:9;4711:7;4707:23;4703:32;4700:119;;;4738:79;;:::i;:::-;4700:119;4858:1;4883:50;4925:7;4916:6;4905:9;4901:22;4883:50;:::i;:::-;4873:60;;4829:114;4982:2;5008:53;5053:7;5044:6;5033:9;5029:22;5008:53;:::i;:::-;4998:63;;4953:118;4610:468;;;;;:::o;5084:329::-;5143:6;5192:2;5180:9;5171:7;5167:23;5163:32;5160:119;;;5198:79;;:::i;:::-;5160:119;5318:1;5343:53;5388:7;5379:6;5368:9;5364:22;5343:53;:::i;:::-;5333:63;;5289:117;5084:329;;;;:::o;5419:351::-;5489:6;5538:2;5526:9;5517:7;5513:23;5509:32;5506:119;;;5544:79;;:::i;:::-;5506:119;5664:1;5689:64;5745:7;5736:6;5725:9;5721:22;5689:64;:::i;:::-;5679:74;;5635:128;5419:351;;;;:::o;5776:911::-;5871:6;5879;5887;5895;5903;5952:3;5940:9;5931:7;5927:23;5923:33;5920:120;;;5959:79;;:::i;:::-;5920:120;6079:1;6104:53;6149:7;6140:6;6129:9;6125:22;6104:53;:::i;:::-;6094:63;;6050:117;6206:2;6232:53;6277:7;6268:6;6257:9;6253:22;6232:53;:::i;:::-;6222:63;;6177:118;6334:2;6360:53;6405:7;6396:6;6385:9;6381:22;6360:53;:::i;:::-;6350:63;;6305:118;6462:2;6488:53;6533:7;6524:6;6513:9;6509:22;6488:53;:::i;:::-;6478:63;;6433:118;6590:3;6617:53;6662:7;6653:6;6642:9;6638:22;6617:53;:::i;:::-;6607:63;;6561:119;5776:911;;;;;;;;:::o;6693:179::-;6762:10;6783:46;6825:3;6817:6;6783:46;:::i;:::-;6861:4;6856:3;6852:14;6838:28;;6693:179;;;;:::o;6878:108::-;6955:24;6973:5;6955:24;:::i;:::-;6950:3;6943:37;6878:108;;:::o;6992:118::-;7079:24;7097:5;7079:24;:::i;:::-;7074:3;7067:37;6992:118;;:::o;7146:732::-;7265:3;7294:54;7342:5;7294:54;:::i;:::-;7364:86;7443:6;7438:3;7364:86;:::i;:::-;7357:93;;7474:56;7524:5;7474:56;:::i;:::-;7553:7;7584:1;7569:284;7594:6;7591:1;7588:13;7569:284;;;7670:6;7664:13;7697:63;7756:3;7741:13;7697:63;:::i;:::-;7690:70;;7783:60;7836:6;7783:60;:::i;:::-;7773:70;;7629:224;7616:1;7613;7609:9;7604:14;;7569:284;;;7573:14;7869:3;7862:10;;7270:608;;;7146:732;;;;:::o;7884:109::-;7965:21;7980:5;7965:21;:::i;:::-;7960:3;7953:34;7884:109;;:::o;7999:167::-;8104:55;8153:5;8104:55;:::i;:::-;8099:3;8092:68;7999:167;;:::o;8172:147::-;8267:45;8306:5;8267:45;:::i;:::-;8262:3;8255:58;8172:147;;:::o;8325:364::-;8413:3;8441:39;8474:5;8441:39;:::i;:::-;8496:71;8560:6;8555:3;8496:71;:::i;:::-;8489:78;;8576:52;8621:6;8616:3;8609:4;8602:5;8598:16;8576:52;:::i;:::-;8653:29;8675:6;8653:29;:::i;:::-;8648:3;8644:39;8637:46;;8417:272;8325:364;;;;:::o;8695:366::-;8837:3;8858:67;8922:2;8917:3;8858:67;:::i;:::-;8851:74;;8934:93;9023:3;8934:93;:::i;:::-;9052:2;9047:3;9043:12;9036:19;;8695:366;;;:::o;9067:::-;9209:3;9230:67;9294:2;9289:3;9230:67;:::i;:::-;9223:74;;9306:93;9395:3;9306:93;:::i;:::-;9424:2;9419:3;9415:12;9408:19;;9067:366;;;:::o;9439:::-;9581:3;9602:67;9666:2;9661:3;9602:67;:::i;:::-;9595:74;;9678:93;9767:3;9678:93;:::i;:::-;9796:2;9791:3;9787:12;9780:19;;9439:366;;;:::o;9811:::-;9953:3;9974:67;10038:2;10033:3;9974:67;:::i;:::-;9967:74;;10050:93;10139:3;10050:93;:::i;:::-;10168:2;10163:3;10159:12;10152:19;;9811:366;;;:::o;10183:::-;10325:3;10346:67;10410:2;10405:3;10346:67;:::i;:::-;10339:74;;10422:93;10511:3;10422:93;:::i;:::-;10540:2;10535:3;10531:12;10524:19;;10183:366;;;:::o;10555:::-;10697:3;10718:67;10782:2;10777:3;10718:67;:::i;:::-;10711:74;;10794:93;10883:3;10794:93;:::i;:::-;10912:2;10907:3;10903:12;10896:19;;10555:366;;;:::o;10927:::-;11069:3;11090:67;11154:2;11149:3;11090:67;:::i;:::-;11083:74;;11166:93;11255:3;11166:93;:::i;:::-;11284:2;11279:3;11275:12;11268:19;;10927:366;;;:::o;11299:::-;11441:3;11462:67;11526:2;11521:3;11462:67;:::i;:::-;11455:74;;11538:93;11627:3;11538:93;:::i;:::-;11656:2;11651:3;11647:12;11640:19;;11299:366;;;:::o;11671:::-;11813:3;11834:67;11898:2;11893:3;11834:67;:::i;:::-;11827:74;;11910:93;11999:3;11910:93;:::i;:::-;12028:2;12023:3;12019:12;12012:19;;11671:366;;;:::o;12043:::-;12185:3;12206:67;12270:2;12265:3;12206:67;:::i;:::-;12199:74;;12282:93;12371:3;12282:93;:::i;:::-;12400:2;12395:3;12391:12;12384:19;;12043:366;;;:::o;12415:::-;12557:3;12578:67;12642:2;12637:3;12578:67;:::i;:::-;12571:74;;12654:93;12743:3;12654:93;:::i;:::-;12772:2;12767:3;12763:12;12756:19;;12415:366;;;:::o;12787:::-;12929:3;12950:67;13014:2;13009:3;12950:67;:::i;:::-;12943:74;;13026:93;13115:3;13026:93;:::i;:::-;13144:2;13139:3;13135:12;13128:19;;12787:366;;;:::o;13159:::-;13301:3;13322:67;13386:2;13381:3;13322:67;:::i;:::-;13315:74;;13398:93;13487:3;13398:93;:::i;:::-;13516:2;13511:3;13507:12;13500:19;;13159:366;;;:::o;13531:::-;13673:3;13694:67;13758:2;13753:3;13694:67;:::i;:::-;13687:74;;13770:93;13859:3;13770:93;:::i;:::-;13888:2;13883:3;13879:12;13872:19;;13531:366;;;:::o;13903:118::-;13990:24;14008:5;13990:24;:::i;:::-;13985:3;13978:37;13903:118;;:::o;14027:112::-;14110:22;14126:5;14110:22;:::i;:::-;14105:3;14098:35;14027:112;;:::o;14145:222::-;14238:4;14276:2;14265:9;14261:18;14253:26;;14289:71;14357:1;14346:9;14342:17;14333:6;14289:71;:::i;:::-;14145:222;;;;:::o;14373:442::-;14522:4;14560:2;14549:9;14545:18;14537:26;;14573:71;14641:1;14630:9;14626:17;14617:6;14573:71;:::i;:::-;14654:72;14722:2;14711:9;14707:18;14698:6;14654:72;:::i;:::-;14736;14804:2;14793:9;14789:18;14780:6;14736:72;:::i;:::-;14373:442;;;;;;:::o;14821:348::-;14950:4;14988:2;14977:9;14973:18;14965:26;;15001:71;15069:1;15058:9;15054:17;15045:6;15001:71;:::i;:::-;15082:80;15158:2;15147:9;15143:18;15134:6;15082:80;:::i;:::-;14821:348;;;;;:::o;15175:332::-;15296:4;15334:2;15323:9;15319:18;15311:26;;15347:71;15415:1;15404:9;15400:17;15391:6;15347:71;:::i;:::-;15428:72;15496:2;15485:9;15481:18;15472:6;15428:72;:::i;:::-;15175:332;;;;;:::o;15513:210::-;15600:4;15638:2;15627:9;15623:18;15615:26;;15651:65;15713:1;15702:9;15698:17;15689:6;15651:65;:::i;:::-;15513:210;;;;:::o;15729:258::-;15840:4;15878:2;15867:9;15863:18;15855:26;;15891:89;15977:1;15966:9;15962:17;15953:6;15891:89;:::i;:::-;15729:258;;;;:::o;15993:313::-;16106:4;16144:2;16133:9;16129:18;16121:26;;16193:9;16187:4;16183:20;16179:1;16168:9;16164:17;16157:47;16221:78;16294:4;16285:6;16221:78;:::i;:::-;16213:86;;15993:313;;;;:::o;16312:419::-;16478:4;16516:2;16505:9;16501:18;16493:26;;16565:9;16559:4;16555:20;16551:1;16540:9;16536:17;16529:47;16593:131;16719:4;16593:131;:::i;:::-;16585:139;;16312:419;;;:::o;16737:::-;16903:4;16941:2;16930:9;16926:18;16918:26;;16990:9;16984:4;16980:20;16976:1;16965:9;16961:17;16954:47;17018:131;17144:4;17018:131;:::i;:::-;17010:139;;16737:419;;;:::o;17162:::-;17328:4;17366:2;17355:9;17351:18;17343:26;;17415:9;17409:4;17405:20;17401:1;17390:9;17386:17;17379:47;17443:131;17569:4;17443:131;:::i;:::-;17435:139;;17162:419;;;:::o;17587:::-;17753:4;17791:2;17780:9;17776:18;17768:26;;17840:9;17834:4;17830:20;17826:1;17815:9;17811:17;17804:47;17868:131;17994:4;17868:131;:::i;:::-;17860:139;;17587:419;;;:::o;18012:::-;18178:4;18216:2;18205:9;18201:18;18193:26;;18265:9;18259:4;18255:20;18251:1;18240:9;18236:17;18229:47;18293:131;18419:4;18293:131;:::i;:::-;18285:139;;18012:419;;;:::o;18437:::-;18603:4;18641:2;18630:9;18626:18;18618:26;;18690:9;18684:4;18680:20;18676:1;18665:9;18661:17;18654:47;18718:131;18844:4;18718:131;:::i;:::-;18710:139;;18437:419;;;:::o;18862:::-;19028:4;19066:2;19055:9;19051:18;19043:26;;19115:9;19109:4;19105:20;19101:1;19090:9;19086:17;19079:47;19143:131;19269:4;19143:131;:::i;:::-;19135:139;;18862:419;;;:::o;19287:::-;19453:4;19491:2;19480:9;19476:18;19468:26;;19540:9;19534:4;19530:20;19526:1;19515:9;19511:17;19504:47;19568:131;19694:4;19568:131;:::i;:::-;19560:139;;19287:419;;;:::o;19712:::-;19878:4;19916:2;19905:9;19901:18;19893:26;;19965:9;19959:4;19955:20;19951:1;19940:9;19936:17;19929:47;19993:131;20119:4;19993:131;:::i;:::-;19985:139;;19712:419;;;:::o;20137:::-;20303:4;20341:2;20330:9;20326:18;20318:26;;20390:9;20384:4;20380:20;20376:1;20365:9;20361:17;20354:47;20418:131;20544:4;20418:131;:::i;:::-;20410:139;;20137:419;;;:::o;20562:::-;20728:4;20766:2;20755:9;20751:18;20743:26;;20815:9;20809:4;20805:20;20801:1;20790:9;20786:17;20779:47;20843:131;20969:4;20843:131;:::i;:::-;20835:139;;20562:419;;;:::o;20987:::-;21153:4;21191:2;21180:9;21176:18;21168:26;;21240:9;21234:4;21230:20;21226:1;21215:9;21211:17;21204:47;21268:131;21394:4;21268:131;:::i;:::-;21260:139;;20987:419;;;:::o;21412:::-;21578:4;21616:2;21605:9;21601:18;21593:26;;21665:9;21659:4;21655:20;21651:1;21640:9;21636:17;21629:47;21693:131;21819:4;21693:131;:::i;:::-;21685:139;;21412:419;;;:::o;21837:::-;22003:4;22041:2;22030:9;22026:18;22018:26;;22090:9;22084:4;22080:20;22076:1;22065:9;22061:17;22054:47;22118:131;22244:4;22118:131;:::i;:::-;22110:139;;21837:419;;;:::o;22262:222::-;22355:4;22393:2;22382:9;22378:18;22370:26;;22406:71;22474:1;22463:9;22459:17;22450:6;22406:71;:::i;:::-;22262:222;;;;:::o;22490:831::-;22753:4;22791:3;22780:9;22776:19;22768:27;;22805:71;22873:1;22862:9;22858:17;22849:6;22805:71;:::i;:::-;22886:80;22962:2;22951:9;22947:18;22938:6;22886:80;:::i;:::-;23013:9;23007:4;23003:20;22998:2;22987:9;22983:18;22976:48;23041:108;23144:4;23135:6;23041:108;:::i;:::-;23033:116;;23159:72;23227:2;23216:9;23212:18;23203:6;23159:72;:::i;:::-;23241:73;23309:3;23298:9;23294:19;23285:6;23241:73;:::i;:::-;22490:831;;;;;;;;:::o;23327:214::-;23416:4;23454:2;23443:9;23439:18;23431:26;;23467:67;23531:1;23520:9;23516:17;23507:6;23467:67;:::i;:::-;23327:214;;;;:::o;23628:132::-;23695:4;23718:3;23710:11;;23748:4;23743:3;23739:14;23731:22;;23628:132;;;:::o;23766:114::-;23833:6;23867:5;23861:12;23851:22;;23766:114;;;:::o;23886:99::-;23938:6;23972:5;23966:12;23956:22;;23886:99;;;:::o;23991:113::-;24061:4;24093;24088:3;24084:14;24076:22;;23991:113;;;:::o;24110:184::-;24209:11;24243:6;24238:3;24231:19;24283:4;24278:3;24274:14;24259:29;;24110:184;;;;:::o;24300:169::-;24384:11;24418:6;24413:3;24406:19;24458:4;24453:3;24449:14;24434:29;;24300:169;;;;:::o;24475:305::-;24515:3;24534:20;24552:1;24534:20;:::i;:::-;24529:25;;24568:20;24586:1;24568:20;:::i;:::-;24563:25;;24722:1;24654:66;24650:74;24647:1;24644:81;24641:107;;;24728:18;;:::i;:::-;24641:107;24772:1;24769;24765:9;24758:16;;24475:305;;;;:::o;24786:185::-;24826:1;24843:20;24861:1;24843:20;:::i;:::-;24838:25;;24877:20;24895:1;24877:20;:::i;:::-;24872:25;;24916:1;24906:35;;24921:18;;:::i;:::-;24906:35;24963:1;24960;24956:9;24951:14;;24786:185;;;;:::o;24977:348::-;25017:7;25040:20;25058:1;25040:20;:::i;:::-;25035:25;;25074:20;25092:1;25074:20;:::i;:::-;25069:25;;25262:1;25194:66;25190:74;25187:1;25184:81;25179:1;25172:9;25165:17;25161:105;25158:131;;;25269:18;;:::i;:::-;25158:131;25317:1;25314;25310:9;25299:20;;24977:348;;;;:::o;25331:191::-;25371:4;25391:20;25409:1;25391:20;:::i;:::-;25386:25;;25425:20;25443:1;25425:20;:::i;:::-;25420:25;;25464:1;25461;25458:8;25455:34;;;25469:18;;:::i;:::-;25455:34;25514:1;25511;25507:9;25499:17;;25331:191;;;;:::o;25528:96::-;25565:7;25594:24;25612:5;25594:24;:::i;:::-;25583:35;;25528:96;;;:::o;25630:104::-;25675:7;25704:24;25722:5;25704:24;:::i;:::-;25693:35;;25630:104;;;:::o;25740:90::-;25774:7;25817:5;25810:13;25803:21;25792:32;;25740:90;;;:::o;25836:126::-;25873:7;25913:42;25906:5;25902:54;25891:65;;25836:126;;;:::o;25968:77::-;26005:7;26034:5;26023:16;;25968:77;;;:::o;26051:86::-;26086:7;26126:4;26119:5;26115:16;26104:27;;26051:86;;;:::o;26143:144::-;26211:9;26244:37;26275:5;26244:37;:::i;:::-;26231:50;;26143:144;;;:::o;26293:121::-;26351:9;26384:24;26402:5;26384:24;:::i;:::-;26371:37;;26293:121;;;:::o;26420:126::-;26470:9;26503:37;26534:5;26503:37;:::i;:::-;26490:50;;26420:126;;;:::o;26552:113::-;26602:9;26635:24;26653:5;26635:24;:::i;:::-;26622:37;;26552:113;;;:::o;26671:307::-;26739:1;26749:113;26763:6;26760:1;26757:13;26749:113;;;26848:1;26843:3;26839:11;26833:18;26829:1;26824:3;26820:11;26813:39;26785:2;26782:1;26778:10;26773:15;;26749:113;;;26880:6;26877:1;26874:13;26871:101;;;26960:1;26951:6;26946:3;26942:16;26935:27;26871:101;26720:258;26671:307;;;:::o;26984:180::-;27032:77;27029:1;27022:88;27129:4;27126:1;27119:15;27153:4;27150:1;27143:15;27170:180;27218:77;27215:1;27208:88;27315:4;27312:1;27305:15;27339:4;27336:1;27329:15;27356:180;27404:77;27401:1;27394:88;27501:4;27498:1;27491:15;27525:4;27522:1;27515:15;27542:180;27590:77;27587:1;27580:88;27687:4;27684:1;27677:15;27711:4;27708:1;27701:15;27851:117;27960:1;27957;27950:12;27974:102;28015:6;28066:2;28062:7;28057:2;28050:5;28046:14;28042:28;28032:38;;27974:102;;;:::o;28082:222::-;28222:34;28218:1;28210:6;28206:14;28199:58;28291:5;28286:2;28278:6;28274:15;28267:30;28082:222;:::o;28310:221::-;28450:34;28446:1;28438:6;28434:14;28427:58;28519:4;28514:2;28506:6;28502:15;28495:29;28310:221;:::o;28537:174::-;28677:26;28673:1;28665:6;28661:14;28654:50;28537:174;:::o;28717:177::-;28857:29;28853:1;28845:6;28841:14;28834:53;28717:177;:::o;28900:171::-;29040:23;29036:1;29028:6;29024:14;29017:47;28900:171;:::o;29077:181::-;29217:33;29213:1;29205:6;29201:14;29194:57;29077:181;:::o;29264:220::-;29404:34;29400:1;29392:6;29388:14;29381:58;29473:3;29468:2;29460:6;29456:15;29449:28;29264:220;:::o;29490:172::-;29630:24;29626:1;29618:6;29614:14;29607:48;29490:172;:::o;29668:182::-;29808:34;29804:1;29796:6;29792:14;29785:58;29668:182;:::o;29856:228::-;29996:34;29992:1;29984:6;29980:14;29973:58;30065:11;30060:2;30052:6;30048:15;30041:36;29856:228;:::o;30090:224::-;30230:34;30226:1;30218:6;30214:14;30207:58;30299:7;30294:2;30286:6;30282:15;30275:32;30090:224;:::o;30320:160::-;30460:12;30456:1;30448:6;30444:14;30437:36;30320:160;:::o;30486:223::-;30626:34;30622:1;30614:6;30610:14;30603:58;30695:6;30690:2;30682:6;30678:15;30671:31;30486:223;:::o;30715:225::-;30855:34;30851:1;30843:6;30839:14;30832:58;30924:8;30919:2;30911:6;30907:15;30900:33;30715:225;:::o;30946:122::-;31019:24;31037:5;31019:24;:::i;:::-;31012:5;31009:35;30999:63;;31058:1;31055;31048:12;30999:63;30946:122;:::o;31074:138::-;31155:32;31181:5;31155:32;:::i;:::-;31148:5;31145:43;31135:71;;31202:1;31199;31192:12;31135:71;31074:138;:::o;31218:116::-;31288:21;31303:5;31288:21;:::i;:::-;31281:5;31278:32;31268:60;;31324:1;31321;31314:12;31268:60;31218:116;:::o;31340:122::-;31413:24;31431:5;31413:24;:::i;:::-;31406:5;31403:35;31393:63;;31452:1;31449;31442:12;31393:63;31340:122;:::o

Swarm Source

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