Token Optimus V2

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
77,324,880.990522 OPT2

Holders:
595 addresses

Transfers:
-

Contract:
0x9E25126EBCD57C8eb6eb6c2ffC67810d365CFC3E0x9E25126EBCD57C8eb6eb6c2ffC67810d365CFC3E

Decimals:
18

Social Profiles:
Not Available, Update ?

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x8e632f60569e7fc8822920b8cf627be14f356ff7

Contract Name:
Rebaser

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-31
*/

// SPDX-License-Identifier: MIT
// File: contracts/IBEP20.sol


pragma solidity >=0.4.22 <0.9.0;

interface IBEP20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: contracts/Context.sol


pragma solidity >=0.4.22 <0.9.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
// File: contracts/SafeMath.sol


pragma solidity >=0.4.22 <0.9.0;

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) {
        require(b <= a, "SafeMath: subtraction overflow");
        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) {
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;

        return c;
    }
}
// File: contracts/Token.sol


pragma solidity >=0.4.22 <0.9.0;

//imports




abstract contract Token is Context, IBEP20 {
	using SafeMath for uint256;

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

    uint256 private _totalSupply;
    uint256 private _indexSupply;
    uint256 private _divisor;

    uint256 private constant PERCENTS_DIVIDER = 1000;

    string private constant _name   = "Optimus V2";
    string private constant _symbol = "OPT2";
    
    constructor() {
        
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    function indexSupply() public view returns (uint256) {
        return _indexSupply;
    }

    function divisor() public view returns (uint256) {
        return _divisor;
    }

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

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

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount.mul(divisor()));
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount.mul(divisor()));
        _transfer(from, to, amount.mul(divisor()));
        return true;
    }

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender).mul(divisor()) + addedValue.mul(divisor()));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender); //no conversion required
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance.mul(divisor()) - subtractedValue.mul(divisor()));
        }

        return true;
    }

    function _setIndexSupply(uint256 toSupply) internal virtual {
        _indexSupply = toSupply;
    }

    function _setDivisor(uint256 toDivisor) internal virtual {
        _divisor = toDivisor;
    }

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

        _beforeTokenTransfer(from, to, amount.div(divisor()));

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount.div(divisor()));

        _afterTokenTransfer(from, to, amount.div(divisor()));
    }

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

        _beforeTokenTransfer(address(0), account, amount.div(divisor()));

        _totalSupply         += amount;
        _balances[account]   += amount;
        emit Transfer(address(0), account, amount.div(divisor()));

        _afterTokenTransfer(address(0), account, amount.div(divisor()));
    }

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

        _beforeTokenTransfer(account, address(0), amount.div(divisor()));

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount.div(divisor()));

        _afterTokenTransfer(account, address(0), amount.div(divisor()));
    }

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender).mul(divisor());
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount); // no conversion required
            }
        }
    }

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

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
// File: contracts/Rebaser.sol


pragma solidity >=0.4.22 <0.9.0;


interface IUniswapV2Pair {
    function skim(address to) external;
    function sync() external;
}

