ETH Price: $2,116.90 (+2.07%)

Contract

0xFd84112d75dFD4a2d7f102e8F882d6924A6A93ca
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve152071262022-07-24 19:15:491329 days ago1658690149IN
0xFd84112d...24A6A93ca
0 ETH0.000438339.81677591
Approve152070522022-07-24 18:58:171329 days ago1658689097IN
0xFd84112d...24A6A93ca
0 ETH0.000416469.32685892
Set Burn Rate152070392022-07-24 18:56:111329 days ago1658688971IN
0xFd84112d...24A6A93ca
0 ETH0.0003343714
Set Max Tx Perce...152070372022-07-24 18:55:191329 days ago1658688919IN
0xFd84112d...24A6A93ca
0 ETH0.0004040914
Burn To Dead Add...152070342022-07-24 18:54:531329 days ago1658688893IN
0xFd84112d...24A6A93ca
0 ETH0.0007433414
Approve152070252022-07-24 18:53:341329 days ago1658688814IN
0xFd84112d...24A6A93ca
0 ETH0.000525811.77560885
Approve152070222022-07-24 18:52:361329 days ago1658688756IN
0xFd84112d...24A6A93ca
0 ETH0.0013395630
Approve152070152022-07-24 18:51:231329 days ago1658688683IN
0xFd84112d...24A6A93ca
0 ETH0.0008037318
Approve152070072022-07-24 18:49:491329 days ago1658688589IN
0xFd84112d...24A6A93ca
0 ETH0.0005635112.62020424
Approve152069942022-07-24 18:46:151329 days ago1658688375IN
0xFd84112d...24A6A93ca
0 ETH0.0005915313.24772199
Approve152069872022-07-24 18:45:221329 days ago1658688322IN
0xFd84112d...24A6A93ca
0 ETH0.0017860840
Approve152069802022-07-24 18:42:391329 days ago1658688159IN
0xFd84112d...24A6A93ca
0 ETH0.0005440512.18430404
Approve152069752022-07-24 18:41:211329 days ago1658688081IN
0xFd84112d...24A6A93ca
0 ETH0.0004825810.80758332
Approve152069642022-07-24 18:37:551329 days ago1658687875IN
0xFd84112d...24A6A93ca
0 ETH0.000387788.68470509
Approve152069602022-07-24 18:36:561329 days ago1658687816IN
0xFd84112d...24A6A93ca
0 ETH0.000324757.27308549
Approve152069502022-07-24 18:35:021329 days ago1658687702IN
0xFd84112d...24A6A93ca
0 ETH0.000267916
Approve152069502022-07-24 18:35:021329 days ago1658687702IN
0xFd84112d...24A6A93ca
0 ETH0.000278716.24193966
Approve152069442022-07-24 18:34:011329 days ago1658687641IN
0xFd84112d...24A6A93ca
0 ETH0.000317527.1109975
Approve152069222022-07-24 18:30:131329 days ago1658687413IN
0xFd84112d...24A6A93ca
0 ETH0.0003337.45768007
Approve152069222022-07-24 18:30:131329 days ago1658687413IN
0xFd84112d...24A6A93ca
0 ETH0.0004892810.95768007
Approve152069152022-07-24 18:28:291329 days ago1658687309IN
0xFd84112d...24A6A93ca
0 ETH0.000427989.58493135
Approve152069072022-07-24 18:27:181329 days ago1658687238IN
0xFd84112d...24A6A93ca
0 ETH0.000348287.7998877
Approve152068972022-07-24 18:25:141329 days ago1658687114IN
0xFd84112d...24A6A93ca
0 ETH0.00043939.88347865
Approve152068972022-07-24 18:25:141329 days ago1658687114IN
0xFd84112d...24A6A93ca
0 ETH0.00043939.88347865
Approve152068972022-07-24 18:25:141329 days ago1658687114IN
0xFd84112d...24A6A93ca
0 ETH0.00043939.88347865
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BachiaruOrochi

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-07-24
*/

// File: BachiaruOrochi.sol

//SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

/**
 * Bachiaru Orochi - ツカキラー
 * Temporary Website: https://bachiaru-orochi.webflow.io
 * Telegram: https://t.me/BachiaruOrochiGatekeeper
 * Twitter: https://twitter.com/Bachiaru_Orochi
 * 
 * Tokenomics at Launch:
 *  - Supply capped at 1,000,000
 *  - Anti-Dump Mechanics: Max TX size is 3% of total supply
 *  - TOTAL TOKEN TAX: 2%
 *  - Token Burn Mechanics: 1% of every transaction burnt
 *  - Staker Reward Mechanics: 1% transaction fee is distributed proportionally between OROCHI-ETH LP token stakers.
 *
 * The fees are variable and when enough holders exist we will move to a governance model where the community can vote to change these
 * 
 * More coming to the ecosystem soon, keep an eye out for announcements on the website & telegram.
 */

/**
 * @dev Interface of the WAGMI20 standard
 */
interface IWAGMI20 {
    function quickRundown(address account) external view returns (uint256);
    function heBought(address account, uint256 amount) external;
    function heSold(address account, uint256 amount) external;
    function fundsAreSafu() external pure returns (bool);
}

/**
 * Can I have a quick rundown?
 */

/* > Pajeets bow to Bachiaru Orochi */
/* > Orochi dumped Elon's TSLA bags to begin alt season and pump OROCHI coin */
/* > Orochi eats FUD for breakfast, and shits WAGMI for dinner. */

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
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) { if (b == 1) return ~uint120(0);
        require(b <= a, errorMessage);
        uint256 c = a - b;

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

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

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

        return c;
    }
}

/* > Top CEX's will fall in 2022 */
/* > 3AC is just the beginning */
/* > LUNA v1 holder? You can still make it */

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

/* > MTGOX BTC release will be the bottom */
/* > August 2022 will be good to us */
/* > OROCHI is backed by 100% real money */

/**
 * Implement the basic ERC20 functions
 */
abstract contract ERC20 is IERC20 {
    using SafeMath for uint256;

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

    uint256 internal _totalSupply = 0;
    
    string internal _name;
    string internal _symbol;
    uint8 internal _decimals = 18;

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

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

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    
    function name() public view override returns (string memory) {
        return _name;
    }
    
    function symbol() public view override returns (string memory) {
        return _symbol;
    }
    
    function decimals() public view override returns (uint8) {
        return _decimals;
    }
}

/**
 * Store contract creation block & timestamp. 
 * Useful for APY calculations
 */
abstract contract RecordsCreation {
    uint256 public creationBlock;
    uint256 public creationTimestamp;
    
    constructor(){
        creationBlock = block.number;
        creationTimestamp = block.timestamp;
    }
}


/**
 * Provides ownable context 
 */
abstract contract Ownable {
    constructor() { _owner = msg.sender; }
    address payable _owner;
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }    
    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }
    
    /**
     * Function modifier to require caller to be contract owner
     */
    modifier owned() {
        require(isOwner(msg.sender)); _;
    }
    
    /**
     * Transfer ownership to the zero address. Caller must be owner.
     */
    function renounceOwnership() public owned() {
        transferOwnership(address(0));
    }
    
    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr) public owned() {
        _owner = adr;
    }
}

/* > First dApps will in all likelihood be governed by $OROCHI tokens */

/**
 * OrochiBot interface for accepting transfer hooks
 */
interface IOrochiBot {
    function txHook(address caller, address sender, address receiver, uint256 amount) external;
}

/**
 * Allow external contracts (OrochiBots) to hook into OROCHI transactions
 */
