ETH Price: $3,455.70 (+1.68%)

Token

Unbase Protocol (UNB)
 

Overview

Max Total Supply

443,705.3125 UNB

Holders

118

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,218.265909214159274927 UNB

Value
$0.00
0x2e4ebc52ad387ba720ca175c6d355afc376954e6
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
UnbaseToken

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-19
*/

pragma solidity 0.6.12;

// SPDX-License-Identifier: MIT

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

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


contract Ownable is Context {
    address private _owner;

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

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

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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


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

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

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


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

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

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


contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) internal _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

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

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

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

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

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

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

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

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

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

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

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

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}


interface IUniswapSync {
    function sync() external;
}

/**
 * @title UNBASE ERC20 token
 *      UNBASE is a normal ERC20 token, but its supply can be adjusted by splitting 
 *      tokens proportionally across all wallets (forked Base Protocol's logic), and 
 *      it reflects a transaction fee directly into all holder's wallet seemlessly 
 *      without any transfer (forked Reflect's logic).
 *
 *      UNBASE balances are internally represented with a hidden denomination, 'shares'.
 *      The circulating supply of 'shares' decrease over time due to the transaction fee.
 *      The UNBASE balance is then reflected from the share balance (using a conversion rate
 *      between 'shares' and 'UNBASE' taking into account the circulating supply). Exchanges' 
 *      wallets such as the Uniswap Pool are excluded from the circulating supply, therefore 
 *      only holders are earning from the transaction fee. 
 * 
 *      We also support splitting the currency in expansion by modifying the UNBASE total supply
 *      as well as the excluded wallets' balances, allowing the supply to contract and the price 
 *      to go up at each rebase event.
 */