contract Rebaser is Token {
	using SafeMath for uint256;
    
    //config
    uint256 public constant BIG_INT    = ~uint128(0);
    uint256 public constant MAX_SUPPLY = BIG_INT * 10 ** 18;
    uint256 public constant PRE_SUPPLY = 21000000 ether;
    address public constant burnAddress= 0x000000000000000000000000000000000000dEaD;

    //rebases
    uint256 public rewardYield           = 10; //<-------------------- 1 percent
    uint256 public rewardYieldDenominator= 1000;
    uint256 public rebaseFrequency       = 1 days; //<---------------- rebase will be due every 1 days
    uint256 public nextRebase;
    uint256 public currentEpoch;

    //state
    bool public autosync;
    bool public locked;

    //addresses
    address public admin;
    address public pairAddress;

    modifier onlyAdmin() {
        require(isAdmin(msg.sender), "Not authorized.");
        _;
    }

    constructor() {
        admin      = msg.sender; //<---------------------------------- set admin
        nextRebase = block.timestamp + rebaseFrequency; //<----------- set first rebase
        autosync   = true; //<---------------------------------------- will autosync pool

        _setIndexSupply(1 ether); //<--------------------------------- initialize index supply
        _setDivisor(BIG_INT); //<------------------------------------- initialize divisor
        _mint(msg.sender, PRE_SUPPLY.mul(divisor())); //<------------- mint initial supply
    }

    function rebase() private {
        //stop reentry
        locked = true;

        //calc supply delta
        uint256 supply      = indexSupply();
        uint256 supplyDelta = supply.mul(rewardYield).div(rewardYieldDenominator);

        //exec rebase
        coreRebase(supplyDelta);

        //unlock
        locked = false;
    }

    function coreRebase(uint256 supplyDelta) private {
        uint256 old_supply = indexSupply();
        uint256 new_supply;

        if(old_supply < MAX_SUPPLY) {
            new_supply = old_supply.add(supplyDelta);
        } else {
            new_supply = MAX_SUPPLY;
        }

        _setIndexSupply(new_supply);
        _setDivisor(MAX_SUPPLY.div(new_supply));

        nextRebase = block.timestamp + rebaseFrequency;
        currentEpoch++;
    }

    function manualRebase() external {
        if(rebaseDue() && !isLocked()) {
            rebase();
        }

        if(autosync) {
            sync();
        }
    }

    function sync() private {
        IUniswapV2Pair(pairAddress).skim(burnAddress);
        IUniswapV2Pair(pairAddress).sync();
    }

    function rebaseDue() public view returns (bool) {
        return nextRebase <= block.timestamp;
    }

    function isLocked() public view returns (bool) {
        return locked;
    }

    function isAdmin(address atAddress) private view returns (bool) {
        return atAddress == admin;
    }

    function setPairAddress(address toAddress) external onlyAdmin {
        pairAddress = toAddress;
    }

    function setAutosync(bool toState) external onlyAdmin {
        autosync = toState;
    }

    function adminRebase() external onlyAdmin {
        rebase();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"BIG_INT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autosync","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"divisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"indexSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseDue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardYieldDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"toState","type":"bool"}],"name":"setAutosync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddress","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

6080604052600a6005556103e8600655620151806007553480156200002357600080fd5b50600a805462010000600160b01b0319163362010000021790556007546200004c9042620002ef565b600855600a805460ff191660011790556200006e670de0b6b3a7640000600355565b6200007f6001600160801b03600455565b620000b833620000b26200009260045490565b6a115eec47f6cf7e35000000620000be60201b620007421790919060201c565b62000152565b62000365565b600082620000cf575060006200014c565b6000620000dd83856200032d565b905082620000ec85836200030a565b14620001495760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6001600160a01b038216620001aa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000140565b620001d9600083620001d4620001bf60045490565b856200028660201b620007c11790919060201c565b505050565b8060026000828254620001ed9190620002ef565b90915550506001600160a01b038216600090815260208190526040812080548392906200021c908490620002ef565b90915550506001600160a01b03821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200025c620001bf60045490565b60405190815260200160405180910390a362000282600083620001d4620001bf60045490565b5050565b6000808211620002d95760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640162000140565b6000620002e783856200030a565b949350505050565b600082198211156200030557620003056200034f565b500190565b6000826200032857634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156200034a576200034a6200034f565b500290565b634e487b7160e01b600052601160045260246000fd5b61103780620003756000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806389375abf1161010f578063c7b171ae116100a2578063dd62ed3e11610071578063dd62ed3e146103ec578063f3181362146103ff578063f64f524114610407578063f851a4401461041257600080fd5b8063c7b171ae146103bb578063cf309012146103c3578063cff17f4c146103d5578063d7832b11146103e357600080fd5b8063a4e2d634116100de578063a4e2d6341461037c578063a8b089821461038c578063a9059cbb1461039f578063bc7e68a3146103b257600080fd5b806389375abf1461032d57806395d89b4114610336578063a22d483214610356578063a457c2d71461036957600080fd5b8063395093511161018757806370d5ae051161015657806370d5ae05146102de57806376671808146102ff57806376867799146103085780637b7918221461031b57600080fd5b806339509351146102a15780635094c803146102b457806361a9d1b1146102c157806370a08231146102cb57600080fd5b80631f2dc5ef116101c35780631f2dc5ef1461026f57806323b872dd14610277578063313ce5671461028a57806332cb6b0c1461029957600080fd5b806306fdde03146101f5578063095ea7b31461022d5780630af083141461025057806318160ddd14610267575b600080fd5b60408051808201909152600a81526927b83a34b6bab9902b1960b11b60208201525b6040516102249190610ef9565b60405180910390f35b61024061023b366004610ead565b61042b565b6040519015158152602001610224565b61025960055481565b604051908152602001610224565b61025961045a565b600454610259565b610240610285366004610e71565b610476565b60405160128152602001610224565b6102596104b3565b6102406102af366004610ead565b6104cf565b600a546102409060ff1681565b6102c961050c565b005b6102596102d9366004610e23565b610548565b6102e761dead81565b6040516001600160a01b039091168152602001610224565b61025960095481565b6102c9610316366004610ed7565b610575565b6102596a115eec47f6cf7e3500000081565b61025960075481565b60408051808201909152600481526327a82a1960e11b6020820152610217565b6102c9610364366004610e23565b6105c1565b610240610377366004610ead565b610613565b600a54610100900460ff16610240565b600b546102e7906001600160a01b031681565b6102406103ad366004610ead565b6106b2565b61025960085481565b6102c96106c9565b600a5461024090610100900460ff1681565b6102596001600160801b0381565b61025960065481565b6102596103fa366004610e3e565b610701565b600354610259565b600854421015610240565b600a546102e7906201000090046001600160a01b031681565b60008033905061044e818561044961044260045490565b8790610742565b610826565b60019150505b92915050565b600061047161046860045490565b600254906107c1565b905090565b600080339050610492858261048d61044260045490565b61095e565b6104a885856104a361044260045490565b6109e4565b506001949350505050565b6104cc6001600160801b03670de0b6b3a7640000610fb1565b81565b60008033905061044e81856104e661044260045490565b6105026104f260045490565b6104fc878b610701565b90610742565b6104499190610f77565b60085442101580156105265750600a54610100900460ff16155b1561053357610533610bd8565b600a5460ff161561054657610546610c31565b565b600061045461055660045490565b6001600160a01b038416600090815260208190526040902054906107c1565b600a546201000090046001600160a01b031633146105ae5760405162461bcd60e51b81526004016105a590610f4e565b60405180910390fd5b600a805460ff1916911515919091179055565b600a546201000090046001600160a01b031633146105f15760405162461bcd60e51b81526004016105a590610f4e565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600033816106218286610701565b9050838110156106815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105a5565b6104a8828661069961069260045490565b8890610742565b6106ac6106a560045490565b8690610742565b03610826565b60008033905061044e81856104a361044260045490565b600a546201000090046001600160a01b031633146106f95760405162461bcd60e51b81526004016105a590610f4e565b610546610bd8565b600061073b61070f60045490565b6001600160a01b03808616600090815260016020908152604080832093881683529290522054906107c1565b9392505050565b60008261075157506000610454565b600061075d8385610fb1565b90508261076a8583610f8f565b1461073b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016105a5565b60008082116108125760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f00000000000060448201526064016105a5565b600061081e8385610f8f565b949350505050565b6001600160a01b0383166108885760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105a5565b6001600160a01b0382166108e95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105a5565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290208390557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561094861094160045490565b85906107c1565b60405190815260200160405180910390a3505050565b600061097661096c60045490565b6104fc8686610701565b905060001981146109de57818110156109d15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105a5565b6109de8484848403610826565b50505050565b6001600160a01b038316610a485760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105a5565b6001600160a01b038216610aaa5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105a5565b610ac08383610abb61094160045490565b505050565b6001600160a01b03831660009081526020819052604090205481811015610b385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105a5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610b6f908490610f77565b90915550506001600160a01b038084169085167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610bb6610baf60045490565b86906107c1565b60405190815260200160405180910390a36109de8484610abb610baf60045490565b600a805461ff0019166101001790556000610bf260035490565b90506000610c17600654610c116005548561074290919063ffffffff16565b906107c1565b9050610c2281610cf4565b5050600a805461ff0019169055565b600b5460405163bc25cf7760e01b815261dead60048201526001600160a01b039091169063bc25cf7790602401600060405180830381600087803b158015610c7857600080fd5b505af1158015610c8c573d6000803e3d6000fd5b50505050600b60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ce057600080fd5b505af11580156109de573d6000803e3d6000fd5b6000610cff60035490565b90506000610d1c6001600160801b03670de0b6b3a7640000610fb1565b821015610d3457610d2d8284610da8565b9050610d50565b610d4d6001600160801b03670de0b6b3a7640000610fb1565b90505b610d5981600355565b610d7e610d7982610c116001600160801b03670de0b6b3a7640000610fb1565b600455565b600754610d8b9042610f77565b60085560098054906000610d9e83610fd0565b9190505550505050565b600080610db58385610f77565b90508381101561073b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016105a5565b80356001600160a01b0381168114610e1e57600080fd5b919050565b600060208284031215610e3557600080fd5b61073b82610e07565b60008060408385031215610e5157600080fd5b610e5a83610e07565b9150610e6860208401610e07565b90509250929050565b600080600060608486031215610e8657600080fd5b610e8f84610e07565b9250610e9d60208501610e07565b9150604084013590509250925092565b60008060408385031215610ec057600080fd5b610ec983610e07565b946020939093013593505050565b600060208284031215610ee957600080fd5b8135801515811461073b57600080fd5b600060208083528351808285015260005b81811015610f2657858101830151858201604001528201610f0a565b81811115610f38576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e2737ba1030baba3437b934bd32b21760891b604082015260600190565b60008219821115610f8a57610f8a610feb565b500190565b600082610fac57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610fcb57610fcb610feb565b500290565b6000600019821415610fe457610fe4610feb565b5060010190565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220b2522d9489e55488c9e2363235e989e4943fd0fdaf88530be2b886dc22b34e3964736f6c63430008070033

Deployed ByteCode Sourcemap

10729:3243:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4859:100;4946:5;;;;;;;;;;;;-1:-1:-1;;;4946:5:0;;;;4859:100;;;;;;;:::i;:::-;;;;;;;;6340:216;;;;;;:::i;:::-;;:::i;:::-;;;1891:14:1;;1884:22;1866:41;;1854:2;1839:18;6340:216:0;1726:187:1;11090:41:0;;;;;;;;;6912:25:1;;;6900:2;6885:18;11090:41:0;6766:177:1;5180:123:0;;;:::i;5410:83::-;5477:8;;5410:83;;6041:291;;;;;;:::i;:::-;;:::i;5079:93::-;;;5162:2;7090:36:1;;7078:2;7063:18;5079:93:0;6948:184:1;10867:55:0;;;:::i;6564:268::-;;;;;;:::i;:::-;;:::i;11407:20::-;;;;;;;;;13051:175;;;:::i;:::-;;5501:142;;;;;;:::i;:::-;;:::i;10987:79::-;;11024:42;10987:79;;;;;-1:-1:-1;;;;;1682:32:1;;;1664:51;;1652:2;1637:18;10987:79:0;1518:203:1;11358:27:0;;;;;;13801:91;;;;;;:::i;:::-;;:::i;10929:51::-;;10966:14;10929:51;;11222:45;;;;;;4967:104;5056:7;;;;;;;;;;;;-1:-1:-1;;;5056:7:0;;;;4967:104;;13689;;;;;;:::i;:::-;;:::i;6840:491::-;;;;;;:::i;:::-;;:::i;13486:79::-;13551:6;;;;;;;13486:79;;11505:26;;;;;-1:-1:-1;;;;;11505:26:0;;;5825:208;;;;;;:::i;:::-;;:::i;11326:25::-;;;;;;13900:69;;;:::i;11434:18::-;;;;;;;;;;;;10812:48;;-1:-1:-1;;;;;10812:48:0;;11172:43;;;;;;5651:166;;;;;;:::i;:::-;;:::i;5311:91::-;5382:12;;5311:91;;13375:103;13441:10;;13455:15;-1:-1:-1;13441:29:0;13375:103;;11478:20;;;;;;;;-1:-1:-1;;;;;11478:20:0;;;6340:216;6423:4;;3311:10;6440:28;;6479:47;6488:5;6495:7;6504:21;6515:9;5477:8;;;5410:83;6515:9;6504:6;;:10;:21::i;:::-;6479:8;:47::i;:::-;6544:4;6537:11;;;6340:216;;;;;:::o;5180:123::-;5241:7;5268:27;5285:9;5477:8;;;5410:83;5285:9;5268:12;;;:16;:27::i;:::-;5261:34;;5180:123;:::o;6041:291::-;6138:4;;3311:10;6155:30;;6196:53;6212:4;6218:7;6227:21;6238:9;5477:8;;;5410:83;6227:21;6196:15;:53::i;:::-;6260:42;6270:4;6276:2;6280:21;6291:9;5477:8;;;5410:83;6280:21;6260:9;:42::i;:::-;-1:-1:-1;6320:4:0;;6041:291;-1:-1:-1;;;;6041:291:0:o;10867:55::-;10904:18;-1:-1:-1;;;;;10914:8:0;10904:18;:::i;:::-;10867:55;:::o;6564:268::-;6652:4;;3311:10;6669:28;;6708:94;6717:5;6724:7;6776:25;6791:9;5477:8;;;5410:83;6776:25;6733:40;6763:9;5477:8;;;5410:83;6763:9;6733:25;6743:5;6750:7;6733:9;:25::i;:::-;:29;;:40::i;:::-;:68;;;;:::i;13051:175::-;13441:10;;13455:15;-1:-1:-1;13441:29:0;13098:26;;;;-1:-1:-1;13551:6:0;;;;;;;13113:11;13098:26;13095:66;;;13141:8;:6;:8::i;:::-;13176;;;;13173:46;;;13201:6;:4;:6::i;:::-;13051:175::o;5501:142::-;5575:7;5602:33;5625:9;5477:8;;;5410:83;5625:9;-1:-1:-1;;;;;5602:18:0;;:9;:18;;;;;;;;;;;;:22;:33::i;13801:91::-;13668:5;;;;;-1:-1:-1;;;;;13668:5:0;11588:10;13655:18;11572:47;;;;-1:-1:-1;;;11572:47:0;;;;;;;:::i;:::-;;;;;;;;;13866:8:::1;:18:::0;;-1:-1:-1;;13866:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13801:91::o;13689:104::-;13668:5;;;;;-1:-1:-1;;;;;13668:5:0;11588:10;13655:18;11572:47;;;;-1:-1:-1;;;11572:47:0;;;;;;;:::i;:::-;13762:11:::1;:23:::0;;-1:-1:-1;;;;;;13762:23:0::1;-1:-1:-1::0;;;;;13762:23:0;;;::::1;::::0;;;::::1;::::0;;13689:104::o;6840:491::-;6933:4;3311:10;6933:4;7016:25;3311:10;7033:7;7016:9;:25::i;:::-;6989:52;;7105:15;7085:16;:35;;7077:85;;;;-1:-1:-1;;;7077:85:0;;6562:2:1;7077:85:0;;;6544:21:1;6601:2;6581:18;;;6574:30;6640:34;6620:18;;;6613:62;-1:-1:-1;;;6691:18:1;;;6684:35;6736:19;;7077:85:0;6360:401:1;7077:85:0;7198:90;7207:5;7214:7;7257:30;7277:9;5477:8;;;5410:83;7277:9;7257:15;;:19;:30::i;:::-;7223:31;7244:9;5477:8;;;5410:83;7244:9;7223:16;;:20;:31::i;:::-;:64;7198:8;:90::i;5825:208::-;5904:4;;3311:10;5921:28;;5960:43;5970:5;5977:2;5981:21;5992:9;5477:8;;;5410:83;13900:69;13668:5;;;;;-1:-1:-1;;;;;13668:5:0;11588:10;13655:18;11572:47;;;;-1:-1:-1;;;11572:47:0;;;;;;;:::i;:::-;13953:8:::1;:6;:8::i;5651:166::-:0;5740:7;5767:42;5799:9;5477:8;;;5410:83;5799:9;-1:-1:-1;;;;;5767:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;:31;:42::i;:::-;5760:49;5651:166;-1:-1:-1;;;5651:166:0:o;3812:250::-;3870:7;3894:6;3890:47;;-1:-1:-1;3924:1:0;3917:8;;3890:47;3949:9;3961:5;3965:1;3961;:5;:::i;:::-;3949:17;-1:-1:-1;3994:1:0;3985:5;3989:1;3949:17;3985:5;:::i;:::-;:10;3977:56;;;;-1:-1:-1;;;3977:56:0;;5349:2:1;3977:56:0;;;5331:21:1;5388:2;5368:18;;;5361:30;5427:34;5407:18;;;5400:62;-1:-1:-1;;;5478:18:1;;;5471:31;5519:19;;3977:56:0;5147:397:1;4070:179:0;4128:7;4160:1;4156;:5;4148:44;;;;-1:-1:-1;;;4148:44:0;;4650:2:1;4148:44:0;;;4632:21:1;4689:2;4669:18;;;4662:30;4728:28;4708:18;;;4701:56;4774:18;;4148:44:0;4448:350:1;4148:44:0;4203:9;4215:5;4219:1;4215;:5;:::i;:::-;4203:17;4070:179;-1:-1:-1;;;;4070:179:0:o;9383:395::-;-1:-1:-1;;;;;9519:19:0;;9511:68;;;;-1:-1:-1;;;9511:68:0;;6157:2:1;9511:68:0;;;6139:21:1;6196:2;6176:18;;;6169:30;6235:34;6215:18;;;6208:62;-1:-1:-1;;;6286:18:1;;;6279:34;6330:19;;9511:68:0;5955:400:1;9511:68:0;-1:-1:-1;;;;;9598:21:0;;9590:68;;;;-1:-1:-1;;;9590:68:0;;3126:2:1;9590:68:0;;;3108:21:1;3165:2;3145:18;;;3138:30;3204:34;3184:18;;;3177:62;-1:-1:-1;;;3255:18:1;;;3248:32;3297:19;;9590:68:0;2924:398:1;9590:68:0;-1:-1:-1;;;;;9671:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;:36;;;9723:47;9748:21;9759:9;5477:8;;;5410:83;9759:9;9748:6;;:10;:21::i;:::-;9723:47;;6912:25:1;;;6900:2;6885:18;9723:47:0;;;;;;;9383:395;;;:::o;9786:494::-;9921:24;9948:40;9978:9;5477:8;;;5410:83;9978:9;9948:25;9958:5;9965:7;9948:9;:25::i;:40::-;9921:67;;-1:-1:-1;;10003:16:0;:37;9999:274;;10085:6;10065:16;:26;;10057:68;;;;-1:-1:-1;;;10057:68:0;;3885:2:1;10057:68:0;;;3867:21:1;3924:2;3904:18;;;3897:30;3963:31;3943:18;;;3936:59;4012:18;;10057:68:0;3683:353:1;10057:68:0;10169:51;10178:5;10185:7;10213:6;10194:16;:25;10169:8;:51::i;:::-;9910:370;9786:494;;;:::o;7553:716::-;-1:-1:-1;;;;;7684:18:0;;7676:68;;;;-1:-1:-1;;;7676:68:0;;5751:2:1;7676:68:0;;;5733:21:1;5790:2;5770:18;;;5763:30;5829:34;5809:18;;;5802:62;-1:-1:-1;;;5880:18:1;;;5873:35;5925:19;;7676:68:0;5549:401:1;7676:68:0;-1:-1:-1;;;;;7763:16:0;;7755:64;;;;-1:-1:-1;;;7755:64:0;;2722:2:1;7755:64:0;;;2704:21:1;2761:2;2741:18;;;2734:30;2800:34;2780:18;;;2773:62;-1:-1:-1;;;2851:18:1;;;2844:33;2894:19;;7755:64:0;2520:399:1;7755:64:0;7832:53;7853:4;7859:2;7863:21;7874:9;5477:8;;;5410:83;7863:21;10288:125;;;;7832:53;-1:-1:-1;;;;;7920:15:0;;7898:19;7920:15;;;;;;;;;;;7954:21;;;;7946:72;;;;-1:-1:-1;;;7946:72:0;;4243:2:1;7946:72:0;;;4225:21:1;4282:2;4262:18;;;4255:30;4321:34;4301:18;;;4294:62;-1:-1:-1;;;4372:18:1;;;4365:36;4418:19;;7946:72:0;4041:402:1;7946:72:0;-1:-1:-1;;;;;8054:15:0;;;:9;:15;;;;;;;;;;;8072:20;;;8054:38;;8114:13;;;;;;;;:23;;8086:6;;8054:9;8114:23;;8086:6;;8114:23;:::i;:::-;;;;-1:-1:-1;;;;;;;8155:41:0;;;;;;;8174:21;8185:9;5477:8;;;5410:83;8185:9;8174:6;;:10;:21::i;:::-;8155:41;;6912:25:1;;;6900:2;6885:18;8155:41:0;;;;;;;8209:52;8229:4;8235:2;8239:21;8250:9;5477:8;;;5410:83;12220:347;12281:6;:13;;-1:-1:-1;;12281:13:0;;;;;;12358;5382:12;;;5311:91;12358:13;12336:35;;12382:19;12404:51;12432:22;;12404:23;12415:11;;12404:6;:10;;:23;;;;:::i;:::-;:27;;:51::i;:::-;12382:73;;12491:23;12502:11;12491:10;:23::i;:::-;-1:-1:-1;;12545:6:0;:14;;-1:-1:-1;;12545:14:0;;;12220:347::o;13234:133::-;13284:11;;13269:45;;-1:-1:-1;;;13269:45:0;;11024:42;13269:45;;;1664:51:1;-1:-1:-1;;;;;13284:11:0;;;;13269:32;;1637:18:1;;13269:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13340:11;;;;;;;;;-1:-1:-1;;;;;13340:11:0;-1:-1:-1;;;;;13325:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12575:468;12635:18;12656:13;5382:12;;;5311:91;12656:13;12635:34;-1:-1:-1;12680:18:0;10904;-1:-1:-1;;;;;10914:8:0;10904:18;:::i;:::-;12714:10;:23;12711:151;;;12767:27;:10;12782:11;12767:14;:27::i;:::-;12754:40;;12711:151;;;10904:18;-1:-1:-1;;;;;10914:8:0;10904:18;:::i;:::-;12827:23;;12711:151;12874:27;12890:10;7410:12;:23;7339:102;12874:27;12912:39;12924:26;12939:10;10904:18;-1:-1:-1;;;;;10914:8:0;10904:18;:::i;12924:26::-;7517:8;:20;7449:96;12912:39;12995:15;;12977:33;;:15;:33;:::i;:::-;12964:10;:46;13021:12;:14;;;:12;:14;;;:::i;:::-;;;;;;12624:419;;12575:468;:::o;3431:181::-;3489:7;;3521:5;3525:1;3521;:5;:::i;:::-;3509:17;;3550:1;3545;:6;;3537:46;;;;-1:-1:-1;;;3537:46:0;;3529:2:1;3537:46:0;;;3511:21:1;3568:2;3548:18;;;3541:30;3607:29;3587:18;;;3580:57;3654:18;;3537:46:0;3327:351:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;981:254:1:o;1240:273::-;1296:6;1349:2;1337:9;1328:7;1324:23;1320:32;1317:52;;;1365:1;1362;1355:12;1317:52;1404:9;1391:23;1457:5;1450:13;1443:21;1436:5;1433:32;1423:60;;1479:1;1476;1469:12;1918:597;2030:4;2059:2;2088;2077:9;2070:21;2120:6;2114:13;2163:6;2158:2;2147:9;2143:18;2136:34;2188:1;2198:140;2212:6;2209:1;2206:13;2198:140;;;2307:14;;;2303:23;;2297:30;2273:17;;;2292:2;2269:26;2262:66;2227:10;;2198:140;;;2356:6;2353:1;2350:13;2347:91;;;2426:1;2421:2;2412:6;2401:9;2397:22;2393:31;2386:42;2347:91;-1:-1:-1;2499:2:1;2478:15;-1:-1:-1;;2474:29:1;2459:45;;;;2506:2;2455:54;;1918:597;-1:-1:-1;;;1918:597:1:o;4803:339::-;5005:2;4987:21;;;5044:2;5024:18;;;5017:30;-1:-1:-1;;;5078:2:1;5063:18;;5056:45;5133:2;5118:18;;4803:339::o;7137:128::-;7177:3;7208:1;7204:6;7201:1;7198:13;7195:39;;;7214:18;;:::i;:::-;-1:-1:-1;7250:9:1;;7137:128::o;7270:217::-;7310:1;7336;7326:132;;7380:10;7375:3;7371:20;7368:1;7361:31;7415:4;7412:1;7405:15;7443:4;7440:1;7433:15;7326:132;-1:-1:-1;7472:9:1;;7270:217::o;7492:168::-;7532:7;7598:1;7594;7590:6;7586:14;7583:1;7580:21;7575:1;7568:9;7561:17;7557:45;7554:71;;;7605:18;;:::i;:::-;-1:-1:-1;7645:9:1;;7492:168::o;7665:135::-;7704:3;-1:-1:-1;;7725:17:1;;7722:43;;;7745:18;;:::i;:::-;-1:-1:-1;7792:1:1;7781:13;;7665:135::o;7805:127::-;7866:10;7861:3;7857:20;7854:1;7847:31;7897:4;7894:1;7887:15;7921:4;7918:1;7911:15

Swarm Source

ipfs://b2522d9489e55488c9e2363235e989e4943fd0fdaf88530be2b886dc22b34e39
Loading