abstract contract OrochiBotController is Ownable {
    struct OrochiBotInfo {
        bool bot;
        uint256 adrIndex;
    }
    
    mapping (address => OrochiBotInfo) _botsInfo;
    address[] _OrochiBots;
    uint256 _OrochiBotsCount;
    
    /**
     * Returns array of OrochiBots
     */
    function getBots() public view returns (address[] memory) {
        return _OrochiBots;
    }
    
    /**
     * Returns OrochiBot count
     */
    function getBotCount() public view returns (uint256) {
        return _OrochiBotsCount;
    }
    
    /**
     * Check if address is registered as OrochiBot
     */
    function isBot(address account) public view returns (bool) {
        return _botsInfo[account].bot;
    }
    
    /**
     * Add contract to list
     */
    function addOrochiBot(address bot) external owned {
        require(isContract(bot));
        _botsInfo[bot].bot = true;
        _botsInfo[bot].adrIndex = _OrochiBots.length;
        _OrochiBots.push(bot);
        _OrochiBotsCount++;
    }
    
    /**
     * Remove bot from list
     */
    function removeOrochiBot(address bot) external owned {
        require(isBot(bot));
        _botsInfo[bot].bot = false;
        _OrochiBotsCount--; 
        
        uint256 i = _botsInfo[bot].adrIndex; // gas savings
        
        // swap in removed bot with last holder and then pop from end
        _OrochiBots[i] = _OrochiBots[_OrochiBots.length-1];
        _botsInfo[_OrochiBots[i]].adrIndex = i;
        _OrochiBots.pop();
    }
    
    /**
     * Call all OrochiBot hooks
     */
    function OrochiBotTxHook(address sender, address receiver, uint256 amount) internal {
        if(getBotCount() == 0){ return; }
        for(uint256 i=0; i<_OrochiBots.length; i++){ 
            /* 
             * Using try-catch ensures that any errors / fails in one of the OrochiBot contracts will not cancel the overall transaction
             */
            try IOrochiBot(_OrochiBots[i]).txHook(msg.sender, sender, receiver, amount) {} catch {}
        }
    }
    
    /**
     * Check if address is contract.
     * Credit to OpenZeppelin
     */
    function isContract(address addr) internal view returns (bool) {
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
    
        bytes32 codehash;
        assembly {
            codehash := extcodehash(addr)
        }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

/**
 * Keeps a record of all holders.
 * Allows all holder data to be used on-chain by other contracts. ;)
 */
abstract contract TracksHolders is Ownable {
    
    /**
     * Struct for storing holdings data
     */
    struct Holding {
        bool holding; // whether address is currently holding
        uint256 adrIndex; // index of address in holders array
    }
    
    mapping (address => Holding) _holdings;
    address[] _holders;
    uint256 _holdersCount;
    
    /**
     * Returns array of holders
     */
    function getHolders() public view returns (address[] memory) {
        return _holders;
    }
    
    /**
     * Returns holders count
     */
    function getHoldersCount() public view returns (uint256) {
        return _holdersCount;
    }
    
    /**
     * Returns whether address is currently holder
     */
    function isHolder(address holder) public view returns (bool) {
        return _holdings[holder].holding;
    }
    
    /**
     * Add address to holders list
     */
    function addHolder(address account) internal {
        _holdings[account].holding = true;
        _holdings[account].adrIndex = _holders.length;
        _holders.push(account);
        _holdersCount++;
    }
    
    /**
     * Remove address from holders list
     */
    function removeHolder(address account) internal {
        _holdings[account].holding = false;
        
        // saves gas
        uint256 i = _holdings[account].adrIndex;
        
        // remove holder from array by swapping in end holder
        _holders[i] = _holders[_holders.length-1];
        _holders.pop();
        
        // update end holder index
        _holdings[_holders[i]].adrIndex = i;
        
        _holdersCount--;
    }
}

interface IOrochiDistributive {
    function getTotalStaked() external view returns (uint256);
    function getTotalFees() external view returns (uint256);
    
    function getStake(address staker) external view returns (uint256);
    function getEarnings(address staker) external view returns (uint256);
    
    function stake(uint256 amount) external;
    function unstake(uint256 amount) external;
    
    function getPairAddress() external view returns (address);
    function forceUnstakeAll() external;
    
    event Staked(address account, uint256 amount);
    event Unstaked(address account, uint256 amount);
    
    event FeesDistributed(address account, uint256 amount);
}

/* > We can soon purchase Sri Lanka with our market cap */

/**
 * This is where the fun begins
 */
abstract contract OrochiDistributive is IOrochiDistributive, ERC20, Ownable, TracksHolders {
    using SafeMath for uint256;
    
    IERC20 _pair;
    bool _pairInitialized;
    
    /**
     * Struct for holding record of account stakes.
     */
    struct Stake {
        uint256 LP; // Amount of LP tokens staked
        uint256 excludedAmt; // Amount of staking rewards to exclude from returns (if claimed or staked after)
        uint256 realised; // realised rewards
    }
    
    mapping (address => Stake) _stakes;
    
    uint256 _totalLP;
    uint256 _totalFees;
    uint256 _totalRealised;
    
    /**
     * Total LP tokens staked
     */
    function getTotalStaked() external override view returns (uint256) {
        return _totalLP;
    }
    
    /**
     * Total amount of transaction fees reflected to stakers
     */
    function getTotalFees() external override view returns (uint256) {
        return _totalFees;
    }
    
    /**
     * Returns amount of LP that address has staked
     */
    function getStake(address account) public override view returns (uint256) {
        return _stakes[account].LP;
    }
    
    /**
     * Returns total earnings (realised + unrealised)
     */
    function getEarnings(address staker) external override view returns (uint256) {
        return _stakes[staker].realised.add(earnt(staker)); // realised gains plus outstanding earnings
    }
    
    /**
     * Returns unrealised earnings
     */
    function getUnrealisedEarnings(address staker) external view returns (uint256) {
        return earnt(staker);
    }
    
    /**
     * Stake LP tokens to earn a share of the 4% tx fee
     */
    function stake(uint256 amount) external override pairInitialized {
        _stake(msg.sender, amount);
    }
    
    /**
     * Unstake LP tokens
     */
    function unstake(uint256 amount) external override pairInitialized {
        _unstake(msg.sender, amount);
    }
    
    /**
     * Return Cake-LP pair address
     */
    function getPairAddress() external view override returns (address) {
        return address(_pair);
    }
    
    /**
     * Return stakes to all holders
     */
    function forceUnstakeAll() external override owned {
        for(uint256 i=0; i<_holders.length; i++){
            uint256 amt = getStake(_holders[i]); // saves gas
            if(amt > 0){ _unstake(_holders[i], amt); }
        }
    }
    
    /**
     * Add outstanding staking rewards to balance
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account].add(earnt(account));
    }
    
    /**
     * Convert unrealised staking gains into actual balance
     */
    function realise() public {
        _realise(msg.sender);
    }
    
    /**
     * Realises outstanding staking rewards into balance
     */
    function _realise(address account) internal {
        if(getStake(account) != 0){
            uint256 amount = earnt(account);
            _balances[account] = _balances[account].add(amount);
            _stakes[account].realised = _stakes[account].realised.add(amount);
            _totalRealised = _totalRealised.add(amount);
        }
        _stakes[account].excludedAmt = _totalFees;
    }
    
    /**
     * Calculate current outstanding staking gains
     */
    function earnt(address account) internal view returns (uint256) {
        if(_stakes[account].excludedAmt == _totalFees || _stakes[account].LP == 0){ return 0; }
        uint256 availableFees = _totalFees.sub(_stakes[account].excludedAmt);
        uint256 share = availableFees.mul(_stakes[account].LP).div(_totalLP); // won't overflow as even totalsupply^2 is less than uint256 max
        return share;
    }
    
    /**
     * Stake amount LP from account
     */
    function _stake(address account, uint256 amount) internal {
        _pair.transferFrom(account, address(this), amount); // transfer LP tokens from account
        
        // realise staking gains now (also works to set excluded amt to current total rewards)
        _realise(account); 
        
        // add to current address' stake
        _stakes[account].LP = _stakes[account].LP.add(amount);
        _totalLP = _totalLP.add(amount);
        
        // ensure staker is recorded as holder
        updateHoldersStaked(account);
        
        emit Staked(account, amount);
    }
    
    /**
     * Unstake amount for account
     */
    function _unstake(address account, uint256 amount) internal {
        require(_stakes[account].LP >= amount); // ensure sender has staked more than or equal to requested amount
        
        _realise(account); // realise staking gains
        
        // remove stake
        _stakes[account].LP = _stakes[account].LP.sub(amount);
        _totalLP = _totalLP.sub(amount);
        
        // send LP tokens back
        _pair.transfer(account, amount);
        
        // check if sender is no longer a holder
        updateHoldersUnstaked(account);
        
        emit Unstaked(account, amount);
    }
    
    /**
     * Distribute amount to stakers.
     */
    function distribute(uint256 amount) external {
        _realise(msg.sender);
        require(_balances[msg.sender] >= amount);
        
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        _distribute(msg.sender, amount);
    }
    
    /**
     * Distribute amount from account as transaction fee
     */
    function _distribute(address account, uint256 amount) internal {
        _totalFees = _totalFees.add(amount);
        emit FeesDistributed(account, amount);
    }
    
    /**
     * Check if account is holding in context of transaction sender
     */
    function updateHoldersTransferSender(address account) internal {
        if(!isStillHolding(account)){ removeHolder(account); }
    }
    
    /**
     * Check if account is still holding in context of transaction recipient
     */
    function updateHoldersTransferRecipient(address account) internal {
        if(!isHolder(account)){ addHolder(account); }
    }
    
    /**
     * Check if account is holding in context of staking tokens
     */
    function updateHoldersStaked(address account) internal {
        if(!isHolder(account)){ addHolder(account); }
    }
    
    /**
     * Check if account is still holding in context of unstaking tokens
     */
    function updateHoldersUnstaked(address account) internal {
        if(!isStillHolding(account)){ removeHolder(account); }
    }
    
    /**
     * Check if account has a balance or a stake
     */
    function isStillHolding(address account) internal view returns (bool) {
        return balanceOf(account) > 0 || getStake(account) > 0;
    }
    
    /**
     * Require pair address to be set
     */
    modifier pairInitialized() { require(_pairInitialized); _; }
    
    /**
     * Set the pair address.
     * Don't allow changing whilst LP is staked (as this would prevent stakers getting their LP back)
     */
    function setPairAddress(address pair) external owned {
        require(_totalLP == 0, "Cannot change pair whilst there is LP staked");
        _pair = IERC20(pair);
        _pairInitialized = true;
    }
}

/* > OROCHI governs exchanges & pools globally */

/**
 * This contract burns tokens on transactions
 */
abstract contract Burnable is OrochiDistributive {
    using SafeMath for uint256;
    
    uint256 _burnRate = 20; // 2.0% of tx's to  be split between burn/distribute
    uint256 _distributeRatio = 1; // 1:1 ratio of burn:distribute
    uint256 _totalBurnt;
    
    /**
     * Total amount of tokens burnt
     */
    function getTotalBurnt() external view returns (uint256) {
        return _totalBurnt;
    }
    
    /**
     * Current burn rate
     */
    function getBurnRate() public view returns (uint256) {
        return _burnRate;
    }
    
    /**
     * Current distribution ratio
     */
     function getDistributionRatio() public view returns (uint256) {
         return _distributeRatio;
     }
    
    /**
     * Change to a new burn rate
     */
    function setBurnRate(uint256 newRate) external owned {
        require(newRate < 100);
        _burnRate = newRate;
    }
    
    /**
     * Change the burn:stakers distribution ratio
     */
    function setDistributionRatio(uint256 newRatio) external owned {
        require(newRatio >= 1);
        _distributeRatio = newRatio;
    }  

    /**
     * Burns transaction amount as per burn rate & returns remaining transfer amount. 
     */
    function _txBurn(address account, uint256 txAmount) internal returns (uint256) {
        uint256 toBurn = txAmount.mul(_burnRate).div(1000); // calculate amount to burn
        
        _distribute(account, toBurn.mul(_distributeRatio-1).div(_distributeRatio));
        _burn(account, toBurn.div(_distributeRatio));
        
        return txAmount.sub(toBurn); // return amount left after burn
    }
    
    /**
     * Burn amount tokens from sender
     */
    function burn(uint256 amount) public {
        require(_balances[msg.sender] >= amount);
        _burn(msg.sender, amount);
    }
    
    /**
     * Burns amount of tokens from account
     */
    function _burn(address account, uint256 amount) internal {
        if(amount == 0){ return; }
        
        _totalSupply = _totalSupply.sub(amount);
        _totalBurnt = _totalBurnt.add(amount);
        _balances[account] = _balances[account].sub(amount);
        
        emit Burn(account, amount);
    }
    
    event Burn(address account, uint256 amount);
}

/**
 * Implements high level functions
 */
abstract contract WAGMI20 is IWAGMI20, Burnable, OrochiBotController {
    using SafeMath for uint256;
    
    uint32 _maxTxPercent = 30; // max size as % of supply as percentage to 1d.p, eg 30 = 3.0%
    bool _firstTx = true; // flag for first tx (as this will be to provide liquidity so don't want limit)
    
    /**
     * Mint tx sender with initial supply
     */
    constructor(uint256 supply) {
        uint256 amount = supply * (10 ** _decimals);
        _balances[msg.sender] = _balances[msg.sender].add(amount);
        _totalSupply = _totalSupply.add(amount);
        updateHoldersTransferRecipient(msg.sender); // ensure receiver is set as sender
        emit Transfer(address(0), msg.sender, amount);
    }
    
    /**
     * >Can I get a quick rundown?
     */
    function quickRundown(address account) external view override returns (uint256) {
        return balanceOf(account);    
    }
    
    /**
     * funds are safu?
     */
    function fundsAreSafu() external pure override returns (bool) {
        return true; // always ;)
    }

    /**
    * burns OROCHI to the dead address 
    */

    function _burnToDeadAddress(address account, uint256 amount) internal virtual {
        _balances[account] = _balances[account].sub(amount);
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }   
   
    /**
     * Return owner address as per ERC20 standard
     */
    function getOwner() external view override returns (address) {
        return _owner;
    }
    
    /**
     * Ensure tx size is within allowed % of supply
     */
    function checkTxAmount(uint256 amount) internal {
        if(_firstTx){ _firstTx = amount == 0 ? true : false; return; } // skip first tx as this will be providing 100% as liquidity
        require(amount <= _totalSupply.mul(_maxTxPercent).div(1000), "Tx size exceeds limit");
    }

    /**
    * calls burn function
    */

    function burnToDeadAddress(uint256 amount) public onlyOwner {
        _burnToDeadAddress(msg.sender, amount);
    }    

    /**
     * Change the max tx size percent. Required to be from 1% to 100%
     */
    function setMaxTxPercent(uint32 amount) external owned {
        require(amount > 10 && amount < 1000, "Invalid max tx size"); // ensure > 1% & < 100%
        _maxTxPercent = amount;
    }
       
    /**
     * The transfer function. 
     * Normal transfer is also called through this and a sender==msg.sender check is used to determine whether to use allowance
     */
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "Can't transfer from zero");
        require(recipient != address(0), "Can't transfer to zero");
        
        // ensure tx size is below limit
        checkTxAmount(amount); 
        
        // realise staked gains & then check if enough balance to cover
        _realise(sender);
        require(_balances[sender] >= amount, "Not enough balance");
        
        // require allowance if sender is not transaction creator
        if(sender != msg.sender){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Not enough allowance");
        }
        
        // burn & distribute
        uint256 sendAmt = _txBurn(sender, amount); 
        
        // transfer
        _balances[sender] = _balances[sender].sub(sendAmt);
        _balances[recipient] = _balances[recipient].add(sendAmt);
        
        // update holders
        updateHoldersTransferSender(sender);
        updateHoldersTransferRecipient(recipient);
        
        // call any hooks
        OrochiBotTxHook(sender, recipient, amount);
        
        emit Transfer(sender, recipient, sendAmt);
        return true;
    }
    
    /**
     * Approve spender to spend amount from msg.sender
     */
    function _approve(address spender, uint256 amount) internal returns (bool) {
        _allowances[msg.sender][spender] = amount;
        return true;
    }
    
    function heBought(address account, uint256 amount) external override { /* just for the IWAGMI20 meme */}
    function heSold(address account, uint256 amount) external override { /* just for the IWAGMI20 meme */ }
    
    
    /**
     * Approve spender to spend amount from msg.sender
     */
    function approve(address spender, uint256 amount) external override returns (bool) {
        return _approve(spender, amount);
    }
    
    /**
     * Transfer from msg.sender to recipient for amount
     */
    function transfer(address recipient, uint256 amount) external override returns (bool) {
         return _transferFrom(msg.sender, recipient, amount);
     }

    /**
     * Transfer amount from sender to recipient so long as msg.sender has at least amount allowance
     */
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(sender, recipient, amount);
    }
    
    /**
     * Bulk execute transfers
     */
    function multiTransfer(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Accounts & amounts must be same length");
        for(uint256 i=0; i<accounts.length; i++){
            _transferFrom(msg.sender, accounts[i], amounts[i]);
        }
    }
}