contract UnbaseToken is ERC20, Ownable {
    // PLEASE READ BEFORE CHANGING ANY ACCOUNTING OR MATH
    // Anytime there is division, there is a risk of numerical instability from rounding errors. In
    // order to minimize this risk, we adhere to the following guidelines:
    // 1) The conversion rate adopted is the number of shares that equals 1 UNBASE.
    //    The inverse rate must not be used--totalShares is always the numerator and _totalSupply is
    //    always the denominator. (i.e. If you want to convert shares to UNBASE instead of
    //    multiplying by the inverse rate, you should divide by the normal rate)
    // 2) Share balances converted into UnbaseToken are always rounded down (truncated).
    //
    // We make the following guarantees:
    // - If address 'A' transfers x UnbaseToken to address 'B'. A's resulting external balance will
    //   be decreased by precisely x UnbaseToken, and B's external balance will be precisely
    //   increased by x UnbaseToken.
    //
    // We do not guarantee that the sum of all balances equals the result of calling totalSupply().
    // This is because, for any conversion function 'f()' that has non-zero rounding error,
    // f(x0) + f(x1) + ... + f(xn) is not always equal to f(x0 + x1 + ... xn).
    using SafeMath for uint256;

    event LogRebase(uint256 indexed _epoch, uint256 totalSupply);
    event LogUserBanStatusUpdated(address user, bool banned);

    modifier validRecipient(address to) {
        require(to != address(0x0));
        require(to != address(this));
        _;
    }

    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    uint256 private constant INITIAL_SUPPLY = 1 * 10**6 * 10**DECIMALS;
    uint256 private constant INITIAL_SHARES = (MAX_UINT256) - (MAX_UINT256 % INITIAL_SUPPLY);

    uint256 private _totalShares;
    uint256 private _totalSupply;
    address public _unbaseUniswapLPContract;

    uint256 private _epoch; 
    uint256 public _unbasePercent = 15;         // 15 = 15%. At each rebase event, _totalSupply is reduced by unbasePercent. Value can be modified by Owner.
    uint256 public _transferFee = 0;            // 3 = 3%. For each transfer, the tax (_transferFee * amount) is reflected seamlessly in all holders' balances. Value can be modified by Owner.
    uint256 private _unbaseFeeTotal;            
    
    mapping(address => uint256) private _shareBalances;
    mapping (address => uint256) private _unbaseBalances;    
    mapping(address => bool) public bannedUsers;
    mapping (address => mapping (address => uint256)) private _allowedUNBASE;       // This is denominated in UnbaseToken, because the shares-UNBASE conversion might change before it's fully paid.

    uint256 public antiBotTimer;
    bool public transfersPaused;
    bool public rebasesPaused;

    mapping(address => bool) public transferPauseExemptList;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;


    constructor() public ERC20("Unbase Protocol", "UNB") { 
        _totalShares = INITIAL_SHARES;
        _totalSupply = INITIAL_SUPPLY;
        _shareBalances[owner()] = _totalShares;

        // Ban the Kucoin hacker
        bannedUsers[0xeB31973E0FeBF3e3D7058234a5eBbAe1aB4B8c23] = true;

        emit Transfer(address(0x0), owner(), _totalSupply);
  }
  

        
    // After that limit are the functions from Base Protocol's contract,
    // modified to allow a seemless rebase of the supply once a day.
    // The transfer() and transferFrom() functions are not included as 
    // they derive mostly from Reflect's logic.

    function setAntiBotTimer()
        public
        onlyOwner
    {
        antiBotTimer = now;
    }

    function setTransfersPaused(bool _transfersPaused)
        public
        onlyOwner
    {
        transfersPaused = _transfersPaused;
    }

    function setTransferPauseExempt(address user, bool exempt)
        public
        onlyOwner
    {
        if (exempt) {
            transferPauseExemptList[user] = true;
        } else {
            delete transferPauseExemptList[user];
        }
    }

    function setRebasesPaused(bool _rebasesPaused)
        public
        onlyOwner
    {
        rebasesPaused = _rebasesPaused;
    }

    function setUnbasePercent(uint256 _newUnbasePercent)
        public
        onlyOwner
    {
        _unbasePercent = _newUnbasePercent;
    }
    
    function setTransferFee(uint256 _newTransferFee)
        public
        onlyOwner
    {
        _transferFee = _newTransferFee;
    }
    
    function setUnbaseUniswapLPContract(address _newUnbaseUniswapLPContract)
        public
        onlyOwner
    {
        _unbaseUniswapLPContract = _newUnbaseUniswapLPContract;
    }
    
    function rebase()
        public
        onlyOwner
        returns (uint256)
    {
        require(!rebasesPaused, "rebases paused");
        
        _totalSupply = _totalSupply.sub(_totalSupply.mul(_unbasePercent).div(100));
        _unbaseFeeTotal = _unbaseFeeTotal.sub(_unbaseFeeTotal.mul(_unbasePercent).div(100));
        // We also modify the UNBASE supply held in excluded accounts to correctly reflect the circulating supply after the rebase event //
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_unbaseBalances[_excluded[i]] > 0) {
                _unbaseBalances[_excluded[i]] = _unbaseBalances[_excluded[i]].sub(_unbaseBalances[_excluded[i]].mul(_unbasePercent).div(100));
            }
        }
        _epoch = _epoch.add(1);

        emit LogRebase(_epoch, _totalSupply);
        IUniswapSync(_unbaseUniswapLPContract).sync();
        return _totalSupply;
    }

    function getTotalShares()
        public
        view
        returns (uint256)
    {
        return _totalShares;
    }

    function sharesOf(address user)
        public
        view
        returns (uint256)
    {
        return _shareBalances[user];
    }

    function setUserBanStatus(address user, bool banned)
        public
        onlyOwner
    {
        if (banned) {
            bannedUsers[user] = true;
        } else {
            delete bannedUsers[user];
        }
        emit LogUserBanStatusUpdated(user, banned);
    }

    function totalSupply()
        public
        override
        view
        returns (uint256)
    {
        return _totalSupply;
    }
    
    function transfer(address recipient, uint256 amount) 
        public 
        override(ERC20) 
        validRecipient(recipient)
        returns (bool) 
    {
        require(bannedUsers[msg.sender] == false, "you are banned");
        require(!transfersPaused || transferPauseExemptList[msg.sender], "paused");
        require(now.sub(antiBotTimer) >= 300 || amount <= 2000 * 10**DECIMALS, "Max buy 2000 UNB right after launch");
        
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 value)
        public
        override
        returns (bool)
    {
        require(!transfersPaused || transferPauseExemptList[msg.sender], "paused");

        _allowedUNBASE[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) 
        public 
        override 
        validRecipient(recipient)
        returns (bool) 
    {
        require(bannedUsers[msg.sender] == false, "you are banned");
        require(!transfersPaused || transferPauseExemptList[msg.sender], "paused");
        
        _transfer(sender, recipient, amount);
        approve(sender, _allowedUNBASE[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        override
        returns (bool)
    {
        require(!transfersPaused || transferPauseExemptList[msg.sender], "paused");

        _allowedUNBASE[msg.sender][spender] = _allowedUNBASE[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowedUNBASE[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        override
        returns (bool)
    {
        require(!transfersPaused || transferPauseExemptList[msg.sender], "paused");

        uint256 oldValue = _allowedUNBASE[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedUNBASE[msg.sender][spender] = 0;
        } else {
            _allowedUNBASE[msg.sender][spender] = oldValue.sub(subtractedValue);
        }
        emit Approval(msg.sender, spender, _allowedUNBASE[msg.sender][spender]);
        return true;
    }
    
        
    // After that limit are the functions implementing Reflect's logic to
    // distribute transaction fees to all holders seemlessly.
    // It includes the _transfer() and transferFrom() functions implementing 
    // both Base Protocol and Reflect's logic. 
    
    
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _unbaseBalances[account];
        return tokenFromReflection(_shareBalances[account]);
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _unbaseFeeTotal;
    }

    function reflect(uint256 unbaseAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 shareAmount,,,,) = _getValues(unbaseAmount);
        _shareBalances[sender] = _shareBalances[sender].sub(shareAmount);
        _totalShares = _totalShares.sub(shareAmount);
        _unbaseFeeTotal = _unbaseFeeTotal.add(unbaseAmount);
    }

    function reflectionFromToken(uint256 unbaseAmount, bool deductTransferFee) public view returns(uint256) {
        require(unbaseAmount <= _totalSupply, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 shareAmount,,,,) = _getValues(unbaseAmount);
            return shareAmount;
        } else {
            (,uint256 shareTransferAmount,,,) = _getValues(unbaseAmount);
            return shareTransferAmount;
        }
    }

    function tokenFromReflection(uint256 shareAmount) public view returns(uint256) {
        require(shareAmount <= _totalShares, "Amount must be less than _totalShares");
        uint256 currentRate = _getRateForReflection();
        return shareAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_shareBalances[account] > 0) {
            _unbaseBalances[account] = tokenFromReflection(_shareBalances[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _unbaseBalances[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function _transfer(address sender, address recipient, uint256 amount) internal override(ERC20) {
        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 (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 unbaseAmount) private {
        (uint256 shareAmount, uint256 shareTransferAmount, uint256 shareFee, uint256 unbaseTransferAmount, uint256 unbaseFee) = _getValues(unbaseAmount);
        _shareBalances[sender] = _shareBalances[sender].sub(shareAmount);
        _shareBalances[recipient] = _shareBalances[recipient].add(shareTransferAmount);       
        _reflectFee(shareFee, unbaseFee);
        emit Transfer(sender, recipient, unbaseTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 unbaseAmount) private {
        (uint256 shareAmount, uint256 shareTransferAmount, uint256 shareFee, uint256 unbaseTransferAmount, uint256 unbaseFee) = _getValues(unbaseAmount);
        _shareBalances[sender] = _shareBalances[sender].sub(shareAmount);
        _unbaseBalances[recipient] = _unbaseBalances[recipient].add(unbaseTransferAmount);
        _shareBalances[recipient] = _shareBalances[recipient].add(shareTransferAmount);           
        _reflectFee(shareFee, unbaseFee);
        emit Transfer(sender, recipient, unbaseTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 unbaseAmount) private {
        (uint256 shareAmount, uint256 shareTransferAmount, uint256 shareFee, uint256 unbaseTransferAmount, uint256 unbaseFee) = _getValues(unbaseAmount);
        _unbaseBalances[sender] = _unbaseBalances[sender].sub(unbaseAmount);
        _shareBalances[sender] = _shareBalances[sender].sub(shareAmount);
        _shareBalances[recipient] = _shareBalances[recipient].add(shareTransferAmount);   
        _reflectFee(shareFee, unbaseFee);
        emit Transfer(sender, recipient, unbaseTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 unbaseAmount) private {
        (uint256 shareAmount, uint256 shareTransferAmount, uint256 shareFee, uint256 unbaseTransferAmount, uint256 unbaseFee) = _getValues(unbaseAmount);
        _unbaseBalances[sender] = _unbaseBalances[sender].sub(unbaseAmount);
        _shareBalances[sender] = _shareBalances[sender].sub(shareAmount);
        _unbaseBalances[recipient] = _unbaseBalances[recipient].add(unbaseTransferAmount);
        _shareBalances[recipient] = _shareBalances[recipient].add(shareTransferAmount);        
        _reflectFee(shareFee, unbaseFee);
        emit Transfer(sender, recipient, unbaseTransferAmount);
    }

    function _reflectFee(uint256 shareFee, uint256 unbaseFee) private {
        _totalShares = _totalShares.sub(shareFee);
        _unbaseFeeTotal = _unbaseFeeTotal.add(unbaseFee);
    }

    function _getValues(uint256 unbaseAmount) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 unbaseTransferAmount, uint256 unbaseFee) = _getTValues(unbaseAmount);
        uint256 currentRate =  _getRateForReflection();
        (uint256 shareAmount, uint256 shareTransferAmount, uint256 shareFee) = _getRValues(unbaseAmount, unbaseFee, currentRate);
        return (shareAmount, shareTransferAmount, shareFee, unbaseTransferAmount, unbaseFee);
    }

    function _getTValues(uint256 unbaseAmount) private view returns (uint256, uint256) {
        uint256 unbaseFee = unbaseAmount.div(100).mul(_transferFee);
        uint256 unbaseTransferAmount = unbaseAmount.sub(unbaseFee);
        return (unbaseTransferAmount, unbaseFee);
    }

    function _getRValues(uint256 unbaseAmount, uint256 unbaseFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 shareAmount = unbaseAmount.mul(currentRate);
        uint256 shareFee = unbaseFee.mul(currentRate);
        uint256 shareTransferAmount = shareAmount.sub(shareFee);
        return (shareAmount, shareTransferAmount, shareFee);
    }

    function _getRateForReflection() private view returns(uint256) {
        (uint256 shareSupply, uint256 unbaseSupply) = _getCurrentSupplyForReflection();
        return shareSupply.div(unbaseSupply);
    }

    function _getCurrentSupplyForReflection() private view returns(uint256, uint256) {
        uint256 shareSupply = _totalShares;
        uint256 unbaseSupply = _totalSupply;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_shareBalances[_excluded[i]] > shareSupply || _unbaseBalances[_excluded[i]] > unbaseSupply) return (_totalShares, _totalSupply);
            shareSupply = shareSupply.sub(_shareBalances[_excluded[i]]);
            unbaseSupply = unbaseSupply.sub(_unbaseBalances[_excluded[i]]);
        }
        if (shareSupply < _totalShares.div(_totalSupply)) return (_totalShares, _totalSupply);
        return (shareSupply, unbaseSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"banned","type":"bool"}],"name":"LogUserBanStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_unbasePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_unbaseUniswapLPContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bannedUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTotalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebasesPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"unbaseAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"unbaseAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAntiBotTimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_rebasesPaused","type":"bool"}],"name":"setRebasesPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTransferFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setTransferPauseExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_transfersPaused","type":"bool"}],"name":"setTransfersPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newUnbasePercent","type":"uint256"}],"name":"setUnbasePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newUnbaseUniswapLPContract","type":"address"}],"name":"setUnbaseUniswapLPContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"banned","type":"bool"}],"name":"setUserBanStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"sharesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shareAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"transferPauseExemptList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transfersPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

