ETH Price: $3,352.75 (+0.53%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake171859222023-05-04 7:47:59607 days ago1683186479IN
0x9b7b6BBd...A0363DF39
0 ETH0.0112605759.25685225
Unstake152390292022-07-29 18:30:20886 days ago1659119420IN
0x9b7b6BBd...A0363DF39
0 ETH0.0016502213.44464583
Unstake137545182021-12-06 21:03:091121 days ago1638824589IN
0x9b7b6BBd...A0363DF39
0 ETH0.01727051140.6783473
Unstake136733092021-11-23 21:51:591134 days ago1637704319IN
0x9b7b6BBd...A0363DF39
0 ETH0.0119815397.59652566
Unstake136579832021-11-21 11:45:371136 days ago1637495137IN
0x9b7b6BBd...A0363DF39
0 ETH0.0078037963.56639591
Withdraw Dividen...135525532021-11-04 21:15:151153 days ago1636060515IN
0x9b7b6BBd...A0363DF39
0 ETH0.00716099142.94259986
Unstake135525372021-11-04 21:12:311153 days ago1636060351IN
0x9b7b6BBd...A0363DF39
0 ETH0.01948318115.83760211
Withdraw Dividen...133585372021-10-05 10:25:091183 days ago1633429509IN
0x9b7b6BBd...A0363DF39
0 ETH0.0044656689.09050373
Unstake133332692021-10-01 11:53:521187 days ago1633089232IN
0x9b7b6BBd...A0363DF39
0 ETH0.0066244356.14212244
Unstake132295192021-09-15 9:32:221203 days ago1631698342IN
0x9b7b6BBd...A0363DF39
0 ETH0.0049931335.6994355
Unstake131103112021-08-27 23:04:211222 days ago1630105461IN
0x9b7b6BBd...A0363DF39
0 ETH0.0105231175.23710949
Unstake128604132021-07-20 1:03:131261 days ago1626742993IN
0x9b7b6BBd...A0363DF39
0 ETH0.00270124
Unstake128172192021-07-13 6:38:021267 days ago1626158282IN
0x9b7b6BBd...A0363DF39
0 ETH0.0049417126
Unstake127284242021-06-29 10:25:521281 days ago1624962352IN
0x9b7b6BBd...A0363DF39
0 ETH0.0012687213
Unstake126513802021-06-17 10:20:571293 days ago1623925257IN
0x9b7b6BBd...A0363DF39
0 ETH0.0019255911
Withdraw Dividen...125481292021-06-01 10:52:271309 days ago1622544747IN
0x9b7b6BBd...A0363DF39
0 ETH0.0011759515
Unstake125103332021-05-26 13:55:101315 days ago1622037310IN
0x9b7b6BBd...A0363DF39
0 ETH0.0024953131
Unstake124874722021-05-23 0:49:251319 days ago1621730965IN
0x9b7b6BBd...A0363DF39
0 ETH0.007898350
Unstake123639902021-05-03 22:39:361338 days ago1620081576IN
0x9b7b6BBd...A0363DF39
0 ETH0.0020627986
Withdraw Dividen...123639782021-05-03 22:37:021338 days ago1620081422IN
0x9b7b6BBd...A0363DF39
0 ETH0.0045588291
Unstake123639542021-05-03 22:32:001338 days ago1620081120IN
0x9b7b6BBd...A0363DF39
0 ETH0.0092714395
Unstake123411822021-04-30 10:07:061341 days ago1619777226IN
0x9b7b6BBd...A0363DF39
0 ETH0.0063186440
Unstake123283872021-04-28 10:21:051343 days ago1619605265IN
0x9b7b6BBd...A0363DF39
0 ETH0.0030917731.68
Unstake123195912021-04-27 2:01:561345 days ago1619488916IN
0x9b7b6BBd...A0363DF39
0 ETH0.0041965443
Unstake122639872021-04-18 12:06:571353 days ago1618747617IN
0x9b7b6BBd...A0363DF39
0 ETH0.0176752160
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StakingFlama

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-21
*/

pragma solidity ^0.6.2;

library Address {

    function isContract(address account) internal view returns (bool) {

        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.6.0;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

interface IERC20 {
    
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);
    
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

        return c;
    }

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

        return c;
    }

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

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

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

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

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

    function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


library SignedSafeMath {
    int256 constant private _INT256_MIN = -2**255;

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

        require(!(a == -1 && b == _INT256_MIN), "SignedSafeMath: multiplication overflow");

        int256 c = a * b;
        require(c / a == b, "SignedSafeMath: multiplication overflow");

        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != 0, "SignedSafeMath: division by zero");
        require(!(b == -1 && a == _INT256_MIN), "SignedSafeMath: division overflow");

        int256 c = a / b;

        return c;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a), "SignedSafeMath: subtraction overflow");

        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a), "SignedSafeMath: addition overflow");

        return c; 
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
  }
}


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

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    address private _owner;

    constructor () public {
        _name = "Flama Staking Shares";
        _symbol = "FSS";
        _decimals = 18;
        _owner = msg.sender;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

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

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

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

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

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

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

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

contract StakingFlama is ERC20 {
    
    using SafeMath for uint256;
    using SignedSafeMath for int256;

    address public owner;
    IERC20 public flama;
    IERC20 public flapp;
    
    uint256 constant internal multiplier = 2**64;
    uint256 public calculatorFLAP;

    uint256 public lastFMAbalance;
    uint256 public lastFLAPbalance;
    uint256 public stakeFee;
    uint256 public unstakeFee;
    uint256 public maxFee = 100000 ether;
    uint256 public minToStake;
    uint256 public minToUnstake;
    
	mapping(address => int256) public correctionFlapp;
	mapping(address => uint256) public withdrawnFLAP;
    

    event Staked(address indexed user, uint256 amount, uint256 total);
    event Unstaked(address indexed user, uint256 amount, uint256 total);
    event FlappWithdrawn(address indexed user, uint256 amount);
    event BalanceSnapshot(uint256 FMA, uint256 FLAP);
    
    constructor (address FMA, address FLAP) public {
        
        flama = IERC20(FMA);
        flapp = IERC20(FLAP);
        owner = msg.sender;
        minToStake = 10000;
        minToUnstake = 10000;
    }
    
    function setLimits(uint256 _minToStake, uint256 _minToUnstake) public onlyOwner {
        minToStake = _minToStake;
        minToUnstake = _minToUnstake;
    }
    
    function setFees(uint256 newStakeFee, uint256 newUnstakeFee) public onlyOwner {
        require(newStakeFee <= maxFee);
        require(newUnstakeFee <= maxFee);
        stakeFee = newStakeFee;
        unstakeFee = newUnstakeFee;
    }
    
    function reduceMaxFee(uint256 newMaxFee) public onlyOwner {
        require(newMaxFee < maxFee);
        maxFee = newMaxFee;
    }

    function stake(uint256 amount) public {
        stakeFor(msg.sender, amount);
    }
    
    function checkSupplyNotZero() internal view returns (uint256) {
         
        if (totalSupply() > 0) {
            return totalSupply();
        } else if (totalSupply() == 0) {
            return 1;
        }
    }
    
    function stakeFor(address user, uint256 amount) internal {
        
        require(flama.balanceOf(user) >= amount, "Amount exceeds your FMA balance");
        require(flapp.balanceOf(user) >= stakeFee, "Your FLAP balance can not cover the fee");
        require(amount >= minToStake, "Less than minToStake");
        
       

        uint256 shares = amount.mul(checkSupplyNotZero()).div(getBalanceFLAMA()).mul(97).div(100);

        
        require(flama.transferFrom(user, address(this), amount), "Stake required");
        require(flapp.transferFrom(user, address(this), stakeFee), "FLAP fee required");
		
		updateRewardPerShare();
        
        _mint(user, shares);
        lastFMAbalance = getBalanceFLAMA();
		lastFLAPbalance = getBalanceFLAPP();

        emit Staked(user, amount, totalSupply());
        emit BalanceSnapshot(lastFMAbalance, lastFLAPbalance);
    }

    
    function updateRewardPerShare() internal {
        
        if( getBalanceFLAPP() > lastFLAPbalance) {
        uint256 FLAPdiff = getBalanceFLAPP().sub(lastFLAPbalance);
		uint256 updateAmountFLAP = FLAPdiff.mul(multiplier).div(totalSupply());

		calculatorFLAP = calculatorFLAP.add(updateAmountFLAP);
		}

    }
    
    function unstake(uint256 amount) public {
        unstakeFor(msg.sender, amount);
    }
   
    function unstakeFor(address user, uint256 amount) internal {
        require(balanceOf(user) >= amount, "Amount exceeds your share balance");
        require(minToUnstake <= amount, "Less than minToUnstake");

        uint256 unstakeAmount = amount.mul(getBalanceFLAMA()).div(totalSupply());

        require(flama.transfer(user, unstakeAmount));
        withdrawDividendsFLAP();
        _burn(user, amount);


        lastFMAbalance = getBalanceFLAMA();
		lastFLAPbalance = getBalanceFLAPP();

        emit Unstaked(msg.sender, amount, totalSupply());
        emit BalanceSnapshot(lastFMAbalance, lastFLAPbalance);

    }
    
    function getBalanceFLAMA() public view returns (uint256) {

		return flama.balanceOf(address(this));
	}
	
	function getBalanceFLAPP() public view returns (uint256) {

		return flapp.balanceOf(address(this));
	}
	
	function withdrawDividendsFLAP() public {
	    
	    updateRewardPerShare();
	    uint256 flap = withdrawableFLAPOf(msg.sender);
	    withdrawnFLAP[msg.sender] = withdrawnFLAP[msg.sender].add(flap);
	    require(flapp.transfer(msg.sender, flap));
	    lastFLAPbalance = getBalanceFLAPP();
	    emit FlappWithdrawn(msg.sender, flap);
	}

	function withdrawableFLAPOf(address user) internal view returns(uint256) {
		return accumulativeFLAPOf(user).sub(withdrawnFLAP[user]);
	}
	
	function accumulativeFLAPOf(address _owner) internal view returns(uint256) {
		return (calculatorFLAP.mul(balanceOf(_owner)).toInt256Safe()
			.add(correctionFlapp[_owner]).toUint256Safe()).div(multiplier);
	}
	
	function _transfer(address from, address to, uint256 value) internal override {
		
		updateRewardPerShare();
		uint256 burnt = value.mul(3).div(100);
		uint256 newAmount = value.sub(burnt);
		_burn(from, burnt);
		super._transfer(from, to, newAmount);
		correctionFlapp[from] = correctionFlapp[from]
			.add( (calculatorFLAP.mul(newAmount)).toInt256Safe() );
		correctionFlapp[to] = correctionFlapp[to]
			.sub( (calculatorFLAP.mul(value)).toInt256Safe() );
	}
	
	function _mint(address account, uint256 value) internal override {
		super._mint(account, value);

		correctionFlapp[account] = correctionFlapp[account]
			.sub( (calculatorFLAP.mul(value)).toInt256Safe() );
	}
	
	function _burn(address account, uint256 value) internal override {
		super._burn(account, value);

		correctionFlapp[account] = correctionFlapp[account]
			.add( (calculatorFLAP.mul(value)).toInt256Safe() );
	}
}

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

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;
    address public _owner;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 public _maxSupply;
    
    modifier onlyOwner() {
        require(msg.sender == _owner, "Only the owner is allowed to access this function.");
        _;
    }

    constructor () public {
        _name = "FLAPP";
        _symbol = "FLAP";
        _decimals = 18;
        _owner = msg.sender;
        _maxSupply = 500000000000000000000000000;
    }
    
    
    function newOwner(address _newOwner) public onlyOwner {
        _owner = _newOwner;
    }

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

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

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    


    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    /*function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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


    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        require(_totalSupply + amount <= _maxSupply);
        _beforeTokenTransfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    
    function burn(uint256 amount) public virtual {
        
        
        _burn(msg.sender, amount);
        
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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


    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
    
    function mint(address[] memory holders, uint256[] memory amounts) public onlyOwner {
        
        
        uint8 i = 0;
        for (i; i < holders.length; i++) {
            _mint(holders[i], amounts[i]);
        }
    }
}



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract Flama is Context, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;
    
    event MultiMint(uint256 _totalSupply);

    uint256 private _totalSupply;
    address public stakingAccount;
    address public _owner;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    
    modifier onlyOwner() {
        require(msg.sender == _owner, "Only the owner is allowed to access this function.");
        _;
    }

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor () public {
        _name = "FLAMA";
        _symbol = "FMA";
        _decimals = 18;
        _owner = msg.sender;
    }
    
    function setStakingAccount(address newStakingAccount) public onlyOwner {
        stakingAccount = newStakingAccount;
    }
    
    function newOwner(address _newOwner) public onlyOwner {
        _owner = _newOwner;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    


    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    /*function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        
        _beforeTokenTransfer(sender, recipient, amount);
        
        uint256 onePercent = amount.div(100);
        uint256 burnAmount = onePercent.mul(2);
        uint256 stakeAmount = onePercent.mul(1);
        uint256 newTransferAmount = amount.sub(burnAmount + stakeAmount);
        _totalSupply = _totalSupply.sub(burnAmount);
        
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(newTransferAmount);
        _balances[stakingAccount] = _balances[stakingAccount].add(stakeAmount);
        emit Transfer(sender, address(0), burnAmount);
        emit Transfer(sender, stakingAccount, stakeAmount);
        emit Transfer(sender, recipient, newTransferAmount);
    }


    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    
    function burn(uint256 amount) public virtual {
        
        
        _burn(msg.sender, amount);
        
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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


    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
    
    function multimintToken(address[] memory holders, uint256[] memory amounts) public onlyOwner {
        
        
        uint8 i = 0;
        for (i; i < holders.length; i++) {
            _mint(holders[i], amounts[i]);
        }
        emit MultiMint(_totalSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"FMA","type":"address"},{"internalType":"address","name":"FLAP","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"FMA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"FLAP","type":"uint256"}],"name":"BalanceSnapshot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FlappWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"Unstaked","type":"event"},{"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":[],"name":"calculatorFLAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"correctionFlapp","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flama","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flapp","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalanceFLAMA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalanceFLAPP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastFLAPbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastFMAbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minToStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minToUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxFee","type":"uint256"}],"name":"reduceMaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStakeFee","type":"uint256"},{"internalType":"uint256","name":"newUnstakeFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minToStake","type":"uint256"},{"internalType":"uint256","name":"_minToUnstake","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawDividendsFLAP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withdrawnFLAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405269152d02c7e14af6800000600e553480156200001f57600080fd5b50604051620035c6380380620035c6833981810160405260408110156200004557600080fd5b8101908080519060200190929190805190602001909291905050506040518060400160405280601481526020017f466c616d61205374616b696e672053686172657300000000000000000000000081525060039080519060200190620000ad92919062000236565b506040518060400160405280600381526020017f465353000000000000000000000000000000000000000000000000000000000081525060049080519060200190620000fb92919062000236565b506012600560006101000a81548160ff021916908360ff16021790555033600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612710600f819055506127106010819055505050620002e5565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027957805160ff1916838001178555620002aa565b82800160010185558215620002aa579182015b82811115620002a95782518255916020019190600101906200028c565b5b509050620002b99190620002bd565b5090565b620002e291905b80821115620002de576000816000905550600101620002c4565b5090565b90565b6132d180620002f56000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637bd6f4281161010f578063a694fc3a116100a2578063d0648e3f11610071578063d0648e3f146108eb578063dd62ed3e14610909578063f282776714610981578063fa3066171461099f576101f0565b8063a694fc3a14610801578063a9059cbb1461082f578063aa1cb28a14610895578063c4590d3f146108b3576101f0565b806393b8df33116100de57806393b8df33146106a2578063946595fe146106c057806395d89b4114610718578063a457c2d71461079b576101f0565b80637bd6f428146105d25780638d8f87611461061c5780638da5cb5b1461063a5780638ea97d2614610684576101f0565b80632e17de781161018757806339a5f3741161015657806339a5f374146104e657806343deb2921461053e5780636164e1c51461055c57806370a082311461057a576101f0565b80632e17de7814610400578063313ce5671461042e57806332de7d77146104525780633950935114610480576101f0565b80630b78f9c0116101c35780630b78f9c01461030657806318160ddd1461033e578063222c97771461035c57806323b872dd1461037a576101f0565b806301f59d16146101f5578063029424511461021357806306fdde031461021d578063095ea7b3146102a0575b600080fd5b6101fd6109e9565b6040518082815260200191505060405180910390f35b61021b6109ef565b005b610225610be5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561026557808201518184015260208101905061024a565b50505050905090810190601f1680156102925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ec600480360360408110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b61033c6004803603604081101561031c57600080fd5b810190808035906020019092919080359060200190929190505050610ca5565b005b610346610d2f565b6040518082815260200191505060405180910390f35b610364610d39565b6040518082815260200191505060405180910390f35b6103e66004803603606081101561039057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d3f565b604051808215151515815260200191505060405180910390f35b61042c6004803603602081101561041657600080fd5b8101908080359060200190929190505050610e18565b005b610436610e25565b604051808260ff1660ff16815260200191505060405180910390f35b61047e6004803603602081101561046857600080fd5b8101908080359060200190929190505050610e3c565b005b6104cc6004803603604081101561049657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eae565b604051808215151515815260200191505060405180910390f35b610528600480360360208110156104fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f61565b6040518082815260200191505060405180910390f35b610546610f79565b6040518082815260200191505060405180910390f35b610564610f7f565b6040518082815260200191505060405180910390f35b6105bc6004803603602081101561059057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f85565b6040518082815260200191505060405180910390f35b6105da610fcd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610624610ff3565b6040518082815260200191505060405180910390f35b610642610ff9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61068c61101f565b6040518082815260200191505060405180910390f35b6106aa611025565b6040518082815260200191505060405180910390f35b610702600480360360208110156106d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061102b565b6040518082815260200191505060405180910390f35b610720611043565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610760578082015181840152602081019050610745565b50505050905090810190601f16801561078d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107e7600480360360408110156107b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e5565b604051808215151515815260200191505060405180910390f35b61082d6004803603602081101561081757600080fd5b81019080803590602001909291905050506111b2565b005b61087b6004803603604081101561084557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111bf565b604051808215151515815260200191505060405180910390f35b61089d6111dd565b6040518082815260200191505060405180910390f35b6108e9600480360360408110156108c957600080fd5b8101908080359060200190929190803590602001909291905050506112be565b005b6108f361132a565b6040518082815260200191505060405180910390f35b61096b6004803603604081101561091f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611330565b6040518082815260200191505060405180910390f35b6109896113b7565b6040518082815260200191505060405180910390f35b6109a7611498565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600e5481565b6109f76114be565b6000610a0233611548565b9050610a5681601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050506040513d6020811015610b6c57600080fd5b8101908080519060200190929190505050610b8657600080fd5b610b8e6111dd565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f7a875c097807c921ed85487a552550c6841af4f37d84d02e0c0aecd04e577d3f826040518082815260200191505060405180910390a250565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b5050505050905090565b6000610c9b610c94611633565b848461163b565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cff57600080fd5b600e54821115610d0e57600080fd5b600e54811115610d1d57600080fd5b81600c8190555080600d819055505050565b6000600254905090565b600c5481565b6000610d4c848484611832565b610e0d84610d58611633565b610e08856040518060600160405280602881526020016131c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dbe611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b61163b565b600190509392505050565b610e223382611aba565b50565b6000600560009054906101000a900460ff16905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e9657600080fd5b600e548110610ea457600080fd5b80600e8190555050565b6000610f57610ebb611633565b84610f528560016000610ecc611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b61163b565b6001905092915050565b60116020528060005260406000206000915090505481565b600f5481565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600b5481565b60126020528060005260406000206000915090505481565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110db5780601f106110b0576101008083540402835291602001916110db565b820191906000526020600020905b8154815290600101906020018083116110be57829003601f168201915b5050505050905090565b60006111a86110f2611633565b846111a385604051806060016040528060258152602001613277602591396001600061111c611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b61163b565b6001905092915050565b6111bc3382611d8a565b50565b60006111d36111cc611633565b8484611832565b6001905092915050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561127e57600080fd5b505afa158015611292573d6000803e3d6000fd5b505050506040513d60208110156112a857600080fd5b8101908080519060200190929190505050905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461131857600080fd5b81600f81905550806010819055505050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561145857600080fd5b505afa15801561146c573d6000803e3d6000fd5b505050506040513d602081101561148257600080fd5b8101908080519060200190929190505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b546114c96111dd565b11156115465760006114ed600b546114df6111dd565b6124cb90919063ffffffff16565b905060006115266114fc610d2f565b611518680100000000000000008561251590919063ffffffff16565b61259b90919063ffffffff16565b905061153d816009546115ab90919063ffffffff16565b60098190555050505b565b60006115a4601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611596846125e5565b6124cb90919063ffffffff16565b9050919050565b600080828401905083811015611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061322f6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131106022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61183a6114be565b6000611863606461185560038561251590919063ffffffff16565b61259b90919063ffffffff16565b9050600061187a82846124cb90919063ffffffff16565b90506118868583612687565b611891858583612746565b6118ff6118b16118ac8360095461251590919063ffffffff16565b612a07565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2490919063ffffffff16565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b061196261195d8560095461251590919063ffffffff16565b612a07565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab290919063ffffffff16565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6000838311158290611aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a6c578082015181840152602081019050611a51565b50505050905090810190601f168015611a995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b80611ac483610f85565b1015611b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130ef6021913960400191505060405180910390fd5b806010541115611b93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4c657373207468616e206d696e546f556e7374616b650000000000000000000081525060200191505060405180910390fd5b6000611bc8611ba0610d2f565b611bba611bab6113b7565b8561251590919063ffffffff16565b61259b90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611c7357600080fd5b505af1158015611c87573d6000803e3d6000fd5b505050506040513d6020811015611c9d57600080fd5b8101908080519060200190929190505050611cb757600080fd5b611cbf6109ef565b611cc98383612687565b611cd16113b7565b600a81905550611cdf6111dd565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e83611d26610d2f565b604051808381526020018281526020019250505060405180910390a27fda386a6466eb6f0dea8fd5fcbccdc8ded4f0ca4c2916b98d582deb6c9b317461600a54600b54604051808381526020018281526020019250505060405180910390a1505050565b80600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e2a57600080fd5b505afa158015611e3e573d6000803e3d6000fd5b505050506040513d6020811015611e5457600080fd5b81019080805190602001909291905050501015611ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206578636565647320796f757220464d412062616c616e63650081525060200191505060405180910390fd5b600c54600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f7b57600080fd5b505afa158015611f8f573d6000803e3d6000fd5b505050506040513d6020811015611fa557600080fd5b8101908080519060200190929190505050101561200d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131796027913960400191505060405180910390fd5b600f54811015612085576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c657373207468616e206d696e546f5374616b6500000000000000000000000081525060200191505060405180910390fd5b60006120e060646120d260616120c461209c6113b7565b6120b66120a7612b40565b8961251590919063ffffffff16565b61259b90919063ffffffff16565b61251590919063ffffffff16565b61259b90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156121bf57600080fd5b505af11580156121d3573d6000803e3d6000fd5b505050506040513d60208110156121e957600080fd5b810190808051906020019092919050505061226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5374616b6520726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8430600c546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561234b57600080fd5b505af115801561235f573d6000803e3d6000fd5b505050506040513d602081101561237557600080fd5b81019080805190602001909291905050506123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f464c41502066656520726571756972656400000000000000000000000000000081525060200191505060405180910390fd5b6124006114be565b61240a8382612b7d565b6124126113b7565b600a819055506124206111dd565b600b819055508273ffffffffffffffffffffffffffffffffffffffff167f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee9083612467610d2f565b604051808381526020018281526020019250505060405180910390a27fda386a6466eb6f0dea8fd5fcbccdc8ded4f0ca4c2916b98d582deb6c9b317461600a54600b54604051808381526020018281526020019250505060405180910390a1505050565b600061250d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119fa565b905092915050565b6000808314156125285760009050612595565b600082840290508284828161253957fe5b0414612590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131a06021913960400191505060405180910390fd5b809150505b92915050565b60006125dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c3c565b905092915050565b60006126806801000000000000000061267261266d601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265f61265a61264989610f85565b60095461251590919063ffffffff16565b612a07565b612a2490919063ffffffff16565b612d02565b61259b90919063ffffffff16565b9050919050565b6126918282612d19565b6126ff6126b16126ac8360095461251590919063ffffffff16565b612a07565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2490919063ffffffff16565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061320a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806130aa6023913960400191505060405180910390fd5b61285d838383612edd565b6128c881604051806060016040528060268152602001613132602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808290506000811215612a1b57600080fd5b80915050919050565b600080828401905060008312158015612a3d5750838112155b80612a535750600083128015612a5257508381125b5b612aa8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131586021913960400191505060405180910390fd5b8091505092915050565b600080828403905060008312158015612acb5750838113155b80612ae15750600083128015612ae057508381135b5b612b36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132536024913960400191505060405180910390fd5b8091505092915050565b600080612b4b610d2f565b1115612b6057612b59610d2f565b9050612b7a565b6000612b6a610d2f565b1415612b795760019050612b7a565b5b90565b612b878282612ee2565b612bf5612ba7612ba28360095461251590919063ffffffff16565b612a07565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab290919063ffffffff16565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008083118290612ce8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612cad578082015181840152602081019050612c92565b50505050905090810190601f168015612cda5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612cf457fe5b049050809150509392505050565b600080821215612d1157600080fd5b819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131e96021913960400191505060405180910390fd5b612dab82600083612edd565b612e16816040518060600160405280602281526020016130cd602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e6d816002546124cb90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612f9160008383612edd565b612fa6816002546115ab90919063ffffffff16565b600281905550612ffd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e6365416d6f756e74206578636565647320796f75722073686172652062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77596f757220464c41502062616c616e63652063616e206e6f7420636f7665722074686520666565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f7745524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bc848d9008ecb2db913896285767f6427ef3b3d7385e3ce1ecb3c7e5501f01ce64736f6c634300060600330000000000000000000000000f8794f66c7170c4f9163a8498371a747114f6c4000000000000000000000000cfb72ed3647cc8e7fa52e4f121ecdabefc305e7f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637bd6f4281161010f578063a694fc3a116100a2578063d0648e3f11610071578063d0648e3f146108eb578063dd62ed3e14610909578063f282776714610981578063fa3066171461099f576101f0565b8063a694fc3a14610801578063a9059cbb1461082f578063aa1cb28a14610895578063c4590d3f146108b3576101f0565b806393b8df33116100de57806393b8df33146106a2578063946595fe146106c057806395d89b4114610718578063a457c2d71461079b576101f0565b80637bd6f428146105d25780638d8f87611461061c5780638da5cb5b1461063a5780638ea97d2614610684576101f0565b80632e17de781161018757806339a5f3741161015657806339a5f374146104e657806343deb2921461053e5780636164e1c51461055c57806370a082311461057a576101f0565b80632e17de7814610400578063313ce5671461042e57806332de7d77146104525780633950935114610480576101f0565b80630b78f9c0116101c35780630b78f9c01461030657806318160ddd1461033e578063222c97771461035c57806323b872dd1461037a576101f0565b806301f59d16146101f5578063029424511461021357806306fdde031461021d578063095ea7b3146102a0575b600080fd5b6101fd6109e9565b6040518082815260200191505060405180910390f35b61021b6109ef565b005b610225610be5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561026557808201518184015260208101905061024a565b50505050905090810190601f1680156102925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ec600480360360408110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b61033c6004803603604081101561031c57600080fd5b810190808035906020019092919080359060200190929190505050610ca5565b005b610346610d2f565b6040518082815260200191505060405180910390f35b610364610d39565b6040518082815260200191505060405180910390f35b6103e66004803603606081101561039057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d3f565b604051808215151515815260200191505060405180910390f35b61042c6004803603602081101561041657600080fd5b8101908080359060200190929190505050610e18565b005b610436610e25565b604051808260ff1660ff16815260200191505060405180910390f35b61047e6004803603602081101561046857600080fd5b8101908080359060200190929190505050610e3c565b005b6104cc6004803603604081101561049657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eae565b604051808215151515815260200191505060405180910390f35b610528600480360360208110156104fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f61565b6040518082815260200191505060405180910390f35b610546610f79565b6040518082815260200191505060405180910390f35b610564610f7f565b6040518082815260200191505060405180910390f35b6105bc6004803603602081101561059057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f85565b6040518082815260200191505060405180910390f35b6105da610fcd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610624610ff3565b6040518082815260200191505060405180910390f35b610642610ff9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61068c61101f565b6040518082815260200191505060405180910390f35b6106aa611025565b6040518082815260200191505060405180910390f35b610702600480360360208110156106d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061102b565b6040518082815260200191505060405180910390f35b610720611043565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610760578082015181840152602081019050610745565b50505050905090810190601f16801561078d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107e7600480360360408110156107b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e5565b604051808215151515815260200191505060405180910390f35b61082d6004803603602081101561081757600080fd5b81019080803590602001909291905050506111b2565b005b61087b6004803603604081101561084557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111bf565b604051808215151515815260200191505060405180910390f35b61089d6111dd565b6040518082815260200191505060405180910390f35b6108e9600480360360408110156108c957600080fd5b8101908080359060200190929190803590602001909291905050506112be565b005b6108f361132a565b6040518082815260200191505060405180910390f35b61096b6004803603604081101561091f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611330565b6040518082815260200191505060405180910390f35b6109896113b7565b6040518082815260200191505060405180910390f35b6109a7611498565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600e5481565b6109f76114be565b6000610a0233611548565b9050610a5681601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050506040513d6020811015610b6c57600080fd5b8101908080519060200190929190505050610b8657600080fd5b610b8e6111dd565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f7a875c097807c921ed85487a552550c6841af4f37d84d02e0c0aecd04e577d3f826040518082815260200191505060405180910390a250565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b5050505050905090565b6000610c9b610c94611633565b848461163b565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cff57600080fd5b600e54821115610d0e57600080fd5b600e54811115610d1d57600080fd5b81600c8190555080600d819055505050565b6000600254905090565b600c5481565b6000610d4c848484611832565b610e0d84610d58611633565b610e08856040518060600160405280602881526020016131c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dbe611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b61163b565b600190509392505050565b610e223382611aba565b50565b6000600560009054906101000a900460ff16905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e9657600080fd5b600e548110610ea457600080fd5b80600e8190555050565b6000610f57610ebb611633565b84610f528560016000610ecc611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b61163b565b6001905092915050565b60116020528060005260406000206000915090505481565b600f5481565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600b5481565b60126020528060005260406000206000915090505481565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110db5780601f106110b0576101008083540402835291602001916110db565b820191906000526020600020905b8154815290600101906020018083116110be57829003601f168201915b5050505050905090565b60006111a86110f2611633565b846111a385604051806060016040528060258152602001613277602591396001600061111c611633565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b61163b565b6001905092915050565b6111bc3382611d8a565b50565b60006111d36111cc611633565b8484611832565b6001905092915050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561127e57600080fd5b505afa158015611292573d6000803e3d6000fd5b505050506040513d60208110156112a857600080fd5b8101908080519060200190929190505050905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461131857600080fd5b81600f81905550806010819055505050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561145857600080fd5b505afa15801561146c573d6000803e3d6000fd5b505050506040513d602081101561148257600080fd5b8101908080519060200190929190505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b546114c96111dd565b11156115465760006114ed600b546114df6111dd565b6124cb90919063ffffffff16565b905060006115266114fc610d2f565b611518680100000000000000008561251590919063ffffffff16565b61259b90919063ffffffff16565b905061153d816009546115ab90919063ffffffff16565b60098190555050505b565b60006115a4601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611596846125e5565b6124cb90919063ffffffff16565b9050919050565b600080828401905083811015611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061322f6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131106022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61183a6114be565b6000611863606461185560038561251590919063ffffffff16565b61259b90919063ffffffff16565b9050600061187a82846124cb90919063ffffffff16565b90506118868583612687565b611891858583612746565b6118ff6118b16118ac8360095461251590919063ffffffff16565b612a07565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2490919063ffffffff16565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b061196261195d8560095461251590919063ffffffff16565b612a07565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab290919063ffffffff16565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6000838311158290611aa7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a6c578082015181840152602081019050611a51565b50505050905090810190601f168015611a995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b80611ac483610f85565b1015611b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806130ef6021913960400191505060405180910390fd5b806010541115611b93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4c657373207468616e206d696e546f556e7374616b650000000000000000000081525060200191505060405180910390fd5b6000611bc8611ba0610d2f565b611bba611bab6113b7565b8561251590919063ffffffff16565b61259b90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611c7357600080fd5b505af1158015611c87573d6000803e3d6000fd5b505050506040513d6020811015611c9d57600080fd5b8101908080519060200190929190505050611cb757600080fd5b611cbf6109ef565b611cc98383612687565b611cd16113b7565b600a81905550611cdf6111dd565b600b819055503373ffffffffffffffffffffffffffffffffffffffff167f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e83611d26610d2f565b604051808381526020018281526020019250505060405180910390a27fda386a6466eb6f0dea8fd5fcbccdc8ded4f0ca4c2916b98d582deb6c9b317461600a54600b54604051808381526020018281526020019250505060405180910390a1505050565b80600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e2a57600080fd5b505afa158015611e3e573d6000803e3d6000fd5b505050506040513d6020811015611e5457600080fd5b81019080805190602001909291905050501015611ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206578636565647320796f757220464d412062616c616e63650081525060200191505060405180910390fd5b600c54600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f7b57600080fd5b505afa158015611f8f573d6000803e3d6000fd5b505050506040513d6020811015611fa557600080fd5b8101908080519060200190929190505050101561200d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131796027913960400191505060405180910390fd5b600f54811015612085576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c657373207468616e206d696e546f5374616b6500000000000000000000000081525060200191505060405180910390fd5b60006120e060646120d260616120c461209c6113b7565b6120b66120a7612b40565b8961251590919063ffffffff16565b61259b90919063ffffffff16565b61251590919063ffffffff16565b61259b90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8430856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156121bf57600080fd5b505af11580156121d3573d6000803e3d6000fd5b505050506040513d60208110156121e957600080fd5b810190808051906020019092919050505061226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5374616b6520726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8430600c546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561234b57600080fd5b505af115801561235f573d6000803e3d6000fd5b505050506040513d602081101561237557600080fd5b81019080805190602001909291905050506123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f464c41502066656520726571756972656400000000000000000000000000000081525060200191505060405180910390fd5b6124006114be565b61240a8382612b7d565b6124126113b7565b600a819055506124206111dd565b600b819055508273ffffffffffffffffffffffffffffffffffffffff167f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee9083612467610d2f565b604051808381526020018281526020019250505060405180910390a27fda386a6466eb6f0dea8fd5fcbccdc8ded4f0ca4c2916b98d582deb6c9b317461600a54600b54604051808381526020018281526020019250505060405180910390a1505050565b600061250d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119fa565b905092915050565b6000808314156125285760009050612595565b600082840290508284828161253957fe5b0414612590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131a06021913960400191505060405180910390fd5b809150505b92915050565b60006125dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c3c565b905092915050565b60006126806801000000000000000061267261266d601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265f61265a61264989610f85565b60095461251590919063ffffffff16565b612a07565b612a2490919063ffffffff16565b612d02565b61259b90919063ffffffff16565b9050919050565b6126918282612d19565b6126ff6126b16126ac8360095461251590919063ffffffff16565b612a07565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2490919063ffffffff16565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061320a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806130aa6023913960400191505060405180910390fd5b61285d838383612edd565b6128c881604051806060016040528060268152602001613132602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808290506000811215612a1b57600080fd5b80915050919050565b600080828401905060008312158015612a3d5750838112155b80612a535750600083128015612a5257508381125b5b612aa8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131586021913960400191505060405180910390fd5b8091505092915050565b600080828403905060008312158015612acb5750838113155b80612ae15750600083128015612ae057508381135b5b612b36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132536024913960400191505060405180910390fd5b8091505092915050565b600080612b4b610d2f565b1115612b6057612b59610d2f565b9050612b7a565b6000612b6a610d2f565b1415612b795760019050612b7a565b5b90565b612b878282612ee2565b612bf5612ba7612ba28360095461251590919063ffffffff16565b612a07565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab290919063ffffffff16565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008083118290612ce8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612cad578082015181840152602081019050612c92565b50505050905090810190601f168015612cda5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612cf457fe5b049050809150509392505050565b600080821215612d1157600080fd5b819050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131e96021913960400191505060405180910390fd5b612dab82600083612edd565b612e16816040518060600160405280602281526020016130cd602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119fa9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e6d816002546124cb90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612f9160008383612edd565b612fa6816002546115ab90919063ffffffff16565b600281905550612ffd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e6365416d6f756e74206578636565647320796f75722073686172652062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77596f757220464c41502062616c616e63652063616e206e6f7420636f7665722074686520666565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f7745524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bc848d9008ecb2db913896285767f6427ef3b3d7385e3ce1ecb3c7e5501f01ce64736f6c63430006060033

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

0000000000000000000000000f8794f66c7170c4f9163a8498371a747114f6c4000000000000000000000000cfb72ed3647cc8e7fa52e4f121ecdabefc305e7f

-----Decoded View---------------
Arg [0] : FMA (address): 0x0f8794f66C7170c4f9163a8498371A747114f6C4
Arg [1] : FLAP (address): 0xCfb72ED3647cC8E7FA52E4F121eCdAbEfC305e7f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000f8794f66c7170c4f9163a8498371a747114f6c4
Arg [1] : 000000000000000000000000cfb72ed3647cc8e7fa52e4f121ecdabefc305e7f


Deployed Bytecode Sourcemap

10583:5906:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10583:5906:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;11009:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14862:343;;;:::i;:::-;;6908:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6908:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7762:169;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7762:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11910:240;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;11910:240:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7185:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10947:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7939:321;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7939:321:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13887:89;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;13887:89:0;;;;;;;;;;;;;;;;;:::i;:::-;;7094:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12162:133;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12162:133:0;;;;;;;;;;;;;;;;;:::i;:::-;;8268:218;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;8268:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11121:49;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;11121:49:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11052:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10836:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7293:119;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7293:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10753:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11084:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10700:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10977:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10910:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11174:48;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;11174:48:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6999:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6999:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8494:269;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;8494:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12303:85;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12303:85:0;;;;;;;;;;;;;;;;;:::i;:::-;;7420:175;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7420:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14750:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11736:162;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;11736:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10874:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7603:151;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;7603:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14638:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10727:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11009:36;;;;:::o;14862:343::-;14917:22;:20;:22::i;:::-;14947:12;14962:30;14981:10;14962:18;:30::i;:::-;14947:45;;15028:35;15058:4;15028:13;:25;15042:10;15028:25;;;;;;;;;;;;;;;;:29;;:35;;;;:::i;:::-;15000:13;:25;15014:10;15000:25;;;;;;;;;;;;;;;:63;;;;15079:5;;;;;;;;;;;:14;;;15094:10;15106:4;15079:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15079:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15079:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;15079:32:0;;;;;;;;;;;;;;;;15071:41;;12:1:-1;9;2:12;15071:41:0;15138:17;:15;:17::i;:::-;15120:15;:35;;;;15183:10;15168:32;;;15195:4;15168:32;;;;;;;;;;;;;;;;;;14862:343;:::o;6908:83::-;6945:13;6978:5;6971:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6908:83;:::o;7762:169::-;7845:4;7862:39;7871:12;:10;:12::i;:::-;7885:7;7894:6;7862:8;:39::i;:::-;7919:4;7912:11;;7762:169;;;;:::o;11910:240::-;6877:6;;;;;;;;;;;6863:20;;:10;:20;;;6855:29;;12:1:-1;9;2:12;6855:29:0;12022:6:::1;;12007:11;:21;;11999:30;;12:1:-1;9::::0;2:12:::1;11999:30:0;12065:6;;12048:13;:23;;12040:32;;12:1:-1;9::::0;2:12:::1;12040:32:0;12094:11;12083:8;:22;;;;12129:13;12116:10;:26;;;;11910:240:::0;;:::o;7185:100::-;7238:7;7265:12;;7258:19;;7185:100;:::o;10947:23::-;;;;:::o;7939:321::-;8045:4;8062:36;8072:6;8080:9;8091:6;8062:9;:36::i;:::-;8109:121;8118:6;8126:12;:10;:12::i;:::-;8140:89;8178:6;8140:89;;;;;;;;;;;;;;;;;:11;:19;8152:6;8140:19;;;;;;;;;;;;;;;:33;8160:12;:10;:12::i;:::-;8140:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;8109:8;:121::i;:::-;8248:4;8241:11;;7939:321;;;;;:::o;13887:89::-;13938:30;13949:10;13961:6;13938:10;:30::i;:::-;13887:89;:::o;7094:83::-;7135:5;7160:9;;;;;;;;;;;7153:16;;7094:83;:::o;12162:133::-;6877:6;;;;;;;;;;;6863:20;;:10;:20;;;6855:29;;12:1:-1;9;2:12;6855:29:0;12251:6:::1;;12239:9;:18;12231:27;;12:1:-1;9::::0;2:12:::1;12231:27:0;12278:9;12269:6;:18;;;;12162:133:::0;:::o;8268:218::-;8356:4;8373:83;8382:12;:10;:12::i;:::-;8396:7;8405:50;8444:10;8405:11;:25;8417:12;:10;:12::i;:::-;8405:25;;;;;;;;;;;;;;;:34;8431:7;8405:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8373:8;:83::i;:::-;8474:4;8467:11;;8268:218;;;;:::o;11121:49::-;;;;;;;;;;;;;;;;;:::o;11052:25::-;;;;:::o;10836:29::-;;;;:::o;7293:119::-;7359:7;7386:9;:18;7396:7;7386:18;;;;;;;;;;;;;;;;7379:25;;7293:119;;;:::o;10753:19::-;;;;;;;;;;;;;:::o;11084:27::-;;;;:::o;10700:20::-;;;;;;;;;;;;;:::o;10977:25::-;;;;:::o;10910:30::-;;;;:::o;11174:48::-;;;;;;;;;;;;;;;;;:::o;6999:87::-;7038:13;7071:7;7064:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6999:87;:::o;8494:269::-;8587:4;8604:129;8613:12;:10;:12::i;:::-;8627:7;8636:96;8675:15;8636:96;;;;;;;;;;;;;;;;;:11;:25;8648:12;:10;:12::i;:::-;8636:25;;;;;;;;;;;;;;;:34;8662:7;8636:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8604:8;:129::i;:::-;8751:4;8744:11;;8494:269;;;;:::o;12303:85::-;12352:28;12361:10;12373:6;12352:8;:28::i;:::-;12303:85;:::o;7420:175::-;7506:4;7523:42;7533:12;:10;:12::i;:::-;7547:9;7558:6;7523:9;:42::i;:::-;7583:4;7576:11;;7420:175;;;;:::o;14750:106::-;14798:7;14821:5;;;;;;;;;;;:15;;;14845:4;14821:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14821:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14821:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14821:30:0;;;;;;;;;;;;;;;;14814:37;;14750:106;:::o;11736:162::-;6877:6;;;;;;;;;;;6863:20;;:10;:20;;;6855:29;;12:1:-1;9;2:12;6855:29:0;11840:11:::1;11827:10;:24;;;;11877:13;11862:12;:28;;;;11736:162:::0;;:::o;10874:29::-;;;;:::o;7603:151::-;7692:7;7719:11;:18;7731:5;7719:18;;;;;;;;;;;;;;;:27;7738:7;7719:27;;;;;;;;;;;;;;;;7712:34;;7603:151;;;;:::o;14638:106::-;14686:7;14709:5;;;;;;;;;;;:15;;;14733:4;14709:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14709:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14709:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14709:30:0;;;;;;;;;;;;;;;;14702:37;;14638:106;:::o;10727:19::-;;;;;;;;;;;;;:::o;13554:321::-;13640:15;;13620:17;:15;:17::i;:::-;:35;13616:250;;;13668:16;13687:38;13709:15;;13687:17;:15;:17::i;:::-;:21;;:38;;;;:::i;:::-;13668:57;;13730:24;13757:43;13786:13;:11;:13::i;:::-;13757:24;10824:5;13757:8;:12;;:24;;;;:::i;:::-;:28;;:43;;;;:::i;:::-;13730:70;;13824:36;13843:16;13824:14;;:18;;:36;;;;:::i;:::-;13807:14;:53;;;;13616:250;;;13554:321::o;15210:139::-;15274:7;15295:49;15324:13;:19;15338:4;15324:19;;;;;;;;;;;;;;;;15295:24;15314:4;15295:18;:24::i;:::-;:28;;:49;;;;:::i;:::-;15288:56;;15210:139;;;:::o;3373:181::-;3431:7;3451:9;3467:1;3463;:5;3451:17;;3492:1;3487;:6;;3479:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3545:1;3538:8;;;3373:181;;;;:::o;2408:106::-;2461:15;2496:10;2489:17;;2408:106;:::o;10130:346::-;10249:1;10232:19;;:5;:19;;;;10224:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10330:1;10311:21;;:7;:21;;;;10303:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10414:6;10384:11;:18;10396:5;10384:18;;;;;;;;;;;;;;;:27;10403:7;10384:27;;;;;;;;;;;;;;;:36;;;;10452:7;10436:32;;10445:5;10436:32;;;10461:6;10436:32;;;;;;;;;;;;;;;;;;10130:346;;;:::o;15573:471::-;15660:22;:20;:22::i;:::-;15687:13;15703:21;15720:3;15703:12;15713:1;15703:5;:9;;:12;;;;:::i;:::-;:16;;:21;;;;:::i;:::-;15687:37;;15729:17;15749:16;15759:5;15749;:9;;:16;;;;:::i;:::-;15729:36;;15770:18;15776:4;15782:5;15770;:18::i;:::-;15793:36;15809:4;15815:2;15819:9;15793:15;:36::i;:::-;15858:80;15890:46;15891:29;15910:9;15891:14;;:18;;:29;;;;:::i;:::-;15890:44;:46::i;:::-;15858:15;:21;15874:4;15858:21;;;;;;;;;;;;;;;;:30;;:80;;;;:::i;:::-;15834:15;:21;15850:4;15834:21;;;;;;;;;;;;;;;:104;;;;15965:74;15995:42;15996:25;16015:5;15996:14;;:18;;:25;;;;:::i;:::-;15995:40;:42::i;:::-;15965:15;:19;15981:2;15965:19;;;;;;;;;;;;;;;;:28;;:74;;;;:::i;:::-;15943:15;:19;15959:2;15943:19;;;;;;;;;;;;;;;:96;;;;15573:471;;;;;:::o;3708:192::-;3794:7;3827:1;3822;:6;;3830:12;3814:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3814:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3854:9;3870:1;3866;:5;3854:17;;3891:1;3884:8;;;3708:192;;;;;:::o;13987:639::-;14084:6;14065:15;14075:4;14065:9;:15::i;:::-;:25;;14057:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14163:6;14147:12;;:22;;14139:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14209:21;14233:48;14267:13;:11;:13::i;:::-;14233:29;14244:17;:15;:17::i;:::-;14233:6;:10;;:29;;;;:::i;:::-;:33;;:48;;;;:::i;:::-;14209:72;;14302:5;;;;;;;;;;;:14;;;14317:4;14323:13;14302:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14302:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14302:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;14302:35:0;;;;;;;;;;;;;;;;14294:44;;12:1:-1;9;2:12;14294:44:0;14349:23;:21;:23::i;:::-;14383:19;14389:4;14395:6;14383:5;:19::i;:::-;14434:17;:15;:17::i;:::-;14417:14;:34;;;;14474:17;:15;:17::i;:::-;14456:15;:35;;;;14518:10;14509:43;;;14530:6;14538:13;:11;:13::i;:::-;14509:43;;;;;;;;;;;;;;;;;;;;;;;;14568:48;14584:14;;14600:15;;14568:48;;;;;;;;;;;;;;;;;;;;;;;;13987:639;;;:::o;12638:902::-;12749:6;12724:5;;;;;;;;;;;:15;;;12740:4;12724:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12724:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12724:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12724:21:0;;;;;;;;;;;;;;;;:31;;12716:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12835:8;;12810:5;;;;;;;;;;;:15;;;12826:4;12810:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12810:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12810:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;12810:21:0;;;;;;;;;;;;;;;;:33;;12802:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12916:10;;12906:6;:20;;12898:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12983:14;13000:72;13068:3;13000:63;13060:2;13000:55;13037:17;:15;:17::i;:::-;13000:32;13011:20;:18;:20::i;:::-;13000:6;:10;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;:59;;:63;;;;:::i;:::-;:67;;:72;;;;:::i;:::-;12983:89;;13103:5;;;;;;;;;;;:18;;;13122:4;13136;13143:6;13103:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13103:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13103:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;13103:47:0;;;;;;;;;;;;;;;;13095:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13188:5;;;;;;;;;;;:18;;;13207:4;13221;13228:8;;13188:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13188:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13188:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;13188:49:0;;;;;;;;;;;;;;;;13180:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13268:22;:20;:22::i;:::-;13311:19;13317:4;13323:6;13311:5;:19::i;:::-;13358:17;:15;:17::i;:::-;13341:14;:34;;;;13398:17;:15;:17::i;:::-;13380:15;:35;;;;13440:4;13433:35;;;13446:6;13454:13;:11;:13::i;:::-;13433:35;;;;;;;;;;;;;;;;;;;;;;;;13484:48;13500:14;;13516:15;;13484:48;;;;;;;;;;;;;;;;;;;;;;;;12638:902;;;:::o;3562:136::-;3620:7;3647:43;3651:1;3654;3647:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3640:50;;3562:136;;;;:::o;3908:260::-;3966:7;4005:1;4000;:6;3996:47;;;4030:1;4023:8;;;;3996:47;4055:9;4071:1;4067;:5;4055:17;;4100:1;4095;4091;:5;;;;;;:10;4083:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4159:1;4152:8;;;3908:260;;;;;:::o;4178:132::-;4236:7;4263:39;4267:1;4270;4263:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4256:46;;4178:132;;;;:::o;15355:212::-;15421:7;15442:120;10824:5;15443:102;:86;15505:15;:23;15521:6;15505:23;;;;;;;;;;;;;;;;15443:52;:37;15462:17;15472:6;15462:9;:17::i;:::-;15443:14;;:18;;:37;;;;:::i;:::-;:50;:52::i;:::-;:61;;:86;;;;:::i;:::-;:100;:102::i;:::-;15442:108;;:120;;;;:::i;:::-;15435:127;;15355:212;;;:::o;16271:215::-;16341:27;16353:7;16362:5;16341:11;:27::i;:::-;16402:79;16437:42;16438:25;16457:5;16438:14;;:18;;:25;;;;:::i;:::-;16437:40;:42::i;:::-;16402:15;:24;16418:7;16402:24;;;;;;;;;;;;;;;;:33;;:79;;;;:::i;:::-;16375:15;:24;16391:7;16375:24;;;;;;;;;;;;;;;:106;;;;16271:215;;:::o;8771:539::-;8895:1;8877:20;;:6;:20;;;;8869:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8979:1;8958:23;;:9;:23;;;;8950:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9034:47;9055:6;9063:9;9074:6;9034:20;:47::i;:::-;9114:71;9136:6;9114:71;;;;;;;;;;;;;;;;;:9;:17;9124:6;9114:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9094:9;:17;9104:6;9094:17;;;;;;;;;;;;;;;:91;;;;9219:32;9244:6;9219:9;:20;9229:9;9219:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9196:9;:20;9206:9;9196:20;;;;;;;;;;;;;;;:55;;;;9284:9;9267:35;;9276:6;9267:35;;;9295:6;9267:35;;;;;;;;;;;;;;;;;;8771:539;;;:::o;4827:134::-;4883:6;4898:8;4916:1;4898:20;;4938:1;4933;:6;;4925:15;;12:1:-1;9;2:12;4925:15:0;4954:1;4947:8;;;4827:134;;;:::o;5914:216::-;5970:6;5989:8;6004:1;6000;:5;5989:16;;6030:1;6025;:6;;:16;;;;;6040:1;6035;:6;;6025:16;6024:38;;;;6051:1;6047;:5;:14;;;;;6060:1;6056;:5;6047:14;6024:38;6016:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6120:1;6113:8;;;5914:216;;;;:::o;5688:218::-;5744:6;5763:8;5778:1;5774;:5;5763:16;;5804:1;5799;:6;;:16;;;;;5814:1;5809;:6;;5799:16;5798:38;;;;5825:1;5821;:5;:14;;;;;5834:1;5830;:5;5821:14;5798:38;5790:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5897:1;5890:8;;;5688:218;;;;:::o;12400:226::-;12453:7;12504:1;12488:13;:11;:13::i;:::-;:17;12484:135;;;12529:13;:11;:13::i;:::-;12522:20;;;;12484:135;12581:1;12564:13;:11;:13::i;:::-;:18;12560:59;;;12606:1;12599:8;;;;12560:59;12400:226;;:::o;16050:215::-;16120:27;16132:7;16141:5;16120:11;:27::i;:::-;16181:79;16216:42;16217:25;16236:5;16217:14;;:18;;:25;;;;:::i;:::-;16216:40;:42::i;:::-;16181:15;:24;16197:7;16181:24;;;;;;;;;;;;;;;;:33;;:79;;;;:::i;:::-;16154:15;:24;16170:7;16154:24;;;;;;;;;;;;;;;:106;;;;16050:215;;:::o;4318:189::-;4404:7;4436:1;4432;:5;4439:12;4424:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4424:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4463:9;4479:1;4475;:5;;;;;;4463:17;;4498:1;4491:8;;;4318:189;;;;;:::o;6138:125::-;6194:7;6227:1;6222;:6;;6214:15;;12:1:-1;9;2:12;6214:15:0;6255:1;6240:17;;6138:125;;;:::o;9704:418::-;9807:1;9788:21;;:7;:21;;;;9780:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9860:49;9881:7;9898:1;9902:6;9860:20;:49::i;:::-;9943:68;9966:6;9943:68;;;;;;;;;;;;;;;;;:9;:18;9953:7;9943:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;9922:9;:18;9932:7;9922:18;;;;;;;;;;;;;;;:89;;;;10037:24;10054:6;10037:12;;:16;;:24;;;;:::i;:::-;10022:12;:39;;;;10103:1;10077:37;;10086:7;10077:37;;;10107:6;10077:37;;;;;;;;;;;;;;;;;;9704:418;;:::o;10484:92::-;;;;:::o;9318:378::-;9421:1;9402:21;;:7;:21;;;;9394:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9472:49;9501:1;9505:7;9514:6;9472:20;:49::i;:::-;9549:24;9566:6;9549:12;;:16;;:24;;;;:::i;:::-;9534:12;:39;;;;9605:30;9628:6;9605:9;:18;9615:7;9605:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;9584:9;:18;9594:7;9584:18;;;;;;;;;;;;;;;:51;;;;9672:7;9651:37;;9668:1;9651:37;;;9681:6;9651:37;;;;;;;;;;;;;;;;;;9318:378;;:::o

Swarm Source

ipfs://bc848d9008ecb2db913896285767f6427ef3b3d7385e3ce1ecb3c7e5501f01ce

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.