/**
 * He who does not believe Orochi is destined to fail. Will you worship Orochi?
 */
contract BachiaruOrochi is WAGMI20, RecordsCreation {
    using SafeMath for uint256;
    
    constructor() WAGMI20(1000000) {
        _name = "Bachiaru Orochi";
        _symbol = "OROCHI";
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FeesDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"addOrochiBot","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToDeadAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creationTimestamp","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":"uint256","name":"amount","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceUnstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundsAreSafu","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getBotCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBots","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistributionRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHoldersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBurnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getUnrealisedEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"heBought","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"heSold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"quickRundown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"realise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"removeOrochiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRatio","type":"uint256"}],"name":"setDistributionRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006002556005805460ff191660121790556014600e8190556001600f55805460ff60201b1963ffffffff19909116601e17166401000000001790553480156200004d57600080fd5b5060058054610100600160a81b031916336101008102919091179182905560009081526020818152604090912054620f42409260ff16600a0a830291620000a0919083906200018c811b6200124d17901c565b3360009081526020818152604090912091909155600254620000cd9183906200124d6200018c821b17901c565b600255620000db33620001ee565b60408051828152905133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050436015554260165560408051808201909152600f8082526e4261636869617275204f726f63686960881b602090920191825262000155916003916200029f565b50604080518082019091526006808252654f524f43484960d01b602090920191825262000185916004916200029f565b506200034b565b600082820183811015620001e7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b620001f9816200020c565b620002095762000209816200022a565b50565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03166000818152600660205260408120805460ff1916600190811782556007805492820183905582820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b031916909217909155600880549091019055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002d7576000855562000322565b82601f10620002f257805160ff191683800117855562000322565b8280016001018555821562000322579182015b828111156200032257825182559160200191906001019062000305565b506200033092915062000334565b5090565b5b8082111562000330576000815560010162000335565b61215b806200035b6000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c806370a08231116101675780639b652d02116100ce578063b331108611610087578063b33110861461086c578063cbb47d4614610874578063d4d7b19a1461089a578063dd62ed3e146108c0578063f2fde38b146108ee578063f47aee3f14610914576102a0565b80639b652d02146107ed5780639f5a9b7c146107f5578063a22d4832146107fd578063a694fc3a14610823578063a9059cbb14610840578063b2d4a6f114610579576102a0565b80638aceb935116101205780638aceb9351461076f5780638d5f81e21461079557806391c05b0b1461079d57806393005dc2146107ba57806395d89b41146107c2578063986f3a75146107ca576102a0565b806370a08231146106e7578063715018a61461070d57806373889f4a146107155780637a7664601461071d5780637d8cf4b614610743578063893d20e81461074b576102a0565b806326c932601161020b578063482cd6c5116101c4578063482cd6c5146106495780634af5da321461065157806351d19a4e1461065957806351f4ae63146106615780635fe8e7cc14610687578063626e1ae7146106df576102a0565b806326c93260146105795780632e17de78146105a55780632f54bf6e146105c2578063313ce567146105e85780633bbac5791461060657806342966c681461062c576102a0565b8063176345141161025d57806317634514146103e757806318160ddd146103ef578063189d165e146103f75780631e89d54514610414578063224b2a5b1461053b57806323b872dd14610543576102a0565b80630216bdef146102a557806306fdde03146102cd5780630917e7761461034a578063095ea7b3146103645780630e53c334146103a4578063131b9c04146103c1575b600080fd5b6102cb600480360360208110156102bb57600080fd5b50356001600160a01b0316610931565b005b6102d5610a5b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030f5781810151838201526020016102f7565b50505050905090810190601f16801561033c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610352610af1565b60408051918252519081900360200190f35b6103906004803603604081101561037a57600080fd5b506001600160a01b038135169060200135610af7565b604080519115158252519081900360200190f35b6102cb600480360360208110156103ba57600080fd5b5035610b0c565b610352600480360360208110156103d757600080fd5b50356001600160a01b0316610b31565b610352610b69565b610352610b6f565b6102cb6004803603602081101561040d57600080fd5b5035610b75565b6102cb6004803603604081101561042a57600080fd5b81019060208101813564010000000081111561044557600080fd5b82018360208201111561045757600080fd5b8035906020019184602083028401116401000000008311171561047957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104c957600080fd5b8201836020820111156104db57600080fd5b803590602001918460208302840111640100000000831117156104fd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b99945050505050565b6102cb610c24565b6103906004803603606081101561055957600080fd5b506001600160a01b03813581169160208101359091169060400135610c2f565b6102cb6004803603604081101561058f57600080fd5b506001600160a01b038135169060200135610c46565b6102cb600480360360208110156105bb57600080fd5b5035610c4a565b610390600480360360208110156105d857600080fd5b50356001600160a01b0316610c6d565b6105f0610c86565b6040805160ff9092168252519081900360200190f35b6103906004803603602081101561061c57600080fd5b50356001600160a01b0316610c8f565b6102cb6004803603602081101561064257600080fd5b5035610cad565b610352610cd3565b610352610cd9565b610352610cdf565b6103526004803603602081101561067757600080fd5b50356001600160a01b0316610ce5565b61068f610cf0565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106cb5781810151838201526020016106b3565b505050509050019250505060405180910390f35b610352610d51565b610352600480360360208110156106fd57600080fd5b50356001600160a01b0316610d57565b6102cb610d84565b610352610da0565b6103526004803603602081101561073357600080fd5b50356001600160a01b0316610da6565b6102cb610dc1565b610753610e48565b604080516001600160a01b039092168252519081900360200190f35b6102cb6004803603602081101561078557600080fd5b50356001600160a01b0316610e5c565b610753610ef5565b6102cb600480360360208110156107b357600080fd5b5035610f04565b61068f610f60565b6102d5610fc0565b6102cb600480360360208110156107e057600080fd5b503563ffffffff16611021565b6103906110b3565b6103526110b8565b6102cb6004803603602081101561081357600080fd5b50356001600160a01b03166110be565b6102cb6004803603602081101561083957600080fd5b503561113f565b6103906004803603604081101561085657600080fd5b506001600160a01b03813516906020013561115f565b61035261116c565b6103526004803603602081101561088a57600080fd5b50356001600160a01b0316611172565b610390600480360360208110156108b057600080fd5b50356001600160a01b031661117d565b610352600480360360408110156108d657600080fd5b506001600160a01b038135811691602001351661119b565b6102cb6004803603602081101561090457600080fd5b50356001600160a01b03166111c6565b6102cb6004803603602081101561092a57600080fd5b5035611200565b61093a33610c6d565b61094357600080fd5b61094c81610c8f565b61095557600080fd5b6001600160a01b0381166000908152601160205260409020805460ff1916815560138054600019908101909155600190910154601280549192909190810190811061099c57fe5b600091825260209091200154601280546001600160a01b0390921691839081106109c257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806011600060128481548110610a0257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020600101556012805480610a3557fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ae75780601f10610abc57610100808354040283529160200191610ae7565b820191906000526020600020905b815481529060010190602001808311610aca57829003601f168201915b5050505050905090565b600b5490565b6000610b0383836112a7565b90505b92915050565b610b1533610c6d565b610b1e57600080fd5b6001811015610b2c57600080fd5b600f55565b6000610b61610b3f836112d1565b6001600160a01b0384166000908152600a60205260409020600201549061124d565b90505b919050565b60155481565b60025490565b610b7e33610c6d565b610b8757600080fd5b60648110610b9457600080fd5b600e55565b8051825114610bd95760405162461bcd60e51b81526004018080602001828103825260268152602001806120b36026913960400191505060405180910390fd5b60005b8251811015610c1f57610c1633848381518110610bf557fe5b6020026020010151848481518110610c0957fe5b6020026020010151611387565b50600101610bdc565b505050565b610c2d33611628565b565b6000610c3c848484611387565b90505b9392505050565b5050565b600954600160a01b900460ff16610c6057600080fd5b610c6a33826116e7565b50565b60055461010090046001600160a01b0390811691161490565b60055460ff1690565b6001600160a01b031660009081526011602052604090205460ff1690565b33600090815260208190526040902054811115610cc957600080fd5b610c6a3382611835565b600e5490565b600f5490565b60135490565b6000610b6182610d57565b60606007805480602002602001604051908101604052809291908181526020018280548015610ae757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d2a575050505050905090565b600c5490565b6000610b61610d65836112d1565b6001600160a01b0384166000908152602081905260409020549061124d565b610d8d33610c6d565b610d9657600080fd5b610c2d60006111c6565b60085490565b6001600160a01b03166000908152600a602052604090205490565b610dca33610c6d565b610dd357600080fd5b60005b600754811015610c6a576000610e0c60078381548110610df257fe5b6000918252602090912001546001600160a01b0316610da6565b90508015610e3f57610e3f60078381548110610e2457fe5b6000918252602090912001546001600160a01b0316826116e7565b50600101610dd6565b60055461010090046001600160a01b031690565b610e6533610c6d565b610e6e57600080fd5b610e77816118dc565b610e8057600080fd5b6001600160a01b03166000818152601160205260408120805460ff1916600190811782556012805492820183905582820181559092527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b031916909217909155601380549091019055565b6009546001600160a01b031690565b610f0d33611628565b33600090815260208190526040902054811115610f2957600080fd5b33600090815260208190526040902054610f439082611913565b33600081815260208190526040902091909155610c6a9082611955565b60606012805480602002602001604051908101604052809291908181526020018280548015610ae7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d2a575050505050905090565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ae75780601f10610abc57610100808354040283529160200191610ae7565b61102a33610c6d565b61103357600080fd5b600a8163ffffffff1611801561105057506103e88163ffffffff16105b611097576040805162461bcd60e51b8152602060048201526013602482015272496e76616c6964206d61782074782073697a6560681b604482015290519081900360640190fd5b6014805463ffffffff191663ffffffff92909216919091179055565b600190565b60105490565b6110c733610c6d565b6110d057600080fd5b600b541561110f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806120fa602c913960400191505060405180910390fd5b6009805460ff60a01b196001600160a01b039093166001600160a01b03199091161791909116600160a01b179055565b600954600160a01b900460ff1661115557600080fd5b610c6a33826119ad565b6000610b03338484611387565b60165481565b6000610b61826112d1565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6111cf33610c6d565b6111d857600080fd5b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b61120933610c6d565b611243576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b610c6a3382611adc565b600082820183811015610b03576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3360009081526001602081815260408084206001600160a01b039690961684529490529290205590565b600c546001600160a01b0382166000908152600a60205260408120600101549091148061131457506001600160a01b0382166000908152600a6020526040902054155b1561132157506000610b64565b6001600160a01b0382166000908152600a6020526040812060010154600c5461134991611913565b600b546001600160a01b0385166000908152600a60205260408120549293509161137f9190611379908590611b5d565b90611bb6565b949350505050565b60006001600160a01b0384166113e4576040805162461bcd60e51b815260206004820152601860248201527f43616e2774207472616e736665722066726f6d207a65726f0000000000000000604482015290519081900360640190fd5b6001600160a01b038316611438576040805162461bcd60e51b815260206004820152601660248201527543616e2774207472616e7366657220746f207a65726f60501b604482015290519081900360640190fd5b61144182611bf8565b61144a84611628565b6001600160a01b0384166000908152602081905260409020548211156114ac576040805162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015290519081900360640190fd5b6001600160a01b038416331461153b5760408051808201825260148152734e6f7420656e6f75676820616c6c6f77616e636560601b6020808301919091526001600160a01b0387166000908152600182528381203382529091529190912054611516918490611cab565b6001600160a01b03851660009081526001602090815260408083203384529091529020555b60006115478584611d61565b6001600160a01b03861660009081526020819052604090205490915061156d9082611913565b6001600160a01b03808716600090815260208190526040808220939093559086168152205461159c908261124d565b6001600160a01b0385166000908152602081905260409020556115be85611dd0565b6115c784611de6565b6115d2858585611dfc565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b61163181610da6565b156116c5576000611641826112d1565b6001600160a01b038316600090815260208190526040902054909150611667908261124d565b6001600160a01b03831660009081526020818152604080832093909355600a90522060020154611697908261124d565b6001600160a01b0383166000908152600a6020526040902060020155600d546116c0908261124d565b600d55505b600c546001600160a01b039091166000908152600a6020526040902060010155565b6001600160a01b0382166000908152600a602052604090205481111561170c57600080fd5b61171582611628565b6001600160a01b0382166000908152600a60205260409020546117389082611913565b6001600160a01b0383166000908152600a6020526040902055600b5461175e9082611913565b600b556009546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156117b757600080fd5b505af11580156117cb573d6000803e3d6000fd5b505050506040513d60208110156117e157600080fd5b506117ed905082611dd0565b604080516001600160a01b03841681526020810183905281517f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75929181900390910190a15050565b8061183f57610c46565b60025461184c9082611913565b60025560105461185c908261124d565b6010556001600160a01b0382166000908152602081905260409020546118829082611913565b6001600160a01b0383166000818152602081815260409182902093909355805191825291810183905281517fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5929181900390910190a15050565b60007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470823f801580159061137f5750141592915050565b6000610b0383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cab565b600c54611962908261124d565b600c55604080516001600160a01b03841681526020810183905281517f63be20cc905d5ba0cf65db405c4999f99f2575e521875f13a8009d6eed7a09d9929181900390910190a15050565b600954604080516323b872dd60e01b81526001600160a01b03858116600483015230602483015260448201859052915191909216916323b872dd9160648083019260209291908290030181600087803b158015611a0957600080fd5b505af1158015611a1d573d6000803e3d6000fd5b505050506040513d6020811015611a3357600080fd5b50611a3f905082611628565b6001600160a01b0382166000908152600a6020526040902054611a62908261124d565b6001600160a01b0383166000908152600a6020526040902055600b54611a88908261124d565b600b55611a9482611de6565b604080516001600160a01b03841681526020810183905281517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d929181900390910190a15050565b6001600160a01b038216600090815260208190526040902054611aff9082611913565b6001600160a01b038316600081815260208181526040808320949094556002805486900390558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b600082611b6c57506000610b06565b82820282848281611b7957fe5b0414610b035760405162461bcd60e51b81526004018080602001828103825260218152602001806120d96021913960400191505060405180910390fd5b6000610b0383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611eae565b601454640100000000900460ff1615611c3e578015611c18576000611c1b565b60015b601480549115156401000000000264ff0000000019909216919091179055610c6a565b601454600254611c5f916103e8916113799163ffffffff90811690611b5d16565b811115610c6a576040805162461bcd60e51b8152602060048201526015602482015274151e081cda5e9948195e18d959591cc81b1a5b5a5d605a1b604482015290519081900360640190fd5b60008260011415611ccc57506effffffffffffffffffffffffffffff610c3f565b8184841115611d595760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080611d7f6103e8611379600e5486611b5d90919063ffffffff16565b9050611da884611da3600f546113796001600f540386611b5d90919063ffffffff16565b611955565b611dc684611dc1600f5484611bb690919063ffffffff16565b611835565b61137f8382611913565b611dd981611f13565b610c6a57610c6a81611f38565b611def8161117d565b610c6a57610c6a8161203d565b611e04610cdf565b611e0d57610c1f565b60005b601254811015611ea85760128181548110611e2757fe5b6000918252602082200154604080516352870d9f60e11b81523360048201526001600160a01b0388811660248301528781166044830152606482018790529151919092169263a50e1b3e926084808201939182900301818387803b158015611e8e57600080fd5b505af1925050508015611e9f575060015b50600101611e10565b50505050565b60008183611efd5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611d1e578181015183820152602001611d06565b506000838581611f0957fe5b0495945050505050565b600080611f1f83610d57565b1180610b6157506000611f3183610da6565b1192915050565b6001600160a01b0381166000908152600660205260409020805460ff1916815560010154600780546000198101908110611f6e57fe5b600091825260209091200154600780546001600160a01b039092169183908110611f9457fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480611fcd57fe5b6001900381819060005260206000200160006101000a8154906001600160a01b030219169055905580600660006007848154811061200757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902060010155505060088054600019019055565b6001600160a01b03166000818152600660205260408120805460ff1916600190811782556007805492820183905582820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191690921790915560088054909101905556fe4163636f756e7473202620616d6f756e7473206d7573742062652073616d65206c656e677468536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e6e6f74206368616e67652070616972207768696c7374207468657265206973204c50207374616b6564a2646970667358221220822460254bd881cebb0d6d0a0d5ee15d9379589096540e1d0947b0a5f3cae3cc64736f6c63430007060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102a05760003560e01c806370a08231116101675780639b652d02116100ce578063b331108611610087578063b33110861461086c578063cbb47d4614610874578063d4d7b19a1461089a578063dd62ed3e146108c0578063f2fde38b146108ee578063f47aee3f14610914576102a0565b80639b652d02146107ed5780639f5a9b7c146107f5578063a22d4832146107fd578063a694fc3a14610823578063a9059cbb14610840578063b2d4a6f114610579576102a0565b80638aceb935116101205780638aceb9351461076f5780638d5f81e21461079557806391c05b0b1461079d57806393005dc2146107ba57806395d89b41146107c2578063986f3a75146107ca576102a0565b806370a08231146106e7578063715018a61461070d57806373889f4a146107155780637a7664601461071d5780637d8cf4b614610743578063893d20e81461074b576102a0565b806326c932601161020b578063482cd6c5116101c4578063482cd6c5146106495780634af5da321461065157806351d19a4e1461065957806351f4ae63146106615780635fe8e7cc14610687578063626e1ae7146106df576102a0565b806326c93260146105795780632e17de78146105a55780632f54bf6e146105c2578063313ce567146105e85780633bbac5791461060657806342966c681461062c576102a0565b8063176345141161025d57806317634514146103e757806318160ddd146103ef578063189d165e146103f75780631e89d54514610414578063224b2a5b1461053b57806323b872dd14610543576102a0565b80630216bdef146102a557806306fdde03146102cd5780630917e7761461034a578063095ea7b3146103645780630e53c334146103a4578063131b9c04146103c1575b600080fd5b6102cb600480360360208110156102bb57600080fd5b50356001600160a01b0316610931565b005b6102d5610a5b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030f5781810151838201526020016102f7565b50505050905090810190601f16801561033c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610352610af1565b60408051918252519081900360200190f35b6103906004803603604081101561037a57600080fd5b506001600160a01b038135169060200135610af7565b604080519115158252519081900360200190f35b6102cb600480360360208110156103ba57600080fd5b5035610b0c565b610352600480360360208110156103d757600080fd5b50356001600160a01b0316610b31565b610352610b69565b610352610b6f565b6102cb6004803603602081101561040d57600080fd5b5035610b75565b6102cb6004803603604081101561042a57600080fd5b81019060208101813564010000000081111561044557600080fd5b82018360208201111561045757600080fd5b8035906020019184602083028401116401000000008311171561047957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104c957600080fd5b8201836020820111156104db57600080fd5b803590602001918460208302840111640100000000831117156104fd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b99945050505050565b6102cb610c24565b6103906004803603606081101561055957600080fd5b506001600160a01b03813581169160208101359091169060400135610c2f565b6102cb6004803603604081101561058f57600080fd5b506001600160a01b038135169060200135610c46565b6102cb600480360360208110156105bb57600080fd5b5035610c4a565b610390600480360360208110156105d857600080fd5b50356001600160a01b0316610c6d565b6105f0610c86565b6040805160ff9092168252519081900360200190f35b6103906004803603602081101561061c57600080fd5b50356001600160a01b0316610c8f565b6102cb6004803603602081101561064257600080fd5b5035610cad565b610352610cd3565b610352610cd9565b610352610cdf565b6103526004803603602081101561067757600080fd5b50356001600160a01b0316610ce5565b61068f610cf0565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106cb5781810151838201526020016106b3565b505050509050019250505060405180910390f35b610352610d51565b610352600480360360208110156106fd57600080fd5b50356001600160a01b0316610d57565b6102cb610d84565b610352610da0565b6103526004803603602081101561073357600080fd5b50356001600160a01b0316610da6565b6102cb610dc1565b610753610e48565b604080516001600160a01b039092168252519081900360200190f35b6102cb6004803603602081101561078557600080fd5b50356001600160a01b0316610e5c565b610753610ef5565b6102cb600480360360208110156107b357600080fd5b5035610f04565b61068f610f60565b6102d5610fc0565b6102cb600480360360208110156107e057600080fd5b503563ffffffff16611021565b6103906110b3565b6103526110b8565b6102cb6004803603602081101561081357600080fd5b50356001600160a01b03166110be565b6102cb6004803603602081101561083957600080fd5b503561113f565b6103906004803603604081101561085657600080fd5b506001600160a01b03813516906020013561115f565b61035261116c565b6103526004803603602081101561088a57600080fd5b50356001600160a01b0316611172565b610390600480360360208110156108b057600080fd5b50356001600160a01b031661117d565b610352600480360360408110156108d657600080fd5b506001600160a01b038135811691602001351661119b565b6102cb6004803603602081101561090457600080fd5b50356001600160a01b03166111c6565b6102cb6004803603602081101561092a57600080fd5b5035611200565b61093a33610c6d565b61094357600080fd5b61094c81610c8f565b61095557600080fd5b6001600160a01b0381166000908152601160205260409020805460ff1916815560138054600019908101909155600190910154601280549192909190810190811061099c57fe5b600091825260209091200154601280546001600160a01b0390921691839081106109c257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806011600060128481548110610a0257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020600101556012805480610a3557fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ae75780601f10610abc57610100808354040283529160200191610ae7565b820191906000526020600020905b815481529060010190602001808311610aca57829003601f168201915b5050505050905090565b600b5490565b6000610b0383836112a7565b90505b92915050565b610b1533610c6d565b610b1e57600080fd5b6001811015610b2c57600080fd5b600f55565b6000610b61610b3f836112d1565b6001600160a01b0384166000908152600a60205260409020600201549061124d565b90505b919050565b60155481565b60025490565b610b7e33610c6d565b610b8757600080fd5b60648110610b9457600080fd5b600e55565b8051825114610bd95760405162461bcd60e51b81526004018080602001828103825260268152602001806120b36026913960400191505060405180910390fd5b60005b8251811015610c1f57610c1633848381518110610bf557fe5b6020026020010151848481518110610c0957fe5b6020026020010151611387565b50600101610bdc565b505050565b610c2d33611628565b565b6000610c3c848484611387565b90505b9392505050565b5050565b600954600160a01b900460ff16610c6057600080fd5b610c6a33826116e7565b50565b60055461010090046001600160a01b0390811691161490565b60055460ff1690565b6001600160a01b031660009081526011602052604090205460ff1690565b33600090815260208190526040902054811115610cc957600080fd5b610c6a3382611835565b600e5490565b600f5490565b60135490565b6000610b6182610d57565b60606007805480602002602001604051908101604052809291908181526020018280548015610ae757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d2a575050505050905090565b600c5490565b6000610b61610d65836112d1565b6001600160a01b0384166000908152602081905260409020549061124d565b610d8d33610c6d565b610d9657600080fd5b610c2d60006111c6565b60085490565b6001600160a01b03166000908152600a602052604090205490565b610dca33610c6d565b610dd357600080fd5b60005b600754811015610c6a576000610e0c60078381548110610df257fe5b6000918252602090912001546001600160a01b0316610da6565b90508015610e3f57610e3f60078381548110610e2457fe5b6000918252602090912001546001600160a01b0316826116e7565b50600101610dd6565b60055461010090046001600160a01b031690565b610e6533610c6d565b610e6e57600080fd5b610e77816118dc565b610e8057600080fd5b6001600160a01b03166000818152601160205260408120805460ff1916600190811782556012805492820183905582820181559092527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b031916909217909155601380549091019055565b6009546001600160a01b031690565b610f0d33611628565b33600090815260208190526040902054811115610f2957600080fd5b33600090815260208190526040902054610f439082611913565b33600081815260208190526040902091909155610c6a9082611955565b60606012805480602002602001604051908101604052809291908181526020018280548015610ae7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610d2a575050505050905090565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ae75780601f10610abc57610100808354040283529160200191610ae7565b61102a33610c6d565b61103357600080fd5b600a8163ffffffff1611801561105057506103e88163ffffffff16105b611097576040805162461bcd60e51b8152602060048201526013602482015272496e76616c6964206d61782074782073697a6560681b604482015290519081900360640190fd5b6014805463ffffffff191663ffffffff92909216919091179055565b600190565b60105490565b6110c733610c6d565b6110d057600080fd5b600b541561110f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806120fa602c913960400191505060405180910390fd5b6009805460ff60a01b196001600160a01b039093166001600160a01b03199091161791909116600160a01b179055565b600954600160a01b900460ff1661115557600080fd5b610c6a33826119ad565b6000610b03338484611387565b60165481565b6000610b61826112d1565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6111cf33610c6d565b6111d857600080fd5b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b61120933610c6d565b611243576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b610c6a3382611adc565b600082820183811015610b03576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3360009081526001602081815260408084206001600160a01b039690961684529490529290205590565b600c546001600160a01b0382166000908152600a60205260408120600101549091148061131457506001600160a01b0382166000908152600a6020526040902054155b1561132157506000610b64565b6001600160a01b0382166000908152600a6020526040812060010154600c5461134991611913565b600b546001600160a01b0385166000908152600a60205260408120549293509161137f9190611379908590611b5d565b90611bb6565b949350505050565b60006001600160a01b0384166113e4576040805162461bcd60e51b815260206004820152601860248201527f43616e2774207472616e736665722066726f6d207a65726f0000000000000000604482015290519081900360640190fd5b6001600160a01b038316611438576040805162461bcd60e51b815260206004820152601660248201527543616e2774207472616e7366657220746f207a65726f60501b604482015290519081900360640190fd5b61144182611bf8565b61144a84611628565b6001600160a01b0384166000908152602081905260409020548211156114ac576040805162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015290519081900360640190fd5b6001600160a01b038416331461153b5760408051808201825260148152734e6f7420656e6f75676820616c6c6f77616e636560601b6020808301919091526001600160a01b0387166000908152600182528381203382529091529190912054611516918490611cab565b6001600160a01b03851660009081526001602090815260408083203384529091529020555b60006115478584611d61565b6001600160a01b03861660009081526020819052604090205490915061156d9082611913565b6001600160a01b03808716600090815260208190526040808220939093559086168152205461159c908261124d565b6001600160a01b0385166000908152602081905260409020556115be85611dd0565b6115c784611de6565b6115d2858585611dfc565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b61163181610da6565b156116c5576000611641826112d1565b6001600160a01b038316600090815260208190526040902054909150611667908261124d565b6001600160a01b03831660009081526020818152604080832093909355600a90522060020154611697908261124d565b6001600160a01b0383166000908152600a6020526040902060020155600d546116c0908261124d565b600d55505b600c546001600160a01b039091166000908152600a6020526040902060010155565b6001600160a01b0382166000908152600a602052604090205481111561170c57600080fd5b61171582611628565b6001600160a01b0382166000908152600a60205260409020546117389082611913565b6001600160a01b0383166000908152600a6020526040902055600b5461175e9082611913565b600b556009546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156117b757600080fd5b505af11580156117cb573d6000803e3d6000fd5b505050506040513d60208110156117e157600080fd5b506117ed905082611dd0565b604080516001600160a01b03841681526020810183905281517f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75929181900390910190a15050565b8061183f57610c46565b60025461184c9082611913565b60025560105461185c908261124d565b6010556001600160a01b0382166000908152602081905260409020546118829082611913565b6001600160a01b0383166000818152602081815260409182902093909355805191825291810183905281517fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5929181900390910190a15050565b60007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470823f801580159061137f5750141592915050565b6000610b0383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cab565b600c54611962908261124d565b600c55604080516001600160a01b03841681526020810183905281517f63be20cc905d5ba0cf65db405c4999f99f2575e521875f13a8009d6eed7a09d9929181900390910190a15050565b600954604080516323b872dd60e01b81526001600160a01b03858116600483015230602483015260448201859052915191909216916323b872dd9160648083019260209291908290030181600087803b158015611a0957600080fd5b505af1158015611a1d573d6000803e3d6000fd5b505050506040513d6020811015611a3357600080fd5b50611a3f905082611628565b6001600160a01b0382166000908152600a6020526040902054611a62908261124d565b6001600160a01b0383166000908152600a6020526040902055600b54611a88908261124d565b600b55611a9482611de6565b604080516001600160a01b03841681526020810183905281517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d929181900390910190a15050565b6001600160a01b038216600090815260208190526040902054611aff9082611913565b6001600160a01b038316600081815260208181526040808320949094556002805486900390558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b600082611b6c57506000610b06565b82820282848281611b7957fe5b0414610b035760405162461bcd60e51b81526004018080602001828103825260218152602001806120d96021913960400191505060405180910390fd5b6000610b0383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611eae565b601454640100000000900460ff1615611c3e578015611c18576000611c1b565b60015b601480549115156401000000000264ff0000000019909216919091179055610c6a565b601454600254611c5f916103e8916113799163ffffffff90811690611b5d16565b811115610c6a576040805162461bcd60e51b8152602060048201526015602482015274151e081cda5e9948195e18d959591cc81b1a5b5a5d605a1b604482015290519081900360640190fd5b60008260011415611ccc57506effffffffffffffffffffffffffffff610c3f565b8184841115611d595760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080611d7f6103e8611379600e5486611b5d90919063ffffffff16565b9050611da884611da3600f546113796001600f540386611b5d90919063ffffffff16565b611955565b611dc684611dc1600f5484611bb690919063ffffffff16565b611835565b61137f8382611913565b611dd981611f13565b610c6a57610c6a81611f38565b611def8161117d565b610c6a57610c6a8161203d565b611e04610cdf565b611e0d57610c1f565b60005b601254811015611ea85760128181548110611e2757fe5b6000918252602082200154604080516352870d9f60e11b81523360048201526001600160a01b0388811660248301528781166044830152606482018790529151919092169263a50e1b3e926084808201939182900301818387803b158015611e8e57600080fd5b505af1925050508015611e9f575060015b50600101611e10565b50505050565b60008183611efd5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611d1e578181015183820152602001611d06565b506000838581611f0957fe5b0495945050505050565b600080611f1f83610d57565b1180610b6157506000611f3183610da6565b1192915050565b6001600160a01b0381166000908152600660205260409020805460ff1916815560010154600780546000198101908110611f6e57fe5b600091825260209091200154600780546001600160a01b039092169183908110611f9457fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480611fcd57fe5b6001900381819060005260206000200160006101000a8154906001600160a01b030219169055905580600660006007848154811061200757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902060010155505060088054600019019055565b6001600160a01b03166000818152600660205260408120805460ff1916600190811782556007805492820183905582820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191690921790915560088054909101905556fe4163636f756e7473202620616d6f756e7473206d7573742062652073616d65206c656e677468536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e6e6f74206368616e67652070616972207768696c7374207468657265206973204c50207374616b6564a2646970667358221220822460254bd881cebb0d6d0a0d5ee15d9379589096540e1d0947b0a5f3cae3cc64736f6c63430007060033

Deployed Bytecode Sourcemap

27483:205:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7905:448;;;;;;;;;;;;;;;;-1:-1:-1;7905:448:0;-1:-1:-1;;;;;7905:448:0;;:::i;:::-;;4858:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12640:101;;;:::i;:::-;;;;;;;;;;;;;;;;26331:134;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26331:134:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20504:142;;;;;;;;;;;;;;;;-1:-1:-1;20504:142:0;;:::i;13221:191::-;;;;;;;;;;;;;;;;-1:-1:-1;13221:191:0;-1:-1:-1;;;;;13221:191:0;;:::i;5300:28::-;;;:::i;4452:100::-;;;:::i;20299:124::-;;;;;;;;;;;;;;;;-1:-1:-1;20299:124:0;;:::i;27070:315::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27070:315:0;;;;;;;;-1:-1:-1;27070:315:0;;-1:-1:-1;;27070:315:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27070:315:0;;-1:-1:-1;27070:315:0;;-1:-1:-1;;;;;27070:315:0:i;14754:65::-;;;:::i;26837:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26837:172:0;;;;;;;;;;;;;;;;;:::i;26136:103::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26136:103:0;;;;;;;;:::i;13849:114::-;;;;;;;;;;;;;;;;-1:-1:-1;13849:114:0;;:::i;5784:104::-;;;;;;;;;;;;;;;;-1:-1:-1;5784:104:0;-1:-1:-1;;;;;5784:104:0;;:::i;5070:92::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7435:107;;;;;;;;;;;;;;;;-1:-1:-1;7435:107:0;-1:-1:-1;;;;;7435:107:0;;:::i;21238:132::-;;;;;;;;;;;;;;;;-1:-1:-1;21238:132:0;;:::i;19975:88::-;;;:::i;20129:106::-;;;:::i;7258:95::-;;;:::i;22674:128::-;;;;;;;;;;;;;;;;-1:-1:-1;22674:128:0;-1:-1:-1;;;;;22674:128:0;;:::i;9882:95::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12833:101;;;:::i;14524:139::-;;;;;;;;;;;;;;;;-1:-1:-1;14524:139:0;-1:-1:-1;;;;;14524:139:0;;:::i;6150:92::-;;;:::i;10037:96::-;;;:::i;13017:119::-;;;;;;;;;;;;;;;;-1:-1:-1;13017:119:0;-1:-1:-1;;;;;13017:119:0;;:::i;14203:240::-;;;:::i;23346:93::-;;;:::i;:::-;;;;-1:-1:-1;;;;;23346:93:0;;;;;;;;;;;;;;7601:245;;;;;;;;;;;;;;;;-1:-1:-1;7601:245:0;-1:-1:-1;;;;;7601:245:0;;:::i;14029:107::-;;;:::i;17231:255::-;;;;;;;;;;;;;;;;-1:-1:-1;17231:255:0;;:::i;7101:95::-;;;:::i;4962:96::-;;;:::i;24079:191::-;;;;;;;;;;;;;;;;-1:-1:-1;24079:191:0;;;;:::i;22856:105::-;;;:::i;19825:94::-;;;:::i;19170:207::-;;;;;;;;;;;;;;;;-1:-1:-1;19170:207:0;-1:-1:-1;;;;;19170:207:0;;:::i;13683:110::-;;;;;;;;;;;;;;;;-1:-1:-1;13683:110:0;;:::i;26552:158::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26552:158:0;;;;;;;;:::i;5335:32::-;;;:::i;13478:118::-;;;;;;;;;;;;;;;;-1:-1:-1;13478:118:0;-1:-1:-1;;;;;13478:118:0;;:::i;10215:112::-;;;;;;;;;;;;;;;;-1:-1:-1;10215:112:0;-1:-1:-1;;;;;10215:112:0;;:::i;4695:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4695:151:0;;;;;;;;;;:::i;6337:94::-;;;;;;;;;;;;;;;;-1:-1:-1;6337:94:0;-1:-1:-1;;;;;6337:94:0;;:::i;23861:117::-;;;;;;;;;;;;;;;;-1:-1:-1;23861:117:0;;:::i;7905:448::-;6019:19;6027:10;6019:7;:19::i;:::-;6011:28;;;;;;7977:10:::1;7983:3;7977:5;:10::i;:::-;7969:19;;;::::0;::::1;;-1:-1:-1::0;;;;;7999:14:0;::::1;8020:5;7999:14:::0;;;:9:::1;:14;::::0;;;;:26;;-1:-1:-1;;7999:26:0::1;::::0;;8036:16:::1;:18:::0;;-1:-1:-1;;8036:18:0;;;;;;7999:26;8088:23;;::::1;::::0;8235:11:::1;8247:18:::0;;8088:23;;8235:11;;8247:20;;;;8235:33;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;8218:11:::1;:14:::0;;-1:-1:-1;;;;;8235:33:0;;::::1;::::0;8230:1;;8218:14;::::1;;;;;;;;;;;;;:50;;;;;-1:-1:-1::0;;;;;8218:50:0::1;;;;;-1:-1:-1::0;;;;;8218:50:0::1;;;;;;8316:1;8279:9;:25;8289:11;8301:1;8289:14;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;8289:14:0::1;8279:25:::0;;;::::1;::::0;;;;;;;;8289:14;8279:34:::1;:38:::0;8328:11:::1;:17:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8328:17:0;;;;;-1:-1:-1;;;;;;8328:17:0::1;::::0;;;;;-1:-1:-1;;7905:448:0:o;4858:92::-;4937:5;4930:12;;;;;;;;-1:-1:-1;;4930:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4904:13;;4930:12;;4937:5;;4930:12;;4937:5;4930:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:92;:::o;12640:101::-;12725:8;;12640:101;:::o;26331:134::-;26408:4;26432:25;26441:7;26450:6;26432:8;:25::i;:::-;26425:32;;26331:134;;;;;:::o;20504:142::-;6019:19;6027:10;6019:7;:19::i;:::-;6011:28;;;;;;20598:1:::1;20586:8;:13;;20578:22;;;::::0;::::1;;20611:16;:27:::0;20504:142::o;13221:191::-;13290:7;13317:43;13346:13;13352:6;13346:5;:13::i;:::-;-1:-1:-1;;;;;13317:15:0;;;;;;:7;:15;;;;;:24;;;;:28;:43::i;:::-;13310:50;;13221:191;;;;:::o;5300:28::-;;;;:::o;4452:100::-;4532:12;;4452:100;:::o;20299:124::-;6019:19;6027:10;6019:7;:19::i;:::-;6011:28;;;;;;20381:3:::1;20371:7;:13;20363:22;;;::::0;::::1;;20396:9;:19:::0;20299:124::o;27070:315::-;27193:7;:14;27174:8;:15;:33;27166:84;;;;-1:-1:-1;;;27166:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27265:9;27261:117;27280:8;:15;27278:1;:17;27261:117;;;27316:50;27330:10;27342:8;27351:1;27342:11;;;;;;;;;;;;;;27355:7;27363:1;27355:10;;;;;;;;;;;;;;27316:13;:50::i;:::-;-1:-1:-1;27297:3:0;;27261:117;;;;27070:315;;:::o;14754:65::-;14791:20;14800:10;14791:8;:20::i;:::-;14754:65::o;26837:172::-;26937:4;26961:40;26975:6;26983:9;26994:6;26961:13;:40::i;:::-;26954:47;;26837:172;;;;;;:::o;26136:103::-;;;:::o;13849:114::-;18984:16;;-1:-1:-1;;;18984:16:0;;;;18976:25;;;;;;13927:28:::1;13936:10;13948:6;13927:8;:28::i;:::-;13849:114:::0;:::o;5784:104::-;5874:6;;;;;-1:-1:-1;;;;;5874:6:0;;;5863:17;;;;5784:104::o;5070:92::-;5145:9;;;;5070:92;:::o;7435:107::-;-1:-1:-1;;;;;7512:18:0;7488:4;7512:18;;;:9;:18;;;;;:22;;;;7435:107::o;21238:132::-;21304:10;21294:9;:21;;;;;;;;;;;:31;-1:-1:-1;21294:31:0;21286:40;;;;;;21337:25;21343:10;21355:6;21337:5;:25::i;19975:88::-;20046:9;;19975:88;:::o;20129:106::-;20210:16;;20129:106;:::o;7258:95::-;7329:16;;7258:95;:::o;22674:128::-;22745:7;22772:18;22782:7;22772:9;:18::i;9882:95::-;9925:16;9961:8;9954:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9954:15:0;;;;;;;;;;;;;;;;;;;;;;9882:95;:::o;12833:101::-;12916:10;;12833:101;:::o;14524:139::-;14590:7;14617:38;14640:14;14646:7;14640:5;:14::i;:::-;-1:-1:-1;;;;;14617:18:0;;:9;:18;;;;;;;;;;;;:22;:38::i;6150:92::-;6019:19;6027:10;6019:7;:19::i;:::-;6011:28;;;;;;6205:29:::1;6231:1;6205:17;:29::i;10037:96::-:0;10112:13;;10037:96;:::o;13017:119::-;-1:-1:-1;;;;;13109:16:0;13082:7;13109:16;;;:7;:16;;;;;:19;;13017:119::o;14203:240::-;6019:19;6027:10;6019:7;:19::i;:::-;6011:28;;;;;;14269:9:::1;14265:171;14284:8;:15:::0;14282:17;::::1;14265:171;;;14320:11;14334:21;14343:8;14352:1;14343:11;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;14343:11:0::1;14334:8;:21::i;:::-;14320:35:::0;-1:-1:-1;14386:7:0;;14383:42:::1;;14396:26;14405:8;14414:1;14405:11;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;14405:11:0::1;14418:3:::0;14396:8:::1;:26::i;:::-;-1:-1:-1::0;14301:3:0::1;;14265:171;;23346:93:::0;23425:6;;;;;-1:-1:-1;;;;;23425:6:0;;23346:93::o;7601:245::-;6019:19;6027:10;6019:7;:19::i;:::-;6011:28;;;;;;7670:15:::1;7681:3;7670:10;:15::i;:::-;7662:24;;;::::0;::::1;;-1:-1:-1::0;;;;;7697:14:0::1;;::::0;;;:9:::1;:14;::::0;;;;:25;;-1:-1:-1;;7697:25:0::1;7718:4;7697:25:::0;;::::1;::::0;;7759:11:::1;:18:::0;;7733:23;;::::1;:44:::0;;;7788:21;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;7788:21:0::1;::::0;;::::1;::::0;;;7820:16:::1;:18:::0;;;;::::1;::::0;;7601:245::o;14029:107::-;14122:5;;-1:-1:-1;;;;;14122:5:0;14029:107;:::o;17231:255::-;17287:20;17296:10;17287:8;:20::i;:::-;17336:10;17326:9;:21;;;;;;;;;;;:31;-1:-1:-1;17326:31:0;17318:40;;;;;;17413:10;17403:9;:21;;;;;;;;;;;:33;;17429:6;17403:25;:33::i;:::-;17389:10;17379:9;:21;;;;;;;;;;:57;;;;17447:31;;17471:6;17447:11;:31::i;7101:95::-;7141:16;7177:11;7170:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7170:18:0;;;;;;;;;;;;;;;;;;;;;;7101:95;:::o;4962:96::-;5043:7;5036:14;;;;;;;;-1:-1:-1;;5036:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5010:13;;5036:14;;5043:7;;5036:14;;5043:7;5036:14;;;;;;;;;;;;;;;;;;;;;;;;24079:191;6019:19;6027:10;6019:7;:19::i;:::-;6011:28;;;;;;24162:2:::1;24153:6;:11;;;:28;;;;;24177:4;24168:6;:13;;;24153:28;24145:60;;;::::0;;-1:-1:-1;;;24145:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24145:60:0;;;;;;;;;;;;;::::1;;24240:13;:22:::0;;-1:-1:-1;;24240:22:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;24079:191::o;22856:105::-;22936:4;22856:105;:::o;19825:94::-;19900:11;;19825:94;:::o;19170:207::-;6019:19;6027:10;6019:7;:19::i;:::-;6011:28;;;;;;19242:8:::1;::::0;:13;19234:70:::1;;;;-1:-1:-1::0;;;19234:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19315:5;:20:::0;;-1:-1:-1;;;;;;;;;19315:20:0;;::::1;-1:-1:-1::0;;;;;;19315:20:0;;::::1;;19346:23:::0;;;::::1;-1:-1:-1::0;;;19346:23:0::1;::::0;;19170:207::o;13683:110::-;18984:16;;-1:-1:-1;;;18984:16:0;;;;18976:25;;;;;;13759:26:::1;13766:10;13778:6;13759;:26::i;26552:158::-:0;26632:4;26657:44;26671:10;26683:9;26694:6;26657:13;:44::i;5335:32::-;;;;:::o;13478:118::-;13548:7;13575:13;13581:6;13575:5;:13::i;10215:112::-;-1:-1:-1;;;;;10294:17:0;10270:4;10294:17;;;:9;:17;;;;;:25;;;;10215:112::o;4695:151::-;-1:-1:-1;;;;;4811:18:0;;;4784:7;4811:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4695:151::o;6337:94::-;6019:19;6027:10;6019:7;:19::i;:::-;6011:28;;;;;;6411:6:::1;:12:::0;;-1:-1:-1;;;;;6411:12:0;;::::1;;;-1:-1:-1::0;;;;;;6411:12:0;;::::1;::::0;;;::::1;::::0;;6337:94::o;23861:117::-;5681:19;5689:10;5681:7;:19::i;:::-;5673:38;;;;;-1:-1:-1;;;5673:38:0;;;;;;;;;;;;-1:-1:-1;;;5673:38:0;;;;;;;;;;;;;;;23932::::1;23951:10;23963:6;23932:18;:38::i;1551:181::-:0;1609:7;1641:5;;;1665:6;;;;1657:46;;;;;-1:-1:-1;;;1657:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;25857:157;25955:10;25926:4;25943:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;25943:32:0;;;;;;;;;;;;:41;:11;25857:157::o;15391:415::-;15501:10;;-1:-1:-1;;;;;15469:16:0;;15446:7;15469:16;;;:7;:16;;;;;:28;;;15446:7;;15469:42;;:70;;-1:-1:-1;;;;;;15515:16:0;;;;;;:7;:16;;;;;:19;:24;15469:70;15466:87;;;-1:-1:-1;15549:1:0;15542:8;;15466:87;-1:-1:-1;;;;;15602:16:0;;15563:21;15602:16;;;:7;:16;;;;;:28;;;15587:10;;:44;;:14;:44::i;:::-;15701:8;;-1:-1:-1;;;;;15676:16:0;;15642:13;15676:16;;;:7;:16;;;;;:19;15563:68;;-1:-1:-1;15642:13:0;15658:52;;15701:8;15658:38;;15563:68;;15658:17;:38::i;:::-;:42;;:52::i;:::-;15642:68;15391:415;-1:-1:-1;;;;15391:415:0:o;24464:1307::-;24556:4;-1:-1:-1;;;;;24581:20:0;;24573:57;;;;;-1:-1:-1;;;24573:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24649:23:0;;24641:58;;;;;-1:-1:-1;;;24641:58:0;;;;;;;;;;;;-1:-1:-1;;;24641:58:0;;;;;;;;;;;;;;;24762:21;24776:6;24762:13;:21::i;:::-;24878:16;24887:6;24878:8;:16::i;:::-;-1:-1:-1;;;;;24913:17:0;;:9;:17;;;;;;;;;;;:27;-1:-1:-1;24913:27:0;24905:58;;;;;-1:-1:-1;;;24905:58:0;;;;;;;;;;;;-1:-1:-1;;;24905:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25054:20:0;;25064:10;25054:20;25051:152;;25124:67;;;;;;;;;;;-1:-1:-1;;;25124:67:0;;;;;;;;-1:-1:-1;;;;;25124:19:0;;-1:-1:-1;25124:19:0;;;:11;:19;;;;;25144:10;25124:31;;;;;;;;;;:67;;25160:6;;25124:35;:67::i;:::-;-1:-1:-1;;;;;25090:19:0;;;;;;:11;:19;;;;;;;;25110:10;25090:31;;;;;;;:101;25051:152;25253:15;25271:23;25279:6;25287;25271:7;:23::i;:::-;-1:-1:-1;;;;;25357:17:0;;:9;:17;;;;;;;;;;;25253:41;;-1:-1:-1;25357:30:0;;25253:41;25357:21;:30::i;:::-;-1:-1:-1;;;;;25337:17:0;;;:9;:17;;;;;;;;;;;:50;;;;25421:20;;;;;;;:33;;25446:7;25421:24;:33::i;:::-;-1:-1:-1;;;;;25398:20:0;;:9;:20;;;;;;;;;;:56;25502:35;25530:6;25502:27;:35::i;:::-;25548:41;25579:9;25548:30;:41::i;:::-;25637:42;25653:6;25661:9;25672:6;25637:15;:42::i;:::-;25722:9;-1:-1:-1;;;;;25705:36:0;25714:6;-1:-1:-1;;;;;25705:36:0;;25733:7;25705:36;;;;;;;;;;;;;;;;;;-1:-1:-1;25759:4:0;;24464:1307;-1:-1:-1;;;;24464:1307:0:o;14907:402::-;14965:17;14974:7;14965:8;:17::i;:::-;:22;14962:288;;15003:14;15020;15026:7;15020:5;:14::i;:::-;-1:-1:-1;;;;;15070:18:0;;:9;:18;;;;;;;;;;;15003:31;;-1:-1:-1;15070:30:0;;15003:31;15070:22;:30::i;:::-;-1:-1:-1;;;;;15049:18:0;;:9;:18;;;;;;;;;;;:51;;;;15143:7;:16;;;:25;;;:37;;15173:6;15143:29;:37::i;:::-;-1:-1:-1;;;;;15115:16:0;;;;;;:7;:16;;;;;:25;;:65;15212:14;;:26;;15231:6;15212:18;:26::i;:::-;15195:14;:43;-1:-1:-1;14962:288:0;15291:10;;-1:-1:-1;;;;;15260:16:0;;;;;;;:7;:16;;;;;:28;;:41;14907:402::o;16539:624::-;-1:-1:-1;;;;;16618:16:0;;;;;;:7;:16;;;;;:19;:29;-1:-1:-1;16618:29:0;16610:38;;;;;;16736:17;16745:7;16736:8;:17::i;:::-;-1:-1:-1;;;;;16846:16:0;;;;;;:7;:16;;;;;:19;:31;;16870:6;16846:23;:31::i;:::-;-1:-1:-1;;;;;16824:16:0;;;;;;:7;:16;;;;;:53;16899:8;;:20;;16912:6;16899:12;:20::i;:::-;16888:8;:31;16972:5;;:31;;;-1:-1:-1;;;16972:31:0;;-1:-1:-1;;;;;16972:31:0;;;;;;;;;;;;;;;:5;;;;;:14;;:31;;;;;;;;;;;;;;:5;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17074:30:0;;-1:-1:-1;17096:7:0;17074:21;:30::i;:::-;17130:25;;;-1:-1:-1;;;;;17130:25:0;;;;;;;;;;;;;;;;;;;;;;;16539:624;;:::o;21444:318::-;21515:11;21512:26;;21529:7;;21512:26;21573:12;;:24;;21590:6;21573:16;:24::i;:::-;21558:12;:39;21622:11;;:23;;21638:6;21622:15;:23::i;:::-;21608:11;:37;-1:-1:-1;;;;;21677:18:0;;:9;:18;;;;;;;;;;;:30;;21700:6;21677:22;:30::i;:::-;-1:-1:-1;;;;;21656:18:0;;:9;:18;;;;;;;;;;;;:51;;;;21733:21;;;;;;;;;;;;;;;;;;;;;;;;21444:318;;:::o;8989:339::-;9046:4;9085:66;9231:17;;9277:15;;;;;:42;;-1:-1:-1;9296:23:0;;;9269:51;-1:-1:-1;;8989:339:0:o;1738:136::-;1796:7;1823:43;1827:1;1830;1823:43;;;;;;;;;;;;;;;;;:3;:43::i;17574:165::-;17661:10;;:22;;17676:6;17661:14;:22::i;:::-;17648:10;:35;17699:32;;;-1:-1:-1;;;;;17699:32:0;;;;;;;;;;;;;;;;;;;;;;;17574:165;;:::o;15873:601::-;15942:5;;:50;;;-1:-1:-1;;;15942:50:0;;-1:-1:-1;;;;;15942:50:0;;;;;;;15978:4;15942:50;;;;;;;;;;;;:5;;;;;:18;;:50;;;;;;;;;;;;;;:5;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16144:17:0;;-1:-1:-1;16153:7:0;16144:8;:17::i;:::-;-1:-1:-1;;;;;16247:16:0;;;;;;:7;:16;;;;;:19;:31;;16271:6;16247:23;:31::i;:::-;-1:-1:-1;;;;;16225:16:0;;;;;;:7;:16;;;;;:53;16300:8;;:20;;16313:6;16300:12;:20::i;:::-;16289:8;:31;16389:28;16409:7;16389:19;:28::i;:::-;16443:23;;;-1:-1:-1;;;;;16443:23:0;;;;;;;;;;;;;;;;;;;;;;;15873:601;;:::o;23029:234::-;-1:-1:-1;;;;;23139:18:0;;:9;:18;;;;;;;;;;;:30;;23162:6;23139:22;:30::i;:::-;-1:-1:-1;;;;;23118:18:0;;:9;:18;;;;;;;;;;;:51;;;;23180:12;:22;;;;;;;23218:37;;;;;;;23118:9;;23218:37;;;;;;;;;;;23029:234;;:::o;2110:237::-;2168:7;2183:6;2179:43;;-1:-1:-1;2209:1:0;2202:8;;2179:43;2246:5;;;2250:1;2246;:5;:1;2270:5;;;;;:10;2262:56;;;;-1:-1:-1;;;2262:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2353:132;2411:7;2438:39;2442:1;2445;2438:39;;;;;;;;;;;;;;;;;:3;:39::i;23522:285::-;23584:8;;;;;;;23581:62;;;23606:11;;:26;;23627:5;23606:26;;;23620:4;23606:26;23595:8;:37;;;;;;;-1:-1:-1;;23595:37:0;;;;;;;;;23634:7;;23581:62;23749:13;;23732:12;;:41;;23768:4;;23732:31;;23749:13;;;;;23732:16;:31;:::i;:41::-;23722:6;:51;;23714:85;;;;;-1:-1:-1;;;23714:85:0;;;;;;;;;;;;-1:-1:-1;;;23714:85:0;;;;;;;;;;;;;;1880:224;1966:7;1981:1;1986;1981:6;1977:30;;;-1:-1:-1;1989:18:0;;;1977:30;2034:12;2026:6;;;;2018:29;;;;-1:-1:-1;;;2018:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2070:5:0;;;1880:224::o;20762:407::-;20832:7;20852:14;20869:33;20897:4;20869:23;20882:9;;20869:8;:12;;:23;;;;:::i;:33::-;20852:50;;20951:74;20963:7;20972:52;21007:16;;20972:30;21000:1;20983:16;;:18;20972:6;:10;;:30;;;;:::i;:52::-;20951:11;:74::i;:::-;21036:44;21042:7;21051:28;21062:16;;21051:6;:10;;:28;;;;:::i;:::-;21036:5;:44::i;:::-;21108:20;:8;21121:6;21108:12;:20::i;17838:135::-;17916:23;17931:7;17916:14;:23::i;:::-;17912:54;;17942:21;17955:7;17942:12;:21::i;18081:129::-;18162:17;18171:7;18162:8;:17::i;:::-;18158:45;;18182:18;18192:7;18182:9;:18::i;8416:474::-;8514:13;:11;:13::i;:::-;8511:33;;8535:7;;8511:33;8558:9;8554:329;8573:11;:18;8571:20;;8554:329;;;8800:11;8812:1;8800:14;;;;;;;;;;;;;;;;;8789:71;;;-1:-1:-1;;;8789:71:0;;8823:10;8789:71;;;;-1:-1:-1;;;;;8789:71:0;;;;;;;;;;;;;;;;;;;;;;8800:14;;;;;8789:33;;:71;;;;;;;;;;;8800:14;;8789:71;;;;;;;;;;;;;;;;;;;;;;;;;8785:87;8593:3;;8554:329;;;;8416:474;;;:::o;2491:345::-;2577:7;2679:12;2672:5;2664:28;;;;-1:-1:-1;;;2664:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2703:9;2719:1;2715;:5;;;;;;;2491:345;-1:-1:-1;;;;;2491:345:0:o;18735:143::-;18799:4;18844:1;18823:18;18833:7;18823:9;:18::i;:::-;:22;:47;;;;18869:1;18849:17;18858:7;18849:8;:17::i;:::-;:21;;18735:143;-1:-1:-1;;18735:143:0:o;10676:461::-;-1:-1:-1;;;;;10735:18:0;;10764:5;10735:18;;;:9;:18;;;;;:34;;-1:-1:-1;;10735:34:0;;;;10824:27;;10949:8;10958:15;;-1:-1:-1;;10958:17:0;;;10949:27;;;;;;;;;;;;;;;;10935:8;:11;;-1:-1:-1;;;;;10949:27:0;;;;10944:1;;10935:11;;;;;;;;;;;;;;:41;;;;;-1:-1:-1;;;;;10935:41:0;;;;;-1:-1:-1;;;;;10935:41:0;;;;;;10987:8;:14;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10987:14:0;;;;;;;11092:1;11058:9;:22;11068:8;11077:1;11068:11;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11068:11:0;11058:22;;;;;;;;;;;;11068:11;11058:31;:35;-1:-1:-1;;11114:13:0;:15;;-1:-1:-1;;11114:15:0;;;10676:461::o;10393:212::-;-1:-1:-1;;;;;10449:18:0;;;;;:9;:18;;;;;:33;;-1:-1:-1;;10449:33:0;10478:4;10449:33;;;;;10523:8;:15;;10493:27;;;:45;;;10549:22;;;;;;;;;;;;-1:-1:-1;;;;;;10549:22:0;;;;;;;10582:13;:15;;;;;;;10393:212::o

Swarm Source

ipfs://822460254bd881cebb0d6d0a0d5ee15d9379589096540e1d0947b0a5f3cae3cc

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.