6080604052600f600a556000600b553480156200001b57600080fd5b506040518060400160405280600f81526020017f556e626173652050726f746f636f6c00000000000000000000000000000000008152506040518060400160405280600381526020017f554e4200000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000a092919062000329565b508060049080519060200190620000b992919062000329565b506012600560006101000a81548160ff021916908360ff16021790555050506000620000ea620002f760201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506012600a0a620f424002600019816200019e57fe5b06600019036006819055506012600a0a620f424002600781905550600654600d6000620001d0620002ff60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600f600073eb31973e0febf3e3d7058234a5ebbae1ab4b8c2373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200028a620002ff60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a3620003cf565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200036c57805160ff19168380011785556200039d565b828001600101855582156200039d579182015b828111156200039c5782518255916020019190600101906200037f565b5b509050620003ac9190620003b0565b5090565b5b80821115620003cb576000816000905550600101620003b1565b5090565b614f7380620003df6000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c8063777e63ed1161013b578063b4bccee0116100b8578063f2cc0c181161007c578063f2cc0c1814610af8578063f2fde38b14610b3c578063f442b57014610b80578063f5eb42dc14610bda578063f84354f114610c3257610248565b8063b4bccee0146109aa578063c2a88347146109d8578063cba0e99614610a08578063d5002f2e14610a62578063dd62ed3e14610a8057610248565b806395d89b41116100ff57806395d89b411461080d5780639ff20ef414610890578063a457c2d7146108c4578063a9059cbb14610928578063af14052c1461098c57610248565b8063777e63ed146107275780638988d078146107315780638d0bc4281461078b5780638da5cb5b146107ab5780638f02bb5b146107df57610248565b806339509351116101c95780634563f30a1161018d5780634563f30a1461063757806367b8c3191461065757806370a08231146106a7578063715018a6146106ff578063774662f91461070957610248565b806339509351146105195780633be793101461057d5780633df9a8d21461059b57806344e46dff146105b95780634549b039146105e957610248565b806318160ddd1161021057806318160ddd146103c45780631fc3371a146103e257806323b872dd146104325780632d838119146104b6578063313ce567146104f857610248565b8063053ab1821461024d57806306fdde031461027b578063095ea7b3146102fe5780630deef44f1461036257806313114a9d146103a6575b600080fd5b6102796004803603602081101561026357600080fd5b8101908080359060200190929190505050610c76565b005b610283610e06565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102c35780820151818401526020810190506102a8565b50505050905090810190601f1680156102f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61034a6004803603604081101561031457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ea8565b60405180821515815260200191505060405180910390f35b6103a46004803603602081101561037857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611071565b005b6103ae61117f565b6040518082815260200191505060405180910390f35b6103cc611189565b6040518082815260200191505060405180910390f35b610430600480360360408110156103f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611193565b005b61049e6004803603606081101561044857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611314565b60405180821515815260200191505060405180910390f35b6104e2600480360360208110156104cc57600080fd5b81019080803590602001909291905050506115f8565b6040518082815260200191505060405180910390f35b61050061167c565b604051808260ff16815260200191505060405180910390f35b6105656004803603604081101561052f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611693565b60405180821515815260200191505060405180910390f35b610585611966565b6040518082815260200191505060405180910390f35b6105a361196c565b6040518082815260200191505060405180910390f35b6105e7600480360360208110156105cf57600080fd5b81019080803515159060200190929190505050611972565b005b610621600480360360408110156105ff57600080fd5b8101908080359060200190929190803515159060200190929190505050611a59565b6040518082815260200191505060405180910390f35b61063f611b0e565b60405180821515815260200191505060405180910390f35b6106a56004803603604081101561066d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611b21565b005b6106e9600480360360208110156106bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cf9565b6040518082815260200191505060405180910390f35b610707611de4565b005b610711611f6f565b6040518082815260200191505060405180910390f35b61072f611f75565b005b6107736004803603602081101561074757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612048565b60405180821515815260200191505060405180910390f35b610793612068565b60405180821515815260200191505060405180910390f35b6107b361207b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61080b600480360360208110156107f557600080fd5b81019080803590602001909291905050506120a5565b005b610815612179565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085557808201518184015260208101905061083a565b50505050905090810190601f1680156108825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61089861221b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610910600480360360408110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612241565b60405180821515815260200191505060405180910390f35b6109746004803603604081101561093e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125a9565b60405180821515815260200191505060405180910390f35b61099461285b565b6040518082815260200191505060405180910390f35b6109d6600480360360208110156109c057600080fd5b8101908080359060200190929190505050612d52565b005b610a06600480360360208110156109ee57600080fd5b81019080803515159060200190929190505050612e26565b005b610a4a60048036036020811015610a1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f0d565b60405180821515815260200191505060405180910390f35b610a6a612f63565b6040518082815260200191505060405180910390f35b610ae260048036036040811015610a9657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f6d565b6040518082815260200191505060405180910390f35b610b3a60048036036020811015610b0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ff4565b005b610b7e60048036036020811015610b5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613310565b005b610bc260048036036020811015610b9657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613520565b60405180821515815260200191505060405180910390f35b610c1c60048036036020811015610bf057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613540565b6040518082815260200191505060405180910390f35b610c7460048036036020811015610c4857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613589565b005b6000610c80613915565b9050601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614f12602c913960400191505060405180910390fd5b6000610d308361391d565b505050509050610d8881600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610de08160065461397590919063ffffffff16565b600681905550610dfb83600c546139bf90919063ffffffff16565b600c81905550505050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e9e5780601f10610e7357610100808354040283529160200191610e9e565b820191906000526020600020905b815481529060010190602001808311610e8157829003601f168201915b5050505050905090565b6000601260009054906101000a900460ff161580610f0f5750601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610f81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f706175736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b611079613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600c54905090565b6000600754905090565b61119b613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80156112c0576001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611310565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561135157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561138a57600080fd5b60001515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f796f75206172652062616e6e656400000000000000000000000000000000000081525060200191505060405180910390fd5b601260009054906101000a900460ff1615806114b55750601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f706175736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611532858585613a47565b6115eb856115e685604051806060016040528060288152602001614e5460289139601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061159c613915565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ea09092919063ffffffff16565b610ea8565b5060019150509392505050565b6000600654821115611655576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614eed6025913960400191505060405180910390fd5b600061165f613f60565b90506116748184613f8b90919063ffffffff16565b915050919050565b6000600560009054906101000a900460ff16905090565b6000601260009054906101000a900460ff1615806116fa5750601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61176c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f706175736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6117fb82601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600a5481565b600b5481565b61197a613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000600754831115611ad3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611af2576000611ae38461391d565b50505050905080915050611b08565b6000611afd8461391d565b505050915050809150505b92915050565b601260009054906101000a900460ff1681565b611b29613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611beb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8015611c4e576001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c9e565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b7f9d96fd0be79238fe0114d59e66ab2107b1369256adc03ad3f29b6deb2bc7508a8282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d9457600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ddf565b611ddc600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f8565b90505b919050565b611dec613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b611f7d613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461203f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b42601181905550565b600f6020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120ad613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b8190555050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122115780601f106121e657610100808354040283529160200191612211565b820191906000526020600020905b8154815290600101906020018083116121f457829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601260009054906101000a900460ff1615806122a85750601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61231a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f706175736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310612429576000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124bd565b61243c838261397590919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125e657600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561261f57600080fd5b60001515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146126e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f796f75206172652062616e6e656400000000000000000000000000000000000081525060200191505060405180910390fd5b601260009054906101000a900460ff16158061274a5750601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f706175736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61012c6127d46011544261397590919063ffffffff16565b1015806127e957506012600a0a6107d0028311155b61283e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ea56023913960400191505060405180910390fd5b612850612849613915565b8585613a47565b600191505092915050565b6000612865613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612927576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601260019054906101000a900460ff16156129aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f726562617365732070617573656400000000000000000000000000000000000081525060200191505060405180910390fd5b6129e86129d760646129c9600a54600754613fd590919063ffffffff16565b613f8b90919063ffffffff16565b60075461397590919063ffffffff16565b600781905550612a2c612a1b6064612a0d600a54600c54613fd590919063ffffffff16565b613f8b90919063ffffffff16565b600c5461397590919063ffffffff16565b600c8190555060005b601580549050811015612c6f576000600e600060158481548110612a5557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612c6257612be7612b626064612b54600a54600e600060158881548110612ae057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613fd590919063ffffffff16565b613f8b90919063ffffffff16565b600e600060158581548110612b7357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600e600060158481548110612bf857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050612a35565b50612c8660016009546139bf90919063ffffffff16565b6009819055506009547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f26007546040518082815260200191505060405180910390a2600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d3257600080fd5b505af1158015612d46573d6000803e3d6000fd5b50505050600754905090565b612d5a613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b612e2e613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ef0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600654905090565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612ffc613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561317e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156132525761320e600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f8565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506015819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613318613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614e0d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b613591613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613653576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c726561647920696e636c75646564000000000081525060200191505060405180910390fd5b60005b601580549050811015613911578173ffffffffffffffffffffffffffffffffffffffff166015828154811061374657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613904576015600160158054905003815481106137a257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601582815481106137da57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060158054806138ca57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613911565b8080600101915050613715565b5050565b600033905090565b60008060008060008060006139318861405b565b91509150600061393f613f60565b905060008060006139518c86866140ae565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006139b783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ea0565b905092915050565b600080828401905083811015613a3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614ec86025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614dea6023913960400191505060405180910390fd5b60008111613bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614e7c6029913960400191505060405180910390fd5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c4f5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c6457613c5f83838361410c565b613e9b565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613d075750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d1c57613d1783838361435f565b613e9a565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613dc05750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613dd557613dd08383836145b2565b613e99565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613e775750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613e8c57613e87838383614770565b613e98565b613e978383836145b2565b5b5b5b5b505050565b6000838311158290613f4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f12578082015181840152602081019050613ef7565b50505050905090810190601f168015613f3f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613f6d614a58565b91509150613f848183613f8b90919063ffffffff16565b9250505090565b6000613fcd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614ce9565b905092915050565b600080831415613fe85760009050614055565b6000828402905082848281613ff957fe5b0414614050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e336021913960400191505060405180910390fd5b809150505b92915050565b6000806000614088600b5461407a606487613f8b90919063ffffffff16565b613fd590919063ffffffff16565b9050600061409f828661397590919063ffffffff16565b90508082935093505050915091565b6000806000806140c78588613fd590919063ffffffff16565b905060006140de8688613fd590919063ffffffff16565b905060006140f5828461397590919063ffffffff16565b905082818395509550955050505093509350939050565b600080600080600061411d8661391d565b9450945094509450945061417986600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061420e85600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142a384600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142f08382614daf565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060008060006143708661391d565b945094509450945094506143cc85600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061446182600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144f684600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145438382614daf565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060008060006145c38661391d565b9450945094509450945061461f85600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146b484600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147018382614daf565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060008060006147818661391d565b945094509450945094506147dd86600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061487285600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061490782600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061499c84600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149e98382614daf565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b600080600060065490506000600754905060005b601580549050811015614cac5782600d600060158481548110614a8b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180614b72575081600e600060158481548110614b0a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15614b895760065460075494509450505050614ce5565b614c12600d600060158481548110614b9d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461397590919063ffffffff16565b9250614c9d600e600060158481548110614c2857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361397590919063ffffffff16565b91508080600101915050614a6c565b50614cc4600754600654613f8b90919063ffffffff16565b821015614cdc57600654600754935093505050614ce5565b81819350935050505b9091565b60008083118290614d95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614d5a578082015181840152602081019050614d3f565b50505050905090810190601f168015614d875780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614da157fe5b049050809150509392505050565b614dc48260065461397590919063ffffffff16565b600681905550614ddf81600c546139bf90919063ffffffff16565b600c81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f4d617820627579203230303020554e42207269676874206166746572206c61756e636845524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e205f746f74616c5368617265734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6ea2646970667358221220620fa2e4c2e18be301fe0753ff5fa9aa79bf7b2e770765ff99e42891d14d1bf064736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102485760003560e01c8063777e63ed1161013b578063b4bccee0116100b8578063f2cc0c181161007c578063f2cc0c1814610af8578063f2fde38b14610b3c578063f442b57014610b80578063f5eb42dc14610bda578063f84354f114610c3257610248565b8063b4bccee0146109aa578063c2a88347146109d8578063cba0e99614610a08578063d5002f2e14610a62578063dd62ed3e14610a8057610248565b806395d89b41116100ff57806395d89b411461080d5780639ff20ef414610890578063a457c2d7146108c4578063a9059cbb14610928578063af14052c1461098c57610248565b8063777e63ed146107275780638988d078146107315780638d0bc4281461078b5780638da5cb5b146107ab5780638f02bb5b146107df57610248565b806339509351116101c95780634563f30a1161018d5780634563f30a1461063757806367b8c3191461065757806370a08231146106a7578063715018a6146106ff578063774662f91461070957610248565b806339509351146105195780633be793101461057d5780633df9a8d21461059b57806344e46dff146105b95780634549b039146105e957610248565b806318160ddd1161021057806318160ddd146103c45780631fc3371a146103e257806323b872dd146104325780632d838119146104b6578063313ce567146104f857610248565b8063053ab1821461024d57806306fdde031461027b578063095ea7b3146102fe5780630deef44f1461036257806313114a9d146103a6575b600080fd5b6102796004803603602081101561026357600080fd5b8101908080359060200190929190505050610c76565b005b610283610e06565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102c35780820151818401526020810190506102a8565b50505050905090810190601f1680156102f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61034a6004803603604081101561031457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ea8565b60405180821515815260200191505060405180910390f35b6103a46004803603602081101561037857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611071565b005b6103ae61117f565b6040518082815260200191505060405180910390f35b6103cc611189565b6040518082815260200191505060405180910390f35b610430600480360360408110156103f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611193565b005b61049e6004803603606081101561044857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611314565b60405180821515815260200191505060405180910390f35b6104e2600480360360208110156104cc57600080fd5b81019080803590602001909291905050506115f8565b6040518082815260200191505060405180910390f35b61050061167c565b604051808260ff16815260200191505060405180910390f35b6105656004803603604081101561052f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611693565b60405180821515815260200191505060405180910390f35b610585611966565b6040518082815260200191505060405180910390f35b6105a361196c565b6040518082815260200191505060405180910390f35b6105e7600480360360208110156105cf57600080fd5b81019080803515159060200190929190505050611972565b005b610621600480360360408110156105ff57600080fd5b8101908080359060200190929190803515159060200190929190505050611a59565b6040518082815260200191505060405180910390f35b61063f611b0e565b60405180821515815260200191505060405180910390f35b6106a56004803603604081101561066d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611b21565b005b6106e9600480360360208110156106bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cf9565b6040518082815260200191505060405180910390f35b610707611de4565b005b610711611f6f565b6040518082815260200191505060405180910390f35b61072f611f75565b005b6107736004803603602081101561074757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612048565b60405180821515815260200191505060405180910390f35b610793612068565b60405180821515815260200191505060405180910390f35b6107b361207b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61080b600480360360208110156107f557600080fd5b81019080803590602001909291905050506120a5565b005b610815612179565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085557808201518184015260208101905061083a565b50505050905090810190601f1680156108825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61089861221b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610910600480360360408110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612241565b60405180821515815260200191505060405180910390f35b6109746004803603604081101561093e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125a9565b60405180821515815260200191505060405180910390f35b61099461285b565b6040518082815260200191505060405180910390f35b6109d6600480360360208110156109c057600080fd5b8101908080359060200190929190505050612d52565b005b610a06600480360360208110156109ee57600080fd5b81019080803515159060200190929190505050612e26565b005b610a4a60048036036020811015610a1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f0d565b60405180821515815260200191505060405180910390f35b610a6a612f63565b6040518082815260200191505060405180910390f35b610ae260048036036040811015610a9657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f6d565b6040518082815260200191505060405180910390f35b610b3a60048036036020811015610b0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ff4565b005b610b7e60048036036020811015610b5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613310565b005b610bc260048036036020811015610b9657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613520565b60405180821515815260200191505060405180910390f35b610c1c60048036036020811015610bf057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613540565b6040518082815260200191505060405180910390f35b610c7460048036036020811015610c4857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613589565b005b6000610c80613915565b9050601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614f12602c913960400191505060405180910390fd5b6000610d308361391d565b505050509050610d8881600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610de08160065461397590919063ffffffff16565b600681905550610dfb83600c546139bf90919063ffffffff16565b600c81905550505050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e9e5780601f10610e7357610100808354040283529160200191610e9e565b820191906000526020600020905b815481529060010190602001808311610e8157829003601f168201915b5050505050905090565b6000601260009054906101000a900460ff161580610f0f5750601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610f81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f706175736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b611079613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600c54905090565b6000600754905090565b61119b613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80156112c0576001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611310565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561135157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561138a57600080fd5b60001515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f796f75206172652062616e6e656400000000000000000000000000000000000081525060200191505060405180910390fd5b601260009054906101000a900460ff1615806114b55750601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f706175736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611532858585613a47565b6115eb856115e685604051806060016040528060288152602001614e5460289139601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061159c613915565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ea09092919063ffffffff16565b610ea8565b5060019150509392505050565b6000600654821115611655576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614eed6025913960400191505060405180910390fd5b600061165f613f60565b90506116748184613f8b90919063ffffffff16565b915050919050565b6000600560009054906101000a900460ff16905090565b6000601260009054906101000a900460ff1615806116fa5750601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61176c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f706175736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6117fb82601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600a5481565b600b5481565b61197a613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000600754831115611ad3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611af2576000611ae38461391d565b50505050905080915050611b08565b6000611afd8461391d565b505050915050809150505b92915050565b601260009054906101000a900460ff1681565b611b29613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611beb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8015611c4e576001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c9e565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b7f9d96fd0be79238fe0114d59e66ab2107b1369256adc03ad3f29b6deb2bc7508a8282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d9457600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ddf565b611ddc600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f8565b90505b919050565b611dec613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b611f7d613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461203f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b42601181905550565b600f6020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120ad613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b8190555050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122115780601f106121e657610100808354040283529160200191612211565b820191906000526020600020905b8154815290600101906020018083116121f457829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601260009054906101000a900460ff1615806122a85750601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61231a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f706175736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808310612429576000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124bd565b61243c838261397590919063ffffffff16565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125e657600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561261f57600080fd5b60001515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146126e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f796f75206172652062616e6e656400000000000000000000000000000000000081525060200191505060405180910390fd5b601260009054906101000a900460ff16158061274a5750601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f706175736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61012c6127d46011544261397590919063ffffffff16565b1015806127e957506012600a0a6107d0028311155b61283e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ea56023913960400191505060405180910390fd5b612850612849613915565b8585613a47565b600191505092915050565b6000612865613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612927576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601260019054906101000a900460ff16156129aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f726562617365732070617573656400000000000000000000000000000000000081525060200191505060405180910390fd5b6129e86129d760646129c9600a54600754613fd590919063ffffffff16565b613f8b90919063ffffffff16565b60075461397590919063ffffffff16565b600781905550612a2c612a1b6064612a0d600a54600c54613fd590919063ffffffff16565b613f8b90919063ffffffff16565b600c5461397590919063ffffffff16565b600c8190555060005b601580549050811015612c6f576000600e600060158481548110612a5557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612c6257612be7612b626064612b54600a54600e600060158881548110612ae057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613fd590919063ffffffff16565b613f8b90919063ffffffff16565b600e600060158581548110612b7357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600e600060158481548110612bf857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050612a35565b50612c8660016009546139bf90919063ffffffff16565b6009819055506009547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f26007546040518082815260200191505060405180910390a2600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d3257600080fd5b505af1158015612d46573d6000803e3d6000fd5b50505050600754905090565b612d5a613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b612e2e613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ef0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600654905090565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612ffc613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561317e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156132525761320e600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f8565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506015819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613318613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614e0d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b613591613915565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613653576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c726561647920696e636c75646564000000000081525060200191505060405180910390fd5b60005b601580549050811015613911578173ffffffffffffffffffffffffffffffffffffffff166015828154811061374657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613904576015600160158054905003815481106137a257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601582815481106137da57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060158054806138ca57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613911565b8080600101915050613715565b5050565b600033905090565b60008060008060008060006139318861405b565b91509150600061393f613f60565b905060008060006139518c86866140ae565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006139b783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ea0565b905092915050565b600080828401905083811015613a3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614ec86025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614dea6023913960400191505060405180910390fd5b60008111613bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614e7c6029913960400191505060405180910390fd5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c4f5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c6457613c5f83838361410c565b613e9b565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613d075750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d1c57613d1783838361435f565b613e9a565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613dc05750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613dd557613dd08383836145b2565b613e99565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613e775750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613e8c57613e87838383614770565b613e98565b613e978383836145b2565b5b5b5b5b505050565b6000838311158290613f4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f12578082015181840152602081019050613ef7565b50505050905090810190601f168015613f3f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613f6d614a58565b91509150613f848183613f8b90919063ffffffff16565b9250505090565b6000613fcd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614ce9565b905092915050565b600080831415613fe85760009050614055565b6000828402905082848281613ff957fe5b0414614050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e336021913960400191505060405180910390fd5b809150505b92915050565b6000806000614088600b5461407a606487613f8b90919063ffffffff16565b613fd590919063ffffffff16565b9050600061409f828661397590919063ffffffff16565b90508082935093505050915091565b6000806000806140c78588613fd590919063ffffffff16565b905060006140de8688613fd590919063ffffffff16565b905060006140f5828461397590919063ffffffff16565b905082818395509550955050505093509350939050565b600080600080600061411d8661391d565b9450945094509450945061417986600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061420e85600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142a384600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142f08382614daf565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060008060006143708661391d565b945094509450945094506143cc85600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061446182600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144f684600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145438382614daf565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060008060006145c38661391d565b9450945094509450945061461f85600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146b484600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147018382614daf565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b60008060008060006147818661391d565b945094509450945094506147dd86600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061487285600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397590919063ffffffff16565b600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061490782600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061499c84600d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139bf90919063ffffffff16565b600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149e98382614daf565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b600080600060065490506000600754905060005b601580549050811015614cac5782600d600060158481548110614a8b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180614b72575081600e600060158481548110614b0a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15614b895760065460075494509450505050614ce5565b614c12600d600060158481548110614b9d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461397590919063ffffffff16565b9250614c9d600e600060158481548110614c2857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361397590919063ffffffff16565b91508080600101915050614a6c565b50614cc4600754600654613f8b90919063ffffffff16565b821015614cdc57600654600754935093505050614ce5565b81819350935050505b9091565b60008083118290614d95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614d5a578082015181840152602081019050614d3f565b50505050905090810190601f168015614d875780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614da157fe5b049050809150509392505050565b614dc48260065461397590919063ffffffff16565b600681905550614ddf81600c546139bf90919063ffffffff16565b600c81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f4d617820627579203230303020554e42207269676874206166746572206c61756e636845524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e205f746f74616c5368617265734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6ea2646970667358221220620fa2e4c2e18be301fe0753ff5fa9aa79bf7b2e770765ff99e42891d14d1bf064736f6c634300060c0033

Deployed Bytecode Sourcemap

10121:17789:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20079:437;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5141:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17409:335;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14816:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19979:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16521:141;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14095:261;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17756:537;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21007:277;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5327:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18301:426;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12147:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12305:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13943:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20524:475;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12958:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16229:284;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19640:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;994:148;;;:::i;:::-;;12924:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13831:104;;;:::i;:::-;;12674:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12992:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;780:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14666:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5232:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12069:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18735:605;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16674:530;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15014:925;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14508:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14364:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19861:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15947:126;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17212:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21292:354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1150:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13026:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16081:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21654:486;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20079:437;20136:14;20153:12;:10;:12::i;:::-;20136:29;;20185:11;:19;20197:6;20185:19;;;;;;;;;;;;;;;;;;;;;;;;;20184:20;20176:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20265:19;20292:24;20303:12;20292:10;:24::i;:::-;20264:52;;;;;;20352:39;20379:11;20352:14;:22;20367:6;20352:22;;;;;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;20327:14;:22;20342:6;20327:22;;;;;;;;;;;;;;;:64;;;;20417:29;20434:11;20417:12;;:16;;:29;;;;:::i;:::-;20402:12;:44;;;;20475:33;20495:12;20475:15;;:19;;:33;;;;:::i;:::-;20457:15;:51;;;;20079:437;;;:::o;5141:83::-;5178:13;5211:5;5204:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5141:83;:::o;17409:335::-;17510:4;17541:15;;;;;;;;;;;17540:16;:55;;;;17560:23;:35;17584:10;17560:35;;;;;;;;;;;;;;;;;;;;;;;;;17540:55;17532:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17657:5;17619:14;:26;17634:10;17619:26;;;;;;;;;;;;;;;:35;17646:7;17619:35;;;;;;;;;;;;;;;:43;;;;17699:7;17678:36;;17687:10;17678:36;;;17708:5;17678:36;;;;;;;;;;;;;;;;;;17732:4;17725:11;;17409:335;;;;:::o;14816:186::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14967:27:::1;14940:24;;:54;;;;;;;;;;;;;;;;;;14816:186:::0;:::o;19979:92::-;20021:7;20048:15;;20041:22;;19979:92;:::o;16521:141::-;16610:7;16642:12;;16635:19;;16521:141;:::o;14095:261::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14209:6:::1;14205:144;;;14264:4;14232:23;:29;14256:4;14232:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;14205:144;;;14308:23;:29;14332:4;14308:29;;;;;;;;;;;;;;;;14301:36;;;;;;;;;;;14205:144;14095:261:::0;;:::o;17756:537::-;17919:4;17890:9;11655:3;11641:18;;:2;:18;;;;11633:27;;;;;;11693:4;11679:19;;:2;:19;;;;11671:28;;;;;;17977:5:::1;17950:32;;:11;:23;17962:10;17950:23;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;17942:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18021:15;;;;;;;;;;;18020:16;:55;;;;18040:23;:35;18064:10;18040:35;;;;;;;;;;;;;;;;;;;;;;;;;18020:55;18012:74;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18107:36;18117:6;18125:9;18136:6;18107:9;:36::i;:::-;18154:109;18162:6;18170:92;18211:6;18170:92;;;;;;;;;;;;;;;;;:14;:22;18185:6;18170:22;;;;;;;;;;;;;;;:36;18193:12;:10;:12::i;:::-;18170:36;;;;;;;;;;;;;;;;:40;;:92;;;;;:::i;:::-;18154:7;:109::i;:::-;;18281:4;18274:11;;17756:537:::0;;;;;;:::o;21007:277::-;21077:7;21120:12;;21105:11;:27;;21097:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21185:19;21207:23;:21;:23::i;:::-;21185:45;;21248:28;21264:11;21248;:15;;:28;;;;:::i;:::-;21241:35;;;21007:277;;;:::o;5327:83::-;5368:5;5393:9;;;;;;;;;;;5386:16;;5327:83;:::o;18301:426::-;18417:4;18448:15;;;;;;;;;;;18447:16;:55;;;;18467:23;:35;18491:10;18467:35;;;;;;;;;;;;;;;;;;;;;;;;;18447:55;18439:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18564:51;18604:10;18564:14;:26;18579:10;18564:26;;;;;;;;;;;;;;;:35;18591:7;18564:35;;;;;;;;;;;;;;;;:39;;:51;;;;:::i;:::-;18526:14;:26;18541:10;18526:26;;;;;;;;;;;;;;;:35;18553:7;18526:35;;;;;;;;;;;;;;;:89;;;;18652:7;18631:66;;18640:10;18631:66;;;18661:14;:26;18676:10;18661:26;;;;;;;;;;;;;;;:35;18688:7;18661:35;;;;;;;;;;;;;;;;18631:66;;;;;;;;;;;;;;;;;;18715:4;18708:11;;18301:426;;;;:::o;12147:34::-;;;;:::o;12305:31::-;;;;:::o;13943:144::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14063:16:::1;14045:15;;:34;;;;;;;;;;;;;;;;;;13943:144:::0;:::o;20524:475::-;20619:7;20663:12;;20647;:28;;20639:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20727:17;20722:270;;20762:19;20789:24;20800:12;20789:10;:24::i;:::-;20761:52;;;;;;20835:11;20828:18;;;;;20722:270;20881:27;20915:24;20926:12;20915:10;:24::i;:::-;20879:60;;;;;;20961:19;20954:26;;;20524:475;;;;;:::o;12958:27::-;;;;;;;;;;;;;:::o;16229:284::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16337:6:::1;16333:120;;;16380:4;16360:11;:17;16372:4;16360:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;16333:120;;;16424:11;:17;16436:4;16424:17;;;;;;;;;;;;;;;;16417:24;;;;;;;;;;;16333:120;16468:37;16492:4;16498:6;16468:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;16229:284:::0;;:::o;19640:213::-;19706:7;19730:11;:20;19742:7;19730:20;;;;;;;;;;;;;;;;;;;;;;;;;19726:57;;;19759:15;:24;19775:7;19759:24;;;;;;;;;;;;;;;;19752:31;;;;19726:57;19801:44;19821:14;:23;19836:7;19821:23;;;;;;;;;;;;;;;;19801:19;:44::i;:::-;19794:51;;19640:213;;;;:::o;994:148::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1101:1:::1;1064:40;;1085:6;;;;;;;;;;;1064:40;;;;;;;;;;;;1132:1;1115:6;;:19;;;;;;;;;;;;;;;;;;994:148::o:0;12924:27::-;;;;:::o;13831:104::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13924:3:::1;13909:12;:18;;;;13831:104::o:0;12674:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;12992:25::-;;;;;;;;;;;;;:::o;780:79::-;818:7;845:6;;;;;;;;;;;838:13;;780:79;:::o;14666:138::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14781:15:::1;14766:12;:30;;;;14666:138:::0;:::o;5232:87::-;5271:13;5304:7;5297:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5232:87;:::o;12069:39::-;;;;;;;;;;;;;:::o;18735:605::-;18856:4;18887:15;;;;;;;;;;;18886:16;:55;;;;18906:23;:35;18930:10;18906:35;;;;;;;;;;;;;;;;;;;;;;;;;18886:55;18878:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18965:16;18984:14;:26;18999:10;18984:26;;;;;;;;;;;;;;;:35;19011:7;18984:35;;;;;;;;;;;;;;;;18965:54;;19053:8;19034:15;:27;19030:199;;19116:1;19078:14;:26;19093:10;19078:26;;;;;;;;;;;;;;;:35;19105:7;19078:35;;;;;;;;;;;;;;;:39;;;;19030:199;;;19188:29;19201:15;19188:8;:12;;:29;;;;:::i;:::-;19150:14;:26;19165:10;19150:26;;;;;;;;;;;;;;;:35;19177:7;19150:35;;;;;;;;;;;;;;;:67;;;;19030:199;19265:7;19244:66;;19253:10;19244:66;;;19274:14;:26;19289:10;19274:26;;;;;;;;;;;;;;;:35;19301:7;19274:35;;;;;;;;;;;;;;;;19244:66;;;;;;;;;;;;;;;;;;19328:4;19321:11;;;18735:605;;;;:::o;16674:530::-;16824:4;16795:9;11655:3;11641:18;;:2;:18;;;;11633:27;;;;;;11693:4;11679:19;;:2;:19;;;;11671:28;;;;;;16882:5:::1;16855:32;;:11;:23;16867:10;16855:23;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;16847:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16926:15;;;;;;;;;;;16925:16;:55;;;;16945:23;:35;16969:10;16945:35;;;;;;;;;;;;;;;;;;;;;;;;;16925:55;16917:74;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17035:3;17010:21;17018:12;;17010:3;:7;;:21;;;;:::i;:::-;:28;;:61;;;;11763:2;17059;:12;17052:4;:19;17042:6;:29;;17010:61;17002:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17132:42;17142:12;:10;:12::i;:::-;17156:9;17167:6;17132:9;:42::i;:::-;17192:4;17185:11;;16674:530:::0;;;;;:::o;15014:925::-;15085:7;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15119:13:::1;;;;;;;;;;;15118:14;15110:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15187:59;15204:41;15241:3;15204:32;15221:14;;15204:12;;:16;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;15187:12;;:16;;:59;;;;:::i;:::-;15172:12;:74;;;;15275:65;15295:44;15335:3;15295:35;15315:14;;15295:15;;:19;;:35;;;;:::i;:::-;:39;;:44;;;;:::i;:::-;15275:15;;:19;;:65;;;;:::i;:::-;15257:15;:83;;;;15497:9;15492:272;15516:9;:16;;;;15512:1;:20;15492:272;;;15590:1;15558:15;:29;15574:9;15584:1;15574:12;;;;;;;;;;;;;;;;;;;;;;;;;15558:29;;;;;;;;;;;;;;;;:33;15554:199;;;15644:93;15678:58;15732:3;15678:49;15712:14;;15678:15;:29;15694:9;15704:1;15694:12;;;;;;;;;;;;;;;;;;;;;;;;;15678:29;;;;;;;;;;;;;;;;:33;;:49;;;;:::i;:::-;:53;;:58;;;;:::i;:::-;15644:15;:29;15660:9;15670:1;15660:12;;;;;;;;;;;;;;;;;;;;;;;;;15644:29;;;;;;;;;;;;;;;;:33;;:93;;;;:::i;:::-;15612:15;:29;15628:9;15638:1;15628:12;;;;;;;;;;;;;;;;;;;;;;;;;15612:29;;;;;;;;;;;;;;;:125;;;;15554:199;15534:3;;;;;;;15492:272;;;;15783:13;15794:1;15783:6;;:10;;:13;;;;:::i;:::-;15774:6;:22;;;;15824:6;;15814:31;15832:12;;15814:31;;;;;;;;;;;;;;;;;;15869:24;;;;;;;;;;;15856:43;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15919:12;;15912:19;;15014:925:::0;:::o;14508:146::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14629:17:::1;14612:14;:34;;;;14508:146:::0;:::o;14364:136::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14478:14:::1;14462:13;;:30;;;;;;;;;;;;;;;;;;14364:136:::0;:::o;19861:110::-;19919:4;19943:11;:20;19955:7;19943:20;;;;;;;;;;;;;;;;;;;;;;;;;19936:27;;19861:110;;;:::o;15947:126::-;16021:7;16053:12;;16046:19;;15947:126;:::o;17212:189::-;17330:7;17362:14;:22;17377:6;17362:22;;;;;;;;;;;;;;;:31;17385:7;17362:31;;;;;;;;;;;;;;;;17355:38;;17212:189;;;;:::o;21292:354::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21374:11:::1;:20;21386:7;21374:20;;;;;;;;;;;;;;;;;;;;;;;;;21373:21;21365:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21466:1;21440:14;:23;21455:7;21440:23;;;;;;;;;;;;;;;;:27;21437:130;;;21511:44;21531:14;:23;21546:7;21531:23;;;;;;;;;;;;;;;;21511:19;:44::i;:::-;21484:15;:24;21500:7;21484:24;;;;;;;;;;;;;;;:71;;;;21437:130;21600:4;21577:11;:20;21589:7;21577:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;21615:9;21630:7;21615:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21292:354:::0;:::o;1150:244::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1259:1:::1;1239:22;;:8;:22;;;;1231:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1349:8;1320:38;;1341:6;;;;;;;;;;;1320:38;;;;;;;;;;;;1378:8;1369:6;;:17;;;;;;;;;;;;;;;;;;1150:244:::0;:::o;13026:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;16081:140::-;16161:7;16193:14;:20;16208:4;16193:20;;;;;;;;;;;;;;;;16186:27;;16081:140;;;:::o;21654:486::-;917:12;:10;:12::i;:::-;907:22;;:6;;;;;;;;;;;:22;;;899:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21735:11:::1;:20;21747:7;21735:20;;;;;;;;;;;;;;;;;;;;;;;;;21727:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21803:9;21798:335;21822:9;:16;;;;21818:1;:20;21798:335;;;21880:7;21864:23;;:9;21874:1;21864:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;21860:262;;;21923:9;21952:1;21933:9;:16;;;;:20;21923:31;;;;;;;;;;;;;;;;;;;;;;;;;21908:9;21918:1;21908:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22000:1;21973:15;:24;21989:7;21973:24;;;;;;;;;;;;;;;:28;;;;22043:5;22020:11;:20;22032:7;22020:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22067:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22101:5;;21860:262;21840:3;;;;;;;21798:335;;;;21654:486:::0;:::o;95:106::-;148:15;183:10;176:17;;95:106;:::o;25820:488::-;25884:7;25893;25902;25911;25920;25941:28;25971:17;25992:25;26004:12;25992:11;:25::i;:::-;25940:77;;;;26028:19;26051:23;:21;:23::i;:::-;26028:46;;26086:19;26107:27;26136:16;26156:49;26168:12;26182:9;26193:11;26156;:49::i;:::-;26085:120;;;;;;26224:11;26237:19;26258:8;26268:20;26290:9;26216:84;;;;;;;;;;;;;;;;25820:488;;;;;;;:::o;2305:136::-;2363:7;2390:43;2394:1;2397;2390:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2383:50;;2305:136;;;;:::o;2116:181::-;2174:7;2194:9;2210:1;2206;:5;2194:17;;2235:1;2230;:6;;2222:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2288:1;2281:8;;;2116:181;;;;:::o;22152:948::-;22284:1;22266:20;;:6;:20;;;;22258:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22368:1;22347:23;;:9;:23;;;;22339:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22438:1;22429:6;:10;22421:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22500:11;:19;22512:6;22500:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;22524:11;:22;22536:9;22524:22;;;;;;;;;;;;;;;;;;;;;;;;;22523:23;22500:46;22496:597;;;22563:48;22585:6;22593:9;22604:6;22563:21;:48::i;:::-;22496:597;;;22634:11;:19;22646:6;22634:19;;;;;;;;;;;;;;;;;;;;;;;;;22633:20;:46;;;;;22657:11;:22;22669:9;22657:22;;;;;;;;;;;;;;;;;;;;;;;;;22633:46;22629:464;;;22696:46;22716:6;22724:9;22735:6;22696:19;:46::i;:::-;22629:464;;;22765:11;:19;22777:6;22765:19;;;;;;;;;;;;;;;;;;;;;;;;;22764:20;:47;;;;;22789:11;:22;22801:9;22789:22;;;;;;;;;;;;;;;;;;;;;;;;;22788:23;22764:47;22760:333;;;22828:44;22846:6;22854:9;22865:6;22828:17;:44::i;:::-;22760:333;;;22894:11;:19;22906:6;22894:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;22917:11;:22;22929:9;22917:22;;;;;;;;;;;;;;;;;;;;;;;;;22894:45;22890:203;;;22956:48;22978:6;22986:9;22997:6;22956:21;:48::i;:::-;22890:203;;;23037:44;23055:6;23063:9;23074:6;23037:17;:44::i;:::-;22890:203;22760:333;22629:464;22496:597;22152:948;;;:::o;2449:192::-;2535:7;2568:1;2563;:6;;2571:12;2555:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2595:9;2611:1;2607;:5;2595:17;;2632:1;2625:8;;;2449:192;;;;;:::o;26999:207::-;27053:7;27074:19;27095:20;27119:32;:30;:32::i;:::-;27073:78;;;;27169:29;27185:12;27169:11;:15;;:29;;;;:::i;:::-;27162:36;;;;26999:207;:::o;2907:132::-;2965:7;2992:39;2996:1;2999;2992:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2985:46;;2907:132;;;;:::o;2649:250::-;2707:7;2736:1;2731;:6;2727:47;;;2761:1;2754:8;;;;2727:47;2786:9;2802:1;2798;:5;2786:17;;2831:1;2826;2822;:5;;;;;;:10;2814:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2890:1;2883:8;;;2649:250;;;;;:::o;26316:281::-;26381:7;26390;26410:17;26430:39;26456:12;;26430:21;26447:3;26430:12;:16;;:21;;;;:::i;:::-;:25;;:39;;;;:::i;:::-;26410:59;;26480:28;26511:27;26528:9;26511:12;:16;;:27;;;;:::i;:::-;26480:58;;26557:20;26579:9;26549:40;;;;;;26316:281;;;:::o;26605:386::-;26710:7;26719;26728;26748:19;26770:29;26787:11;26770:12;:16;;:29;;;;:::i;:::-;26748:51;;26810:16;26829:26;26843:11;26829:9;:13;;:26;;;;:::i;:::-;26810:45;;26866:27;26896:25;26912:8;26896:11;:15;;:25;;;;:::i;:::-;26866:55;;26940:11;26953:19;26974:8;26932:51;;;;;;;;;26605:386;;;;;;;:::o;24290:612::-;24398:19;24419:27;24448:16;24466:28;24496:17;24517:24;24528:12;24517:10;:24::i;:::-;24397:144;;;;;;;;;;24578:41;24606:12;24578:15;:23;24594:6;24578:23;;;;;;;;;;;;;;;;:27;;:41;;;;:::i;:::-;24552:15;:23;24568:6;24552:23;;;;;;;;;;;;;;;:67;;;;24655:39;24682:11;24655:14;:22;24670:6;24655:22;;;;;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;24630:14;:22;24645:6;24630:22;;;;;;;;;;;;;;;:64;;;;24733:50;24763:19;24733:14;:25;24748:9;24733:25;;;;;;;;;;;;;;;;:29;;:50;;;;:::i;:::-;24705:14;:25;24720:9;24705:25;;;;;;;;;;;;;;;:78;;;;24797:32;24809:8;24819:9;24797:11;:32::i;:::-;24862:9;24845:49;;24854:6;24845:49;;;24873:20;24845:49;;;;;;;;;;;;;;;;;;24290:612;;;;;;;;:::o;23650:632::-;23756:19;23777:27;23806:16;23824:28;23854:17;23875:24;23886:12;23875:10;:24::i;:::-;23755:144;;;;;;;;;;23935:39;23962:11;23935:14;:22;23950:6;23935:22;;;;;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;23910:14;:22;23925:6;23910:22;;;;;;;;;;;;;;;:64;;;;24014:52;24045:20;24014:15;:26;24030:9;24014:26;;;;;;;;;;;;;;;;:30;;:52;;;;:::i;:::-;23985:15;:26;24001:9;23985:26;;;;;;;;;;;;;;;:81;;;;24105:50;24135:19;24105:14;:25;24120:9;24105:25;;;;;;;;;;;;;;;;:29;;:50;;;;:::i;:::-;24077:14;:25;24092:9;24077:25;;;;;;;;;;;;;;;:78;;;;24177:32;24189:8;24199:9;24177:11;:32::i;:::-;24242:9;24225:49;;24234:6;24225:49;;;24253:20;24225:49;;;;;;;;;;;;;;;;;;23650:632;;;;;;;;:::o;23108:534::-;23212:19;23233:27;23262:16;23280:28;23310:17;23331:24;23342:12;23331:10;:24::i;:::-;23211:144;;;;;;;;;;23391:39;23418:11;23391:14;:22;23406:6;23391:22;;;;;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;23366:14;:22;23381:6;23366:22;;;;;;;;;;;;;;;:64;;;;23469:50;23499:19;23469:14;:25;23484:9;23469:25;;;;;;;;;;;;;;;;:29;;:50;;;;:::i;:::-;23441:14;:25;23456:9;23441:25;;;;;;;;;;;;;;;:78;;;;23537:32;23549:8;23559:9;23537:11;:32::i;:::-;23602:9;23585:49;;23594:6;23585:49;;;23613:20;23585:49;;;;;;;;;;;;;;;;;;23108:534;;;;;;;;:::o;24910:709::-;25018:19;25039:27;25068:16;25086:28;25116:17;25137:24;25148:12;25137:10;:24::i;:::-;25017:144;;;;;;;;;;25198:41;25226:12;25198:15;:23;25214:6;25198:23;;;;;;;;;;;;;;;;:27;;:41;;;;:::i;:::-;25172:15;:23;25188:6;25172:23;;;;;;;;;;;;;;;:67;;;;25275:39;25302:11;25275:14;:22;25290:6;25275:22;;;;;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;25250:14;:22;25265:6;25250:22;;;;;;;;;;;;;;;:64;;;;25354:52;25385:20;25354:15;:26;25370:9;25354:26;;;;;;;;;;;;;;;;:30;;:52;;;;:::i;:::-;25325:15;:26;25341:9;25325:26;;;;;;;;;;;;;;;:81;;;;25445:50;25475:19;25445:14;:25;25460:9;25445:25;;;;;;;;;;;;;;;;:29;;:50;;;;:::i;:::-;25417:14;:25;25432:9;25417:25;;;;;;;;;;;;;;;:78;;;;25514:32;25526:8;25536:9;25514:11;:32::i;:::-;25579:9;25562:49;;25571:6;25562:49;;;25590:20;25562:49;;;;;;;;;;;;;;;;;;24910:709;;;;;;;;:::o;27214:693::-;27277:7;27286;27306:19;27328:12;;27306:34;;27351:20;27374:12;;27351:35;;27408:9;27403:356;27427:9;:16;;;;27423:1;:20;27403:356;;;27500:11;27469:14;:28;27484:9;27494:1;27484:12;;;;;;;;;;;;;;;;;;;;;;;;;27469:28;;;;;;;;;;;;;;;;:42;:90;;;;27547:12;27515:15;:29;27531:9;27541:1;27531:12;;;;;;;;;;;;;;;;;;;;;;;;;27515:29;;;;;;;;;;;;;;;;:44;27469:90;27465:131;;;27569:12;;27583;;27561:35;;;;;;;;;27465:131;27625:45;27641:14;:28;27656:9;27666:1;27656:12;;;;;;;;;;;;;;;;;;;;;;;;;27641:28;;;;;;;;;;;;;;;;27625:11;:15;;:45;;;;:::i;:::-;27611:59;;27700:47;27717:15;:29;27733:9;27743:1;27733:12;;;;;;;;;;;;;;;;;;;;;;;;;27717:29;;;;;;;;;;;;;;;;27700:12;:16;;:47;;;;:::i;:::-;27685:62;;27445:3;;;;;;;27403:356;;;;27787:30;27804:12;;27787;;:16;;:30;;;;:::i;:::-;27773:11;:44;27769:85;;;27827:12;;27841;;27819:35;;;;;;;;27769:85;27873:11;27886:12;27865:34;;;;;;27214:693;;;:::o;3047:191::-;3133:7;3165:1;3161;:5;3168:12;3153:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3192:9;3208:1;3204;:5;;;;;;3192:17;;3229:1;3222:8;;;3047:191;;;;;:::o;25627:185::-;25719:26;25736:8;25719:12;;:16;;:26;;;;:::i;:::-;25704:12;:41;;;;25774:30;25794:9;25774:15;;:19;;:30;;;;:::i;:::-;25756:15;:48;;;;25627:185;;:::o

Swarm Source

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