Contract 0x3CD1ced5583d8a0FD411d728F461386EF2A2cb5b

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe69953c32b18d219bdea8339357811e1ad4302bcccd246fb04c70b1edf5501b6Set Booster Farm...580741762023-03-21 18:30:212 days 1 hr ago0xc43815bdc7effeb98765ed6574bfb0f8beafef9c IN  0x3cd1ced5583d8a0fd411d728f461386ef2a2cb5b0 FTM0.001458119898
0xca1683069f1916c2338c2c45678a13066aa2309808b609def47770a47888cbf6Set Booster Farm...580741642023-03-21 18:30:082 days 1 hr ago0xc43815bdc7effeb98765ed6574bfb0f8beafef9c IN  0x3cd1ced5583d8a0fd411d728f461386ef2a2cb5b0 FTM0.001459074848
0x5b11f2f147d69dae41940dcb9fc17a2fd0870a211973db93f22904f94949600bSet Booster Farm...580741422023-03-21 18:29:442 days 1 hr ago0xc43815bdc7effeb98765ed6574bfb0f8beafef9c IN  0x3cd1ced5583d8a0fd411d728f461386ef2a2cb5b0 FTM0.001459057534
0x75fd76968d8f2aeef05941ece83753e9d4b8a95bf9cea67a5871d33f173732d0Set Booster Farm...579777762023-03-20 11:01:373 days 9 hrs ago0xc43815bdc7effeb98765ed6574bfb0f8beafef9c IN  0x3cd1ced5583d8a0fd411d728f461386ef2a2cb5b0 FTM0.001729918896
0xb23611790a726349a5f9c78a3bb650d968a4779d1e123670ac51b26036e79d96Set Booster Farm...579777712023-03-20 11:01:283 days 9 hrs ago0xc43815bdc7effeb98765ed6574bfb0f8beafef9c IN  0x3cd1ced5583d8a0fd411d728f461386ef2a2cb5b0 FTM0.004048265573
0x7e9ba8cdb926d2597cf5208b3f96a53924df17efa2895e4050f5350095fdd425Set Booster Farm...579777362023-03-20 11:00:023 days 9 hrs ago0xc43815bdc7effeb98765ed6574bfb0f8beafef9c IN  0x3cd1ced5583d8a0fd411d728f461386ef2a2cb5b0 FTM0.001729918896
0x2d2a2d528ebf6b0db65ad091bc9b37eb1e48719855b832793a5c2bd825d75869Set Boost Factor...578668212023-03-18 18:21:095 days 2 hrs ago0xc43815bdc7effeb98765ed6574bfb0f8beafef9c IN  0x3cd1ced5583d8a0fd411d728f461386ef2a2cb5b0 FTM0.008579237285
0x8f36c4c738502419669b70fc7159b98943a3284d0daa307452438c10531c77050x60e06040578662802023-03-18 18:08:105 days 2 hrs ago0xc43815bdc7effeb98765ed6574bfb0f8beafef9c IN  Create: FarmBooster0 FTM0.437797591731
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x8f36c4c738502419669b70fc7159b98943a3284d0daa307452438c10531c7705578662802023-03-18 18:08:105 days 2 hrs ago 0xc43815bdc7effeb98765ed6574bfb0f8beafef9c  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FarmBooster

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2023-03-18
*/

// SPDX-License-Identifier: MIT
// File: VaultBoost/libs/IterateMapping.sol

pragma solidity ^0.8.0;

struct ItMap {
    // pid => boost
    mapping(uint256 => uint256) data;
    // pid => index
    mapping(uint256 => uint256) indexs;
    // array of pid
    uint256[] keys;
    // never use it, just for keep compile success.
    uint256 size;
}

library IterableMapping {
    function insert(
        ItMap storage self,
        uint256 key,
        uint256 value
    ) internal {
        uint256 keyIndex = self.indexs[key];
        self.data[key] = value;
        if (keyIndex > 0) return;
        else {
            self.indexs[key] = self.keys.length + 1;
            self.keys.push(key);
            return;
        }
    }

    function remove(ItMap storage self, uint256 key) internal {
        uint256 index = self.indexs[key];
        if (index == 0) return;
        uint256 lastKey = self.keys[self.keys.length - 1];
        if (key != lastKey) {
            self.keys[index - 1] = lastKey;
            self.indexs[lastKey] = index;
        }
        delete self.data[key];
        delete self.indexs[key];
        self.keys.pop();
    }

    function contains(ItMap storage self, uint256 key)
        internal
        view
        returns (bool)
    {
        return self.indexs[key] > 0;
    }
}
// File: VaultBoost/interfaces/IMasterChef.sol


pragma solidity ^0.8.0;

interface IMasterChef {
    function deposit(
        uint256 _pid,
        uint256 _amount,
        address _referrer
    ) external;

    function withdraw(uint256 _pid, uint256 _amount) external;

    function pendingBar(uint256 _pid, address _user)
        external
        view
        returns (uint256);

    function userInfo(uint256 _pid, address _user)
        external
        view
        returns (
            uint256,
            uint256,
            uint256
        );

    function emergencyWithdraw(uint256 _pid) external;

    function lpToken(uint256 _pid) external view returns (address);

    function poolLength() external view returns (uint256 pools);

    function getBoostMultiplier(address _user, uint256 _pid)
        external
        view
        returns (uint256);

    function updateBoostMultiplier(
        address _user,
        uint256 _pid,
        uint256 _newMultiplier
    ) external;
}
// File: VaultBoost/interfaces/IBarPool.sol


pragma solidity ^0.8.0;

interface IBarPool {
    function userInfo(address _user)
        external
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            bool,
            uint256
        );

    function getPricePerFullShare() external view returns (uint256);

    function deposit(uint256 _amount, uint256 _lockDuration) external;

    function withdrawByAmount(uint256 _amount) external;

    function withdraw(uint256 _shares) external;

    function withdrawAll() external;

    function totalLockedAmount() external view returns (uint256);

    function totalShares() external view returns (uint256);

    function BOOST_WEIGHT() external view returns (uint256);

    function MAX_LOCK_DURATION() external view returns (uint256);
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: VaultBoost/FarmBooster.sol


pragma solidity ^0.8.0;






contract FarmBooster is Ownable {
    using IterableMapping for ItMap;

    /// @notice bar token.
    address public immutable BAR_TOKEN;
    /// @notice bar pool.
    address public immutable BAR_POOL;
    /// @notice Masterchef contract.
    address public immutable MASTER_CHEF;
    /// @notice boost proxy factory.
    address public BOOSTER_FACTORY;
    /// @notice NFT vault contract
    address public NFT_VAULT;

    /// @notice Maximum allowed boosted pool numbers
    uint256 public MAX_BOOST_POOL;
    /// @notice limit max boost
    uint256 public cA;
    /// @notice include 1e4
    uint256 public constant MIN_CA = 1e4;
    /// @notice include 1e5
    uint256 public constant MAX_CA = 1e5;
    /// @notice cA precision
    uint256 public constant CA_PRECISION = 1e5;
    /// @notice controls difficulties
    uint256 public cB;
    /// @notice not include 0
    uint256 public constant MIN_CB = 0;
    /// @notice include 50
    uint256 public constant MAX_CB = 50;
    /// @notice Masterchef basic boost factor, none boosted user's boost factor
    uint256 public constant BOOST_PRECISION = 100 * 1e10;
    /// @notice Masterchef Hard limit for maxmium boost factor
    uint256 public constant MAX_BOOST_PRECISION = 200 * 1e10;
    /// @notice Average boost ratio precion
    uint256 public constant BOOST_RATIO_PRECISION = 1e5;
    /// @notice bar pool BOOST_WEIGHT precision
    uint256 public constant BOOST_WEIGHT_PRECISION = 100 * 1e10; // 100%

    /// @notice The whitelist of pools allowed for farm boosting.
    mapping(uint256 => bool) public whiteList;
    /// @notice The boost proxy contract mapping(user => proxy).
    mapping(address => address) public proxyContract;
    /// @notice Info of each pool user.
    mapping(address => ItMap) public userInfo;
    /// @notice Boosted value by nft staking (user address => farm pid => nft boosted value)
    mapping(address => mapping(uint256 => uint256)) public userNftBoosts;

    event UpdateMaxBoostPool(uint256 factory);
    event UpdateBoostFactory(address factory);
    event UpdateNftVault(address booster);
    event UpdateCA(uint256 oldCA, uint256 newCA);
    event UpdateCB(uint256 oldCB, uint256 newCB);
    event Refresh(address indexed user, address proxy, uint256 pid);
    event UpdateBoostFarms(uint256 pid, bool status);
    event ActiveFarmPool(address indexed user, address proxy, uint256 pid);
    event DeactiveFarmPool(address indexed user, address proxy, uint256 pid);
    event UpdateBoostProxy(address indexed user, address proxy);
    event UpdateNftBoost(address indexed user, uint256 pid, uint256 boost);
    event UpdatePoolBoostMultiplier(
        address indexed user,
        uint256 pid,
        uint256 oldMultiplier,
        uint256 newMultiplier
    );
    event UpdateBarPool(
        address indexed user,
        uint256 lockedAmount,
        uint256 lockedDuration,
        uint256 totalLockedAmount,
        uint256 maxLockDuration
    );

    /// @param _bar BAR token contract address.
    /// @param _barPool Bar Pool contract address.
    /// @param _masterchef MasterChef contract address.
    /// @param _max Maximum allowed boosted farm quantity
    /// @param _cA Limit max boost
    /// @param _cB Controls difficulties
    constructor(
        address _bar,
        address _barPool,
        address _masterchef,
        uint256 _max,
        uint256 _cA,
        uint256 _cB
    ) {
        require(
            _max > 0 &&
                _cA >= MIN_CA &&
                _cA <= MAX_CA &&
                _cB > MIN_CB &&
                _cB <= MAX_CB,
            "constructor: Invalid parameter"
        );
        BAR_TOKEN = _bar;
        BAR_POOL = _barPool;
        MASTER_CHEF = _masterchef;
        MAX_BOOST_POOL = _max;
        cA = _cA;
        cB = _cB;
    }

    /// @notice Checks if the msg.sender is a contract or a proxy
    modifier notContract() {
        require(!_isContract(msg.sender), "contract not allowed");
        require(msg.sender == tx.origin, "proxy contract not allowed");
        _;
    }

    /// @notice Checks if the msg.sender is the FarmBooster Factory.
    modifier onlyFactory() {
        require(msg.sender == BOOSTER_FACTORY, "onlyFactory: Not factory");
        _;
    }

    /// @notice Checks if the msg.sender is the NFT booster.
    modifier onlyNftVault() {
        require(msg.sender == NFT_VAULT, "onlyNftVault: Not NftBooster");
        _;
    }

    /// @notice Checks if the msg.sender is the FarmBooster Proxy.
    modifier onlyProxy(address _user) {
        require(msg.sender == proxyContract[_user], "onlyProxy: Not proxy");
        _;
    }

    /// @notice Checks if the msg.sender is the bar pool.
    modifier onlyBarPool() {
        require(msg.sender == BAR_POOL, "onlyBarPool: Not bar pool");
        _;
    }

    /// @notice set maximum allowed boosted pool numbers.
    function setMaxBoostPool(uint256 _max) external onlyOwner {
        require(
            _max > 0,
            "setMaxBoostPool: Maximum boost pool should greater than 0"
        );
        MAX_BOOST_POOL = _max;
        emit UpdateMaxBoostPool(_max);
    }

    /// @notice set boost factory contract.
    function setBoostFactory(address _factory) external onlyOwner {
        require(_factory != address(0), "setBoostFactory: Invalid factory");
        BOOSTER_FACTORY = _factory;

        emit UpdateBoostFactory(_factory);
    }

    /// @notice set nft boost contract.
    function setNftVault(address _vault) external onlyOwner {
        require(_vault != address(0), "setNftVault: Invalid vault");
        NFT_VAULT = _vault;

        emit UpdateNftVault(_vault);
    }

    /// @notice Set user boost proxy contract, can only invoked by boost contract.
    /// @param _user boost user address.
    /// @param _proxy boost proxy contract.
    function setProxy(address _user, address _proxy) external onlyFactory {
        require(_proxy != address(0), "setProxy: Invalid proxy address");
        require(
            proxyContract[_user] == address(0),
            "setProxy: User has already set proxy"
        );

        proxyContract[_user] = _proxy;

        emit UpdateBoostProxy(_user, _proxy);
    }

    /// @notice Only allow whitelisted pids for farm boosting
    /// @param _pid pool id(Masterchef pool).
    /// @param _status farm pool allowed boosted or not
    function setBoosterFarms(uint256 _pid, bool _status) external onlyOwner {
        whiteList[_pid] = _status;
        emit UpdateBoostFarms(_pid, _status);
    }

    /// @notice limit max boost
    /// @param _cA max boost
    function setCA(uint256 _cA) external onlyOwner {
        require(_cA >= MIN_CA && _cA <= MAX_CA, "setCA: Invalid cA");
        uint256 temp = cA;
        cA = _cA;
        emit UpdateCA(temp, cA);
    }

    /// @notice controls difficulties
    /// @param _cB difficulties
    function setCB(uint256 _cB) external onlyOwner {
        require(_cB > MIN_CB && _cB <= MAX_CB, "setCB: Invalid cB");
        uint256 temp = cB;
        cB = _cB;
        emit UpdateCB(temp, cB);
    }

    /// @notice Bar pool operation(deposit/withdraw) automatically call this function.
    /// @param _user user address.
    /// @param _lockedAmount user locked amount in bar pool.
    /// @param _lockedDuration user locked duration in bar pool.
    /// @param _totalLockedAmount Total locked bar amount in bar pool.
    /// @param _maxLockDuration maximum locked duration in bar pool.
    function onBarPoolUpdate(
        address _user,
        uint256 _lockedAmount,
        uint256 _lockedDuration,
        uint256 _totalLockedAmount,
        uint256 _maxLockDuration
    ) external onlyBarPool {
        address proxy = proxyContract[_user];
        ItMap storage itmap = userInfo[proxy];
        uint256 avgDuration;
        bool flag;
        for (uint256 i = 0; i < itmap.keys.length; i++) {
            uint256 pid = itmap.keys[i];
            if (!flag) {
                avgDuration = avgLockDuration();
                flag = true;
            }
            _updateBoostMultiplier(_user, proxy, pid, avgDuration);
        }

        emit UpdateBarPool(
            _user,
            _lockedAmount,
            _lockedDuration,
            _totalLockedAmount,
            _maxLockDuration
        );
    }

    /// @notice Nft vault operation(deposit/withdraw) automatically call this function.
    /// @param _user user address.
    /// @param _pid pool id in Masterchef pool
    /// @param _boost updated boost value.
    function onNftBoostUpdate(
        address _user,
        uint256 _pid,
        uint256 _boost
    ) external onlyNftVault {
        address proxy = proxyContract[_user];
        userNftBoosts[_user][_pid] = _boost;
        _updateBoostMultiplier(_user, proxy, _pid, avgLockDuration());
        emit UpdateNftBoost(_user, _pid, _boost);
    }

    /// @notice Update user boost multiplier in Masterchef pool,only for proxy.
    /// @param _user user address.
    /// @param _pid pool id in Masterchef pool.
    function updatePoolBoostMultiplier(address _user, uint256 _pid)
        public
        onlyProxy(_user)
    {
        // if user not actived this farm, just return.
        if (!userInfo[msg.sender].contains(_pid)) return;
        _updateBoostMultiplier(_user, msg.sender, _pid, avgLockDuration());
    }

    /// @notice Active user farm pool.
    /// @param _pid pool id(Masterchef pool).
    function activate(uint256 _pid) external {
        address proxy = proxyContract[msg.sender];
        require(
            whiteList[_pid] && proxy != address(0),
            "activate: Not boosted farm pool"
        );

        ItMap storage itmap = userInfo[proxy];
        require(
            itmap.keys.length < MAX_BOOST_POOL,
            "activate: Boosted farms reach to MAX"
        );

        _updateBoostMultiplier(msg.sender, proxy, _pid, avgLockDuration());

        emit ActiveFarmPool(msg.sender, proxy, _pid);
    }

    /// @notice Deactive user farm pool.
    /// @param _pid pool id(Masterchef pool).
    function deactive(uint256 _pid) external {
        address proxy = proxyContract[msg.sender];
        ItMap storage itmap = userInfo[proxy];
        require(itmap.contains(_pid), "deactive: None boost user");

        if (itmap.data[_pid] > BOOST_PRECISION) {
            IMasterChef(MASTER_CHEF).updateBoostMultiplier(
                proxy,
                _pid,
                BOOST_PRECISION
            );
        }
        itmap.remove(_pid);

        emit DeactiveFarmPool(msg.sender, proxy, _pid);
    }

    /// @notice Anyone can refesh sepecific user boost multiplier
    /// @param _user user address.
    /// @param _pid pool id(Masterchef pool).
    function refresh(address _user, uint256 _pid) external notContract {
        address proxy = proxyContract[_user];
        ItMap storage itmap = userInfo[proxy];
        require(itmap.contains(_pid), "refresh: None boost user");

        _updateBoostMultiplier(_user, proxy, _pid, avgLockDuration());

        emit Refresh(_user, proxy, _pid);
    }

    /// @notice Whether user boosted specific farm pool.
    /// @param _user user address.
    /// @param _pid pool id(Masterchef pool).
    function isBoostedPool(address _user, uint256 _pid)
        external
        view
        returns (bool)
    {
        return userInfo[proxyContract[_user]].contains(_pid);
    }

    /// @notice Actived farm pool list.
    /// @param _user user address.
    function activedPools(address _user)
        external
        view
        returns (uint256[] memory pools)
    {
        ItMap storage itmap = userInfo[proxyContract[_user]];
        if (itmap.keys.length == 0) return pools;

        pools = new uint256[](itmap.keys.length);
        // solidity for-loop not support multiple variables initializae by ',' separate.
        uint256 i;
        for (uint256 index = 0; index < itmap.keys.length; index++) {
            uint256 pid = itmap.keys[index];
            pools[i] = pid;
            i++;
        }
    }

    /// @notice Anyone can call this function, if you find some guys effectived multiplier is not fair
    /// for other users, just call 'refresh' function.
    /// @param _user user address.
    /// @param _pid pool id(Masterchef pool).
    /// @dev If return value not in range [BOOST_PRECISION, MAX_BOOST_PRECISION]
    /// the actual effectived multiplier will be the close to side boundry value.
    function getUserMultiplier(address _user, uint256 _pid)
        external
        view
        returns (uint256)
    {
        return
            userNftBoosts[_user][_pid] +
            _vaultBoostCalculate(
                _user,
                proxyContract[_user],
                _pid,
                avgLockDuration()
            );
    }

    /// @notice bar pool average locked duration calculator.
    function avgLockDuration() public view returns (uint256) {
        uint256 totalStakedAmount = IERC20(BAR_TOKEN).balanceOf(BAR_POOL);

        uint256 totalLockedAmount = IBarPool(BAR_POOL).totalLockedAmount();

        uint256 pricePerFullShare = IBarPool(BAR_POOL)
            .getPricePerFullShare();

        uint256 flexibleShares = ((totalStakedAmount - totalLockedAmount) *
            1e18) / pricePerFullShare;
        if (flexibleShares == 0) return 0;

        uint256 originalShares = (totalLockedAmount * 1e18) / pricePerFullShare;
        if (originalShares == 0) return 0;

        uint256 boostedRatio = ((IBarPool(BAR_POOL).totalShares() -
            flexibleShares) * BOOST_RATIO_PRECISION) / originalShares;
        if (boostedRatio <= BOOST_RATIO_PRECISION) return 0;

        uint256 boostWeight = IBarPool(BAR_POOL).BOOST_WEIGHT();
        uint256 maxLockDuration = IBarPool(BAR_POOL).MAX_LOCK_DURATION() *
            BOOST_RATIO_PRECISION;

        uint256 duration = ((boostedRatio - BOOST_RATIO_PRECISION) *
            365 *
            BOOST_WEIGHT_PRECISION) / boostWeight;
        return duration <= maxLockDuration ? duration : maxLockDuration;
    }

    /// @param _user user address.
    /// @param _proxy proxy address corresponding to the user.
    /// @param _pid pool id.
    /// @param _duration bar pool average locked duration.
    function _updateBoostMultiplier(
        address _user,
        address _proxy,
        uint256 _pid,
        uint256 _duration
    ) internal {
        ItMap storage itmap = userInfo[_proxy];

        // Used to be boost farm pool and current is not, remove from mapping
        if (!whiteList[_pid]) {
            if (itmap.data[_pid] > BOOST_PRECISION) {
                // reset to BOOST_PRECISION
                IMasterChef(MASTER_CHEF).updateBoostMultiplier(
                    _proxy,
                    _pid,
                    BOOST_PRECISION
                );
            }
            itmap.remove(_pid);
            return;
        }

        uint256 prevMultiplier = IMasterChef(MASTER_CHEF).getBoostMultiplier(
            _proxy,
            _pid
        );
        uint256 multiplier = userNftBoosts[_user][_pid] +
            _vaultBoostCalculate(_user, _proxy, _pid, _duration);

        if (multiplier < BOOST_PRECISION) {
            multiplier = BOOST_PRECISION;
        } else if (multiplier > MAX_BOOST_PRECISION) {
            multiplier = MAX_BOOST_PRECISION;
        }

        // Update multiplier to masterchef
        if (multiplier != prevMultiplier) {
            IMasterChef(MASTER_CHEF).updateBoostMultiplier(
                _proxy,
                _pid,
                multiplier
            );
        }
        itmap.insert(_pid, multiplier);

        emit UpdatePoolBoostMultiplier(_user, _pid, prevMultiplier, multiplier);
    }

    /// @param _user user address.
    /// @param _proxy proxy address corresponding to the user.
    /// @param _pid pool id(Masterchef pool).
    /// @param _duration bar pool average locked duration.
    function _vaultBoostCalculate(
        address _user,
        address _proxy,
        uint256 _pid,
        uint256 _duration
    ) internal view returns (uint256) {
        if (_duration == 0) return BOOST_PRECISION;

        (uint256 lpBalance, , ) = IMasterChef(MASTER_CHEF).userInfo(
            _pid,
            _proxy
        );
        uint256 dB = (cA * lpBalance) / CA_PRECISION;
        // dB == 0 means lpBalance close to 0
        if (lpBalance == 0 || dB == 0) return BOOST_PRECISION;

        (
            ,
            ,
            ,
            ,
            uint256 lockStartTime,
            uint256 lockEndTime,
            ,
            ,
            uint256 userLockedAmount
        ) = IBarPool(BAR_POOL).userInfo(_user);
        if (userLockedAmount == 0 || block.timestamp >= lockEndTime)
            return BOOST_PRECISION;

        // userLockedAmount > 0 means totalLockedAmount > 0
        uint256 totalLockedAmount = IBarPool(BAR_POOL).totalLockedAmount();

        IERC20 lp = IERC20(IMasterChef(MASTER_CHEF).lpToken(_pid));
        uint256 userLockedDuration = (lockEndTime - lockStartTime) /
            (3600 * 24); // days

        uint256 aB = (((lp.balanceOf(MASTER_CHEF) *
            userLockedAmount *
            userLockedDuration) * BOOST_RATIO_PRECISION) / cB) /
            (totalLockedAmount * _duration);

        // should '*' BOOST_PRECISION
        return
            ((lpBalance < (dB + aB) ? lpBalance : (dB + aB)) *
                BOOST_PRECISION) / dB;
    }

    /// @notice Checks if address is a contract
    /// @dev It prevents contract from being targetted
    function _isContract(address addr) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_bar","type":"address"},{"internalType":"address","name":"_barPool","type":"address"},{"internalType":"address","name":"_masterchef","type":"address"},{"internalType":"uint256","name":"_max","type":"uint256"},{"internalType":"uint256","name":"_cA","type":"uint256"},{"internalType":"uint256","name":"_cB","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"proxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"}],"name":"ActiveFarmPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"proxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"}],"name":"DeactiveFarmPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"proxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"}],"name":"Refresh","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"lockedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockedDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalLockedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxLockDuration","type":"uint256"}],"name":"UpdateBarPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"factory","type":"address"}],"name":"UpdateBoostFactory","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateBoostFarms","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"proxy","type":"address"}],"name":"UpdateBoostProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldCA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newCA","type":"uint256"}],"name":"UpdateCA","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldCB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newCB","type":"uint256"}],"name":"UpdateCB","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"factory","type":"uint256"}],"name":"UpdateMaxBoostPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boost","type":"uint256"}],"name":"UpdateNftBoost","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"booster","type":"address"}],"name":"UpdateNftVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMultiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"UpdatePoolBoostMultiplier","type":"event"},{"inputs":[],"name":"BAR_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BAR_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOOSTER_FACTORY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOOST_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOOST_RATIO_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOOST_WEIGHT_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CA_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MASTER_CHEF","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BOOST_POOL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BOOST_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_CA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_CB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_CA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_CB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_VAULT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"activedPools","outputs":[{"internalType":"uint256[]","name":"pools","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"avgLockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"deactive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getUserMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"isBoostedPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_lockedAmount","type":"uint256"},{"internalType":"uint256","name":"_lockedDuration","type":"uint256"},{"internalType":"uint256","name":"_totalLockedAmount","type":"uint256"},{"internalType":"uint256","name":"_maxLockDuration","type":"uint256"}],"name":"onBarPoolUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_boost","type":"uint256"}],"name":"onNftBoostUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proxyContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"refresh","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_factory","type":"address"}],"name":"setBoostFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setBoosterFarms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cA","type":"uint256"}],"name":"setCA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cB","type":"uint256"}],"name":"setCB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxBoostPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setNftVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_proxy","type":"address"}],"name":"setProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePoolBoostMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"size","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userNftBoosts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60e06040523480156200001157600080fd5b506040516200283938038062002839833981016040819052620000349162000175565b6200003f3362000108565b6000831180156200005257506127108210155b8015620000625750620186a08211155b80156200006f5750600081115b80156200007d575060328111155b620000ce5760405162461bcd60e51b815260206004820152601e60248201527f636f6e7374727563746f723a20496e76616c696420706172616d657465720000604482015260640160405180910390fd5b6001600160601b0319606096871b811660805294861b851660a0529290941b90921660c052600391909155600491909155600555620001da565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200017057600080fd5b919050565b60008060008060008060c087890312156200018e578182fd5b620001998762000158565b9550620001a96020880162000158565b9450620001b96040880162000158565b9350606087015192506080870151915060a087015190509295509295509295565b60805160601c60a05160601c60c05160601c6125af6200028a6000396000818161055d0152818161071501528181611aea01528181611b7f01528181611c9f01528181611de90152818161203401526120f20152600081816103290152818161095c01528181610a0901528181610a9e01528181610ba601528181610c7001528181610d09015281816112d701528181611ece0152611f8101526000818161041d015261098901526125af6000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c8063715018a6116101465780639c1ebe63116100c3578063b7d6ee5a11610087578063b7d6ee5a14610529578063c61a66e01461053c578063cc6db2da1461050a578063daa81f3014610545578063edd8b17014610558578063f2fde38b1461057f57600080fd5b80639c1ebe63146104e65780639cc1d7be146104ef578063a9d4630c146104f7578063ae69d1981461050a578063b260c42a1461051657600080fd5b8063810577141161010a578063810577141461048e5780638a8a6ee0146104975780638abe3003146103075780638da5cb5b146104aa57806396001fb2146104bb57600080fd5b8063715018a61461041057806375ce5577146104185780637644d70c1461043f5780637793617c14610452578063803f18dc1461046557600080fd5b80633a1d1e8c116101d45780635c5aaa49116101985780635c5aaa49146103075780635d1554d9146103d457806366406944146103e757806369b02128146103f05780636cbb37dd146103fd57600080fd5b80633a1d1e8c1461036357806349b61ce0146103765780634ffcbb3914610396578063521429b31461039e5780635c475d42146103b157600080fd5b806325f148731161021b57806325f14873146102ec5780632707a811146102ff5780632d015aff146103075780632d80451b1461031157806337a987761461032457600080fd5b8063040fb1f3146102585780630dcebf651461026d57806317adb6ee146102805780631959a002146102935780631a13b41e146102c9575b600080fd5b61026b61026636600461226d565b610592565b005b61026b61027b36600461237f565b61064a565b61026b61028e3660046122dd565b6107c6565b6102b66102a136600461226d565b60086020526000908152604090206003015481565b6040519081526020015b60405180910390f35b6102dc6102d73660046122dd565b610867565b60405190151581526020016102c0565b61026b6102fa36600461237f565b6108a6565b6102b6610945565b6102b6620186a081565b61026b61031f366004612308565b610dfa565b61034b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c0565b61026b61037136600461226d565b610ede565b61038961038436600461226d565b610f8a565b6040516102c09190612473565b6102b6603281565b60025461034b906001600160a01b031681565b6102dc6103bf36600461237f565b60066020526000908152604090205460ff1681565b60015461034b906001600160a01b031681565b6102b660035481565b6102b66501d1a94a200081565b61026b61040b36600461237f565b6110b2565b61026b61114d565b61034b7f000000000000000000000000000000000000000000000000000000000000000081565b61026b61044d3660046122dd565b611161565b61026b61046036600461233c565b6112cc565b61034b61047336600461226d565b6007602052600090815260409020546001600160a01b031681565b6102b660055481565b61026b6104a53660046123af565b611443565b6000546001600160a01b031661034b565b6102b66104c93660046122dd565b600960209081526000928352604080842090915290825290205481565b6102b660045481565b6102b6600081565b61026b6105053660046122a5565b61149d565b6102b664e8d4a5100081565b61026b61052436600461237f565b611628565b6102b66105373660046122dd565b61177e565b6102b661271081565b61026b61055336600461237f565b6117dd565b61034b7f000000000000000000000000000000000000000000000000000000000000000081565b61026b61058d36600461226d565b611890565b61059a611909565b6001600160a01b0381166105f55760405162461bcd60e51b815260206004820152601a60248201527f7365744e66745661756c743a20496e76616c6964207661756c7400000000000060448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f26320a257bb9f478d4868cad7c93813c9e8ec31144cef458b2ab3cfe573caa96906020015b60405180910390a150565b336000908152600760209081526040808320546001600160a01b031680845260088352818420858552600181019093529220546106c95760405162461bcd60e51b815260206004820152601960248201527f64656163746976653a204e6f6e6520626f6f737420757365720000000000000060448201526064016105ec565b60008381526020829052604090205464e8d4a5100010156107725760405163041a84c960e01b81526001600160a01b0383811660048301526024820185905264e8d4a5100060448301527f0000000000000000000000000000000000000000000000000000000000000000169063041a84c990606401600060405180830381600087803b15801561075957600080fd5b505af115801561076d573d6000803e3d6000fd5b505050505b61077c8184611963565b604080516001600160a01b03841681526020810185905233917f95012b3ffd890212456f6da3513cee9eba8326003c39fcaaa1d2b5e0babe6eba91015b60405180910390a2505050565b6001600160a01b0382811660009081526007602052604090205483911633146108285760405162461bcd60e51b81526020600482015260146024820152736f6e6c7950726f78793a204e6f742070726f787960601b60448201526064016105ec565b33600090815260086020908152604080832085845260010190915290205461084f57505050565b61086283338461085d610945565b611a70565b505050565b6001600160a01b0382811660009081526007602090815260408083205490931682526008815282822084835260010190529081205415155b9392505050565b6108ae611909565b6000811180156108bf575060328111155b6108ff5760405162461bcd60e51b815260206004820152601160248201527039b2ba21a11d1024b73b30b634b21031a160791b60448201526064016105ec565b600580549082905560408051828152602081018490527fff6a4b972407d470846bd3a5979c60d68807653244cc8d096c4174a76486e71c91015b60405180910390a15050565b6040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b1580156109cb57600080fd5b505afa1580156109df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a039190612397565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166305a9f2746040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6057600080fd5b505afa158015610a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a989190612397565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166377c7b8fc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610af557600080fd5b505afa158015610b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2d9190612397565b9050600081610b3c848661250e565b610b4e90670de0b6b3a76400006124ef565b610b5891906124cf565b905080610b6a57600094505050505090565b600082610b7f85670de0b6b3a76400006124ef565b610b8991906124cf565b905080610b9c5760009550505050505090565b600081620186a0847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633a98ef396040518163ffffffff1660e01b815260040160206040518083038186803b158015610bfd57600080fd5b505afa158015610c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c359190612397565b610c3f919061250e565b610c4991906124ef565b610c5391906124cf565b9050620186a08111610c6c576000965050505050505090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc75f4b86040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190612397565b90506000620186a07f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634f1bfc9e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6057600080fd5b505afa158015610d74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d989190612397565b610da291906124ef565b905060008264e8d4a51000610dba620186a08761250e565b610dc69061016d6124ef565b610dd091906124ef565b610dda91906124cf565b905081811115610dea5781610dec565b805b995050505050505050505090565b6002546001600160a01b03163314610e545760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c794e66745661756c743a204e6f74204e6674426f6f737465720000000060448201526064016105ec565b6001600160a01b038084166000908152600760209081526040808320546009835281842087855290925290912083905516610e9384828561085d610945565b60408051848152602081018490526001600160a01b038616917f45eea05a2437e890466ee52ce2400c524564d3bc5a051e6e7371c1d205db0c4791015b60405180910390a250505050565b610ee6611909565b6001600160a01b038116610f3c5760405162461bcd60e51b815260206004820181905260248201527f736574426f6f7374466163746f72793a20496e76616c696420666163746f727960448201526064016105ec565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fb9ce93c498aebed04d07c95e5f16a67e9b872b65650386f6f5df4982166a00339060200161063f565b6001600160a01b0380821660009081526007602090815260408083205490931682526008905220600281015460609190610fc45750919050565b600281015467ffffffffffffffff811115610fef57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611018578160200160208202803683370190505b5091506000805b60028301548110156110aa57600083600201828154811061105057634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508085848151811061107e57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528261109381612525565b9350505080806110a290612525565b91505061101f565b505050919050565b6110ba611909565b61271081101580156110cf5750620186a08111155b61110f5760405162461bcd60e51b815260206004820152601160248201527073657443413a20496e76616c696420634160781b60448201526064016105ec565b600480549082905560408051828152602081018490527f948053d58d4dfed61c0843c01f010e1a4446c65f03d475567102cc64dfe0ecd49101610939565b611155611909565b61115f6000611d5d565b565b333b156111a75760405162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b60448201526064016105ec565b3332146111f65760405162461bcd60e51b815260206004820152601a60248201527f70726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016105ec565b6001600160a01b038281166000908152600760209081526040808320549093168083526008825283832085845260018101909252929091205461127b5760405162461bcd60e51b815260206004820152601860248201527f726566726573683a204e6f6e6520626f6f73742075736572000000000000000060448201526064016105ec565b61128984838561085d610945565b604080516001600160a01b038481168252602082018690528616917f6388bc5bf9da0fef8880f20ca5355e721c80037d6449b03917900238ffcca24f9101610ed0565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113445760405162461bcd60e51b815260206004820152601960248201527f6f6e6c79426172506f6f6c3a204e6f742062617220706f6f6c0000000000000060448201526064016105ec565b6001600160a01b0380861660009081526007602090815260408083205490931680835260089091529181209080805b60028401548110156113e45760008460020182815481106113a457634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050826113c5576113be610945565b9350600192505b6113d18b878387611a70565b50806113dc81612525565b915050611373565b506040805189815260208101899052908101879052606081018690526001600160a01b038a16907f512d1eab8539cb8fab88c8aae0e4b44239ba7e6006d8dbdb028d94e94bc808909060800160405180910390a2505050505050505050565b61144b611909565b600082815260066020908152604091829020805460ff19168415159081179091558251858152918201527fbeef892af000af61e107ef5e9c764acbccd54157fd6c219d241750fb3eca31029101610939565b6001546001600160a01b031633146114f75760405162461bcd60e51b815260206004820152601860248201527f6f6e6c79466163746f72793a204e6f7420666163746f7279000000000000000060448201526064016105ec565b6001600160a01b03811661154d5760405162461bcd60e51b815260206004820152601f60248201527f73657450726f78793a20496e76616c69642070726f787920616464726573730060448201526064016105ec565b6001600160a01b0382811660009081526007602052604090205416156115c15760405162461bcd60e51b8152602060048201526024808201527f73657450726f78793a20557365722068617320616c7265616479207365742070604482015263726f787960e01b60648201526084016105ec565b6001600160a01b0382811660008181526007602090815260409182902080546001600160a01b0319169486169485179055905192835290917fdebc5d6c541ae1ed122237a2c4adfe2d109e37c5848c54fb74477c7a6d95fcf3910160405180910390a25050565b336000908152600760209081526040808320548484526006909252909120546001600160a01b039091169060ff16801561166a57506001600160a01b03811615155b6116b65760405162461bcd60e51b815260206004820152601f60248201527f61637469766174653a204e6f7420626f6f73746564206661726d20706f6f6c0060448201526064016105ec565b6001600160a01b038116600090815260086020526040902060035460028201541061172f5760405162461bcd60e51b8152602060048201526024808201527f61637469766174653a20426f6f73746564206661726d7320726561636820746f6044820152630409a82b60e31b60648201526084016105ec565b61173d33838561085d610945565b604080516001600160a01b03841681526020810185905233917f9fde6fe213b149e24765c2e8365b56107f5ccaa4cf5bf0ab8e8a51c111c4f68c91016107b9565b6001600160a01b0380831660009081526007602052604081205490916117af91859116846117aa610945565b611dad565b6001600160a01b038416600090815260096020908152604080832086845290915290205461089f91906124b7565b6117e5611909565b6000811161185b5760405162461bcd60e51b815260206004820152603960248201527f7365744d6178426f6f7374506f6f6c3a204d6178696d756d20626f6f7374207060448201527f6f6f6c2073686f756c642067726561746572207468616e20300000000000000060648201526084016105ec565b60038190556040518181527f6c83390e748eac13e3531723e6b8cd596128bcf5e7828be22cb2e7f979b5b7df9060200161063f565b611898611909565b6001600160a01b0381166118fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ec565b61190681611d5d565b50565b6000546001600160a01b0316331461115f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105ec565b60008181526001830160205260409020548061197e57505050565b600283018054600091906119949060019061250e565b815481106119b257634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808314611a175780600285016119d660018561250e565b815481106119f457634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260018601909152604090208290555b6000838152602085815260408083208390556001870190915281205560028401805480611a5457634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6001600160a01b038316600090815260086020908152604080832085845260069092529091205460ff16611b575760008381526020829052604090205464e8d4a510001015611b475760405163041a84c960e01b81526001600160a01b0385811660048301526024820185905264e8d4a5100060448301527f0000000000000000000000000000000000000000000000000000000000000000169063041a84c990606401600060405180830381600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b505050505b611b518184611963565b50611d57565b604051626630dd60e31b81526001600160a01b038581166004830152602482018590526000917f00000000000000000000000000000000000000000000000000000000000000009091169063033186e89060440160206040518083038186803b158015611bc357600080fd5b505afa158015611bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfb9190612397565b90506000611c0b87878787611dad565b6001600160a01b0388166000908152600960209081526040808320898452909152902054611c3991906124b7565b905064e8d4a51000811015611c54575064e8d4a51000611c6b565b6501d1a94a2000811115611c6b57506501d1a94a20005b818114611cfc5760405163041a84c960e01b81526001600160a01b03878116600483015260248201879052604482018390527f0000000000000000000000000000000000000000000000000000000000000000169063041a84c990606401600060405180830381600087803b158015611ce357600080fd5b505af1158015611cf7573d6000803e3d6000fd5b505050505b611d07838683612202565b60408051868152602081018490529081018290526001600160a01b038816907fe50f0d49657b1a6caa28100eec500f3aab7c4cc39633ebf432f02c2dec2e0e019060600160405180910390a25050505b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081611dc0575064e8d4a510006121fa565b6040516393f1a40b60e01b8152600481018490526001600160a01b0385811660248301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906393f1a40b9060440160606040518083038186803b158015611e2d57600080fd5b505afa158015611e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6591906123d3565b505090506000620186a082600454611e7d91906124ef565b611e8791906124cf565b9050811580611e94575080155b15611ea85764e8d4a51000925050506121fa565b604051630cacd00160e11b81526001600160a01b038881166004830152600091829182917f000000000000000000000000000000000000000000000000000000000000000090911690631959a002906024016101206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4b9190612400565b9850505096509650505050508060001480611f665750814210155b15611f7d5764e8d4a51000955050505050506121fa565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166305a9f2746040518163ffffffff1660e01b815260040160206040518083038186803b158015611fd857600080fd5b505afa158015611fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120109190612397565b6040516378ed5d1f60e01b8152600481018b90529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906378ed5d1f9060240160206040518083038186803b15801561207657600080fd5b505afa15801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae9190612289565b90506000620151806120c0878761250e565b6120ca91906124cf565b905060006120d88b856124ef565b6005546040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152620186a09186918a91908916906370a082319060240160206040518083038186803b15801561214657600080fd5b505afa15801561215a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217e9190612397565b61218891906124ef565b61219291906124ef565b61219c91906124ef565b6121a691906124cf565b6121b091906124cf565b90508764e8d4a510006121c383836124b7565b8b106121d8576121d3838b6124b7565b6121da565b8a5b6121e491906124ef565b6121ee91906124cf565b99505050505050505050505b949350505050565b600082815260018401602090815260408083205491869052909120829055801561222c5750505050565b600284015461223c9060016124b7565b6000848152600180870160209081526040832093909355600290960180549687018155815220909301919091555050565b60006020828403121561227e578081fd5b813561089f81612556565b60006020828403121561229a578081fd5b815161089f81612556565b600080604083850312156122b7578081fd5b82356122c281612556565b915060208301356122d281612556565b809150509250929050565b600080604083850312156122ef578182fd5b82356122fa81612556565b946020939093013593505050565b60008060006060848603121561231c578081fd5b833561232781612556565b95602085013595506040909401359392505050565b600080600080600060a08688031215612353578081fd5b853561235e81612556565b97602087013597506040870135966060810135965060800135945092505050565b600060208284031215612390578081fd5b5035919050565b6000602082840312156123a8578081fd5b5051919050565b600080604083850312156123c1578182fd5b8235915060208301356122d28161256b565b6000806000606084860312156123e7578283fd5b8351925060208401519150604084015190509250925092565b60008060008060008060008060006101208a8c03121561241e578384fd5b8951985060208a0151975060408a0151965060608a0151955060808a0151945060a08a0151935060c08a0151925060e08a015161245a8161256b565b809250506101008a015190509295985092959850929598565b6020808252825182820181905260009190848201906040850190845b818110156124ab5783518352928401929184019160010161248f565b50909695505050505050565b600082198211156124ca576124ca612540565b500190565b6000826124ea57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561250957612509612540565b500290565b60008282101561252057612520612540565b500390565b600060001982141561253957612539612540565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461190657600080fd5b801515811461190657600080fdfea26469706673582212204fb177b77f867d34fe713e675896ca2da3d472cb1a9dfb7bc367c057ed96429664736f6c634300080400330000000000000000000000006adea0efc8df952ac683680d860a1f4db69a942500000000000000000000000044d73993f4d38d7cfe856eb172fbd0d6f3c56d3c00000000000000000000000053948b7d375739e746a17c35d5883d51c649603c00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000007530000000000000000000000000000000000000000000000000000000000000000a

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

0000000000000000000000006adea0efc8df952ac683680d860a1f4db69a942500000000000000000000000044d73993f4d38d7cfe856eb172fbd0d6f3c56d3c00000000000000000000000053948b7d375739e746a17c35d5883d51c649603c00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000007530000000000000000000000000000000000000000000000000000000000000000a

-----Decoded View---------------
Arg [0] : _bar (address): 0x6adea0efc8df952ac683680d860a1f4db69a9425
Arg [1] : _barPool (address): 0x44d73993f4d38d7cfe856eb172fbd0d6f3c56d3c
Arg [2] : _masterchef (address): 0x53948b7d375739e746a17c35d5883d51c649603c
Arg [3] : _max (uint256): 5
Arg [4] : _cA (uint256): 30000
Arg [5] : _cB (uint256): 10

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000006adea0efc8df952ac683680d860a1f4db69a9425
Arg [1] : 00000000000000000000000044d73993f4d38d7cfe856eb172fbd0d6f3c56d3c
Arg [2] : 00000000000000000000000053948b7d375739e746a17c35d5883d51c649603c
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 0000000000000000000000000000000000000000000000000000000000007530
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a


Deployed ByteCode Sourcemap

9915:18204:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15514:203;;;;;;:::i;:::-;;:::i;:::-;;20230:527;;;;;;:::i;:::-;;:::i;19179:311::-;;;;;;:::i;:::-;;:::i;11702:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12773:25:1;;;12761:2;12746:18;11702:41:0;;;;;;;;21421:184;;;;;;:::i;:::-;;:::i;:::-;;;5644:14:1;;5637:22;5619:41;;5607:2;5592:18;21421:184:0;5574:92:1;16967:206:0;;;;;;:::i;:::-;;:::i;23110:1209::-;;;:::i;11242:51::-;;11290:3;11242:51;;18654:351;;;;;;:::i;:::-;;:::i;10090:33::-;;;;;;;;-1:-1:-1;;;;;4166:32:1;;;4148:51;;4136:2;4121:18;10090:33:0;4103:102:1;15234:231:0;;;;;;:::i;:::-;;:::i;21690:576::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10888:35::-;;10921:2;10888:35;;10322:24;;;;;-1:-1:-1;;;;;10322:24:0;;;11492:41;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10249:30;;;;;-1:-1:-1;;;;;10249:30:0;;;10409:29;;;;;;11134:56;;11180:10;11134:56;;16680:207;;;;;;:::i;:::-;;:::i;9020:103::-;;;:::i;10022:34::-;;;;;20915:357;;;;;;:::i;:::-;;:::i;17575:854::-;;;;;;:::i;:::-;;:::i;11606:48::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;11606:48:0;;;10764:17;;;;;;16446:163;;;;;;:::i;:::-;;:::i;8372:87::-;8418:7;8445:6;-1:-1:-1;;;;;8445:6:0;8372:87;;11844:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10478:17;;;;;;10819:34;;10852:1;10819:34;;15896:375;;;;;;:::i;:::-;;:::i;11349:59::-;;11398:10;11349:59;;19585:548;;;;;;:::i;:::-;;:::i;22682:358::-;;;;;;:::i;:::-;;:::i;10531:36::-;;10564:3;10531:36;;14917:264;;;;;;:::i;:::-;;:::i;10168:36::-;;;;;9278:201;;;;;;:::i;:::-;;:::i;15514:203::-;8258:13;:11;:13::i;:::-;-1:-1:-1;;;;;15589:20:0;::::1;15581:59;;;::::0;-1:-1:-1;;;15581:59:0;;8927:2:1;15581:59:0::1;::::0;::::1;8909:21:1::0;8966:2;8946:18;;;8939:30;9005:28;8985:18;;;8978:56;9051:18;;15581:59:0::1;;;;;;;;;15651:9;:18:::0;;-1:-1:-1;;;;;;15651:18:0::1;-1:-1:-1::0;;;;;15651:18:0;::::1;::::0;;::::1;::::0;;;15687:22:::1;::::0;4148:51:1;;;15687:22:0::1;::::0;4136:2:1;4121:18;15687:22:0::1;;;;;;;;15514:203:::0;:::o;20230:527::-;20312:10;20282:13;20298:25;;;:13;:25;;;;;;;;;-1:-1:-1;;;;;20298:25:0;20356:15;;;:8;:15;;;;;1330:16;;;:11;;;:16;;;;;;20382:58;;;;-1:-1:-1;;;20382:58:0;;9991:2:1;20382:58:0;;;9973:21:1;10030:2;10010:18;;;10003:30;10069:27;10049:18;;;10042:55;10114:18;;20382:58:0;9963:175:1;20382:58:0;20457:10;:16;;;;;;;;;;;11053:10;-1:-1:-1;20453:209:0;;;20508:142;;-1:-1:-1;;;20508:142:0;;-1:-1:-1;;;;;4709:32:1;;;20508:142:0;;;4691:51:1;4758:18;;;4751:34;;;11053:10:0;4801:18:1;;;4794:34;20520:11:0;20508:46;;;;4664:18:1;;20508:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20453:209;20672:18;:5;20685:4;20672:12;:18::i;:::-;20708:41;;;-1:-1:-1;;;;;4402:32:1;;4384:51;;4466:2;4451:18;;4444:34;;;20725:10:0;;20708:41;;4357:18:1;20708:41:0;;;;;;;;20230:527;;;:::o;19179:311::-;-1:-1:-1;;;;;14604:20:0;;;;;;;:13;:20;;;;;;;;;14590:10;:34;14582:67;;;;-1:-1:-1;;;14582:67:0;;9282:2:1;14582:67:0;;;9264:21:1;9321:2;9301:18;;;9294:30;-1:-1:-1;;;9340:18:1;;;9333:50;9400:18;;14582:67:0;9254:170:1;14582:67:0;19371:10:::1;19362:20;::::0;;;:8:::1;:20;::::0;;;;;;;1330:16;;;:11;;:16;;;;;;19357:49:::1;;19179:311:::0;;;:::o;19357:49::-:1;19416:66;19439:5;19446:10;19458:4;19464:17;:15;:17::i;:::-;19416:22;:66::i;:::-;19179:311:::0;;;:::o;21421:184::-;-1:-1:-1;;;;;21561:20:0;;;21523:4;21561:20;;;:13;:20;;;;;;;;;;;;21552:30;;:8;:30;;;;;1330:16;;;:11;;:16;;;;;;:20;;21552:45;21545:52;21421:184;-1:-1:-1;;;21421:184:0:o;16967:206::-;8258:13;:11;:13::i;:::-;10852:1:::1;17033:3;:12;:29;;;;;10921:2;17049:3;:13;;17033:29;17025:59;;;::::0;-1:-1:-1;;;17025:59:0;;10698:2:1;17025:59:0::1;::::0;::::1;10680:21:1::0;10737:2;10717:18;;;10710:30;-1:-1:-1;;;10756:18:1;;;10749:47;10813:18;;17025:59:0::1;10670:167:1::0;17025:59:0::1;17110:2;::::0;;17123:8;;;;17147:18:::1;::::0;;13525:25:1;;;13581:2;13566:18;;13559:34;;;17147:18:0::1;::::0;13498::1;17147::0::1;;;;;;;;8282:1;16967:206:::0;:::o;23110:1209::-;23206:37;;-1:-1:-1;;;23206:37:0;;-1:-1:-1;;;;;23234:8:0;4166:32:1;;23206:37:0;;;4148:51:1;-1:-1:-1;;;;23213:9:0;23206:27;;;;4121:18:1;;23206:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23178:65;;23256:25;23293:8;-1:-1:-1;;;;;23284:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23256:66;;23335:25;23372:8;-1:-1:-1;;;;;23363:53:0;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23335:83;-1:-1:-1;23431:22:0;23335:83;23458:37;23478:17;23458;:37;:::i;:::-;23457:59;;23512:4;23457:59;:::i;:::-;23456:81;;;;:::i;:::-;23431:106;-1:-1:-1;23552:19:0;23548:33;;23580:1;23573:8;;;;;;23110:1209;:::o;23548:33::-;23594:22;23648:17;23620:24;:17;23640:4;23620:24;:::i;:::-;23619:46;;;;:::i;:::-;23594:71;-1:-1:-1;23680:19:0;23676:33;;23708:1;23701:8;;;;;;;23110:1209;:::o;23676:33::-;23722:20;23838:14;11290:3;23795:14;23756:8;-1:-1:-1;;;;;23747:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;;:::i;:::-;23746:88;;;;:::i;:::-;23745:107;;;;:::i;:::-;23722:130;;11290:3;23867:12;:37;23863:51;;23913:1;23906:8;;;;;;;;23110:1209;:::o;23863:51::-;23927:19;23958:8;-1:-1:-1;;;;;23949:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23927:55;;23993:23;11290:3;24028:8;-1:-1:-1;;;;;24019:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;;;:::i;:::-;23993:101;-1:-1:-1;24107:16:0;24226:11;11398:10;24128:36;11290:3;24128:12;:36;:::i;:::-;24127:57;;24181:3;24127:57;:::i;:::-;:95;;;;:::i;:::-;24126:111;;;;:::i;:::-;24107:130;;24267:15;24255:8;:27;;:56;;24296:15;24255:56;;;24285:8;24255:56;24248:63;;;;;;;;;;;23110:1209;:::o;18654:351::-;14399:9;;-1:-1:-1;;;;;14399:9:0;14385:10;:23;14377:64;;;;-1:-1:-1;;;14377:64:0;;6228:2:1;14377:64:0;;;6210:21:1;6267:2;6247:18;;;6240:30;6306;6286:18;;;6279:58;6354:18;;14377:64:0;6200:178:1;14377:64:0;-1:-1:-1;;;;;18808:20:0;;::::1;18792:13;18808:20:::0;;;:13:::1;:20;::::0;;;;;;;;18839:13:::1;:20:::0;;;;;:26;;;;;;;;;:35;;;18808:20:::1;18885:61;18822:5:::0;18808:20;18860:4;18928:17:::1;:15;:17::i;18885:61::-;18962:35;::::0;;13525:25:1;;;13581:2;13566:18;;13559:34;;;-1:-1:-1;;;;;18962:35:0;::::1;::::0;::::1;::::0;13498:18:1;18962:35:0::1;;;;;;;;14452:1;18654:351:::0;;;:::o;15234:231::-;8258:13;:11;:13::i;:::-;-1:-1:-1;;;;;15315:22:0;::::1;15307:67;;;::::0;-1:-1:-1;;;15307:67:0;;12108:2:1;15307:67:0::1;::::0;::::1;12090:21:1::0;;;12127:18;;;12120:30;12186:34;12166:18;;;12159:62;12238:18;;15307:67:0::1;12080:182:1::0;15307:67:0::1;15385:15;:26:::0;;-1:-1:-1;;;;;;15385:26:0::1;-1:-1:-1::0;;;;;15385:26:0;::::1;::::0;;::::1;::::0;;;15429:28:::1;::::0;4148:51:1;;;15429:28:0::1;::::0;4136:2:1;4121:18;15429:28:0::1;4103:102:1::0;21690:576:0;-1:-1:-1;;;;;21848:20:0;;;21817:19;21848:20;;;:13;:20;;;;;;;;;;;;21839:30;;:8;:30;;;21884:10;;;:17;21777:22;;21839:30;21880:40;;21908:12;21690:576;;;:::o;21880:40::-;21955:10;;;:17;21941:32;;;;;;-1:-1:-1;;;21941:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21941:32:0;-1:-1:-1;21933:40:0;-1:-1:-1;22074:9:0;;22094:165;22126:10;;;:17;22118:25;;22094:165;;;22169:11;22183:5;:10;;22194:5;22183:17;;;;;;-1:-1:-1;;;22183:17:0;;;;;;;;;;;;;;;;;22169:31;;22226:3;22215:5;22221:1;22215:8;;;;;;-1:-1:-1;;;22215:8:0;;;;;;;;;;;;;;;;;;:14;22244:3;;;;:::i;:::-;;;;22094:165;22145:7;;;;;:::i;:::-;;;;22094:165;;;;21690:576;;;;;:::o;16680:207::-;8258:13;:11;:13::i;:::-;10564:3:::1;16746;:13;;:30;;;;;10636:3;16763;:13;;16746:30;16738:60;;;::::0;-1:-1:-1;;;16738:60:0;;6585:2:1;16738:60:0::1;::::0;::::1;6567:21:1::0;6624:2;6604:18;;;6597:30;-1:-1:-1;;;6643:18:1;;;6636:47;6700:18;;16738:60:0::1;6557:167:1::0;16738:60:0::1;16824:2;::::0;;16837:8;;;;16861:18:::1;::::0;;13525:25:1;;;13581:2;13566:18;;13559:34;;;16861:18:0::1;::::0;13498::1;16861::0::1;13480:119:1::0;9020:103:0;8258:13;:11;:13::i;:::-;9085:30:::1;9112:1;9085:18;:30::i;:::-;9020:103::o:0;20915:357::-;13945:10;28055:17;28100:8;13924:57;;;;-1:-1:-1;;;13924:57:0;;11405:2:1;13924:57:0;;;11387:21:1;11444:2;11424:18;;;11417:30;-1:-1:-1;;;11463:18:1;;;11456:50;11523:18;;13924:57:0;11377:170:1;13924:57:0;14000:10;14014:9;14000:23;13992:62;;;;-1:-1:-1;;;13992:62:0;;5873:2:1;13992:62:0;;;5855:21:1;5912:2;5892:18;;;5885:30;5951:28;5931:18;;;5924:56;5997:18;;13992:62:0;5845:176:1;13992:62:0;-1:-1:-1;;;;;21009:20:0;;::::1;20993:13;21009:20:::0;;;:13:::1;:20;::::0;;;;;;;;;;::::1;21062:15:::0;;;:8:::1;:15:::0;;;;;1330:16;;;:11;;;:16;;;;;;;;21088:57:::1;;;::::0;-1:-1:-1;;;21088:57:0;;10345:2:1;21088:57:0::1;::::0;::::1;10327:21:1::0;10384:2;10364:18;;;10357:30;10423:26;10403:18;;;10396:54;10467:18;;21088:57:0::1;10317:174:1::0;21088:57:0::1;21158:61;21181:5;21188;21195:4;21201:17;:15;:17::i;21158:61::-;21237:27;::::0;;-1:-1:-1;;;;;4402:32:1;;;4384:51;;4466:2;4451:18;;4444:34;;;21237:27:0;::::1;::::0;::::1;::::0;4357:18:1;21237:27:0::1;4339:145:1::0;17575:854:0;14778:10;-1:-1:-1;;;;;14792:8:0;14778:22;;14770:60;;;;-1:-1:-1;;;14770:60:0;;11754:2:1;14770:60:0;;;11736:21:1;11793:2;11773:18;;;11766:30;11832:27;11812:18;;;11805:55;11877:18;;14770:60:0;11726:175:1;14770:60:0;-1:-1:-1;;;;;17817:20:0;;::::1;17801:13;17817:20:::0;;;:13:::1;:20;::::0;;;;;;;;;;::::1;17870:15:::0;;;:8:::1;:15:::0;;;;;;;17801:13;;17946:292:::1;17970:10;::::0;::::1;:17:::0;17966:21;::::1;17946:292;;;18009:11;18023:5;:10;;18034:1;18023:13;;;;;;-1:-1:-1::0;;;18023:13:0::1;;;;;;;;;;;;;;;;;18009:27;;18056:4;18051:107;;18095:17;:15;:17::i;:::-;18081:31;;18138:4;18131:11;;18051:107;18172:54;18195:5;18202;18209:3;18214:11;18172:22;:54::i;:::-;-1:-1:-1::0;17989:3:0;::::1;::::0;::::1;:::i;:::-;;;;17946:292;;;-1:-1:-1::0;18255:166:0::1;::::0;;14159:25:1;;;14215:2;14200:18;;14193:34;;;14243:18;;;14236:34;;;14301:2;14286:18;;14279:34;;;-1:-1:-1;;;;;18255:166:0;::::1;::::0;::::1;::::0;14146:3:1;14131:19;18255:166:0::1;;;;;;;14841:1;;;;17575:854:::0;;;;;:::o;16446:163::-;8258:13;:11;:13::i;:::-;16529:15:::1;::::0;;;:9:::1;:15;::::0;;;;;;;;:25;;-1:-1:-1;;16529:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16570:31;;13256:25:1;;;13297:18;;;13290:50;16570:31:0::1;::::0;13229:18:1;16570:31:0::1;13211:135:1::0;15896:375:0;14208:15;;-1:-1:-1;;;;;14208:15:0;14194:10;:29;14186:66;;;;-1:-1:-1;;;14186:66:0;;7743:2:1;14186:66:0;;;7725:21:1;7782:2;7762:18;;;7755:30;7821:26;7801:18;;;7794:54;7865:18;;14186:66:0;7715:174:1;14186:66:0;-1:-1:-1;;;;;15985:20:0;::::1;15977:64;;;::::0;-1:-1:-1;;;15977:64:0;;12469:2:1;15977:64:0::1;::::0;::::1;12451:21:1::0;12508:2;12488:18;;;12481:30;12547:33;12527:18;;;12520:61;12598:18;;15977:64:0::1;12441:181:1::0;15977:64:0::1;-1:-1:-1::0;;;;;16074:20:0;;::::1;16106:1;16074:20:::0;;;:13:::1;:20;::::0;;;;;::::1;:34:::0;16052:120:::1;;;::::0;-1:-1:-1;;;16052:120:0;;7338:2:1;16052:120:0::1;::::0;::::1;7320:21:1::0;7377:2;7357:18;;;7350:30;7416:34;7396:18;;;7389:62;-1:-1:-1;;;7467:18:1;;;7460:34;7511:19;;16052:120:0::1;7310:226:1::0;16052:120:0::1;-1:-1:-1::0;;;;;16185:20:0;;::::1;;::::0;;;:13:::1;:20;::::0;;;;;;;;:29;;-1:-1:-1;;;;;;16185:29:0::1;::::0;;::::1;::::0;;::::1;::::0;;16232:31;;4148:51:1;;;16185:20:0;;16232:31:::1;::::0;4121:18:1;16232:31:0::1;;;;;;;15896:375:::0;;:::o;19585:548::-;19667:10;19637:13;19653:25;;;:13;:25;;;;;;;;;19711:15;;;:9;:15;;;;;;;-1:-1:-1;;;;;19653:25:0;;;;19711:15;;:38;;;;-1:-1:-1;;;;;;19730:19:0;;;;19711:38;19689:119;;;;-1:-1:-1;;;19689:119:0;;9631:2:1;19689:119:0;;;9613:21:1;9670:2;9650:18;;;9643:30;9709:33;9689:18;;;9682:61;9760:18;;19689:119:0;9603:181:1;19689:119:0;-1:-1:-1;;;;;19843:15:0;;19821:19;19843:15;;;:8;:15;;;;;19911:14;;19891:10;;;:17;:34;19869:120;;;;-1:-1:-1;;;19869:120:0;;8096:2:1;19869:120:0;;;8078:21:1;8135:2;8115:18;;;8108:30;8174:34;8154:18;;;8147:62;-1:-1:-1;;;8225:18:1;;;8218:34;8269:19;;19869:120:0;8068:226:1;19869:120:0;20002:66;20025:10;20037:5;20044:4;20050:17;:15;:17::i;20002:66::-;20086:39;;;-1:-1:-1;;;;;4402:32:1;;4384:51;;4466:2;4451:18;;4444:34;;;20101:10:0;;20086:39;;4357:18:1;20086:39:0;4339:145:1;22682:358:0;-1:-1:-1;;;;;22938:20:0;;;22788:7;22938:20;;;:13;:20;;;;;;22788:7;;22875:157;;22914:5;;22938:20;22977:4;23000:17;:15;:17::i;:::-;22875:20;:157::i;:::-;-1:-1:-1;;;;;22833:20:0;;;;;;:13;:20;;;;;;;;:26;;;;;;;;;:199;;;;:::i;14917:264::-;8258:13;:11;:13::i;:::-;15015:1:::1;15008:4;:8;14986:115;;;::::0;-1:-1:-1;;;14986:115:0;;8501:2:1;14986:115:0::1;::::0;::::1;8483:21:1::0;8540:2;8520:18;;;8513:30;8579:34;8559:18;;;8552:62;8650:27;8630:18;;;8623:55;8695:19;;14986:115:0::1;8473:247:1::0;14986:115:0::1;15112:14;:21:::0;;;15149:24:::1;::::0;12773:25:1;;;15149:24:0::1;::::0;12761:2:1;12746:18;15149:24:0::1;12728:76:1::0;9278:201:0;8258:13;:11;:13::i;:::-;-1:-1:-1;;;;;9367:22:0;::::1;9359:73;;;::::0;-1:-1:-1;;;9359:73:0;;6931:2:1;9359:73:0::1;::::0;::::1;6913:21:1::0;6970:2;6950:18;;;6943:30;7009:34;6989:18;;;6982:62;-1:-1:-1;;;7060:18:1;;;7053:36;7106:19;;9359:73:0::1;6903:228:1::0;9359:73:0::1;9443:28;9462:8;9443:18;:28::i;:::-;9278:201:::0;:::o;8537:132::-;8418:7;8445:6;-1:-1:-1;;;;;8445:6:0;7003:10;8601:23;8593:68;;;;-1:-1:-1;;;8593:68:0;;11044:2:1;8593:68:0;;;11026:21:1;;;11063:18;;;11056:30;11122:34;11102:18;;;11095:62;11174:18;;8593:68:0;11016:182:1;768:424:0;837:13;853:16;;;:11;;;:16;;;;;;884:10;880:23;;896:7;768:424;;:::o;880:23::-;931:9;;;941:16;;913:15;;931:9;941:20;;960:1;;941:20;:::i;:::-;931:31;;;;;;-1:-1:-1;;;931:31:0;;;;;;;;;;;;;;;;;913:49;;984:7;977:3;:14;973:120;;1031:7;1008:9;;;1018;1026:1;1018:5;:9;:::i;:::-;1008:20;;;;;;-1:-1:-1;;;1008:20:0;;;;;;;;;;;;;;;;;;;;:30;;;;1053:20;;;:11;;;:20;;;;;;:28;;;973:120;1110:9;:14;;;;;;;;;;;1103:21;;;1142:11;;;:16;;;;;1135:23;1169:9;;;:15;;;;;-1:-1:-1;;;1169:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;768:424;;;;:::o;24517:1519::-;-1:-1:-1;;;;;24698:16:0;;24676:19;24698:16;;;:8;:16;;;;;;;;24811:15;;;:9;:15;;;;;;;;;24806:381;;24847:10;:16;;;;;;;;;;;11053:10;-1:-1:-1;24843:279:0;;;24947:159;;-1:-1:-1;;;24947:159:0;;-1:-1:-1;;;;;4709:32:1;;;24947:159:0;;;4691:51:1;4758:18;;;4751:34;;;11053:10:0;4801:18:1;;;4794:34;24959:11:0;24947:46;;;;4664:18:1;;24947:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24843:279;25136:18;:5;25149:4;25136:12;:18::i;:::-;25169:7;;;24806:381;25224:94;;-1:-1:-1;;;25224:94:0;;-1:-1:-1;;;;;4402:32:1;;;25224:94:0;;;4384:51:1;4451:18;;;4444:34;;;25199:22:0;;25236:11;25224:43;;;;;;4357:18:1;;25224:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25199:119;;25329:18;25392:52;25413:5;25420:6;25428:4;25434:9;25392:20;:52::i;:::-;-1:-1:-1;;;;;25350:20:0;;;;;;:13;:20;;;;;;;;:26;;;;;;;;;:94;;;;:::i;:::-;25329:115;;11053:10;25461;:28;25457:192;;;-1:-1:-1;11053:10:0;25457:192;;;11180:10;25556;:32;25552:97;;;-1:-1:-1;11180:10:0;25552:97;25723:14;25709:10;:28;25705:199;;25754:138;;-1:-1:-1;;;25754:138:0;;-1:-1:-1;;;;;4709:32:1;;;25754:138:0;;;4691:51:1;4758:18;;;4751:34;;;4801:18;;;4794:34;;;25766:11:0;25754:46;;;;4664:18:1;;25754:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25705:199;25914:30;:5;25927:4;25933:10;25914:12;:30::i;:::-;25962:66;;;13806:25:1;;;13862:2;13847:18;;13840:34;;;13890:18;;;13883:34;;;-1:-1:-1;;;;;25962:66:0;;;;;13794:2:1;13779:18;25962:66:0;;;;;;;24517:1519;;;;;;;;:::o;9639:191::-;9713:16;9732:6;;-1:-1:-1;;;;;9749:17:0;;;-1:-1:-1;;;;;;9749:17:0;;;;;;9782:40;;9732:6;;;;;;;9782:40;;9713:16;9782:40;9639:191;;:::o;26251:1561::-;26411:7;26435:14;26431:42;;-1:-1:-1;11053:10:0;26451:22;;26431:42;26512:84;;-1:-1:-1;;;26512:84:0;;;;;12983:25:1;;;-1:-1:-1;;;;;13044:32:1;;;13024:18;;;13017:60;26487:17:0;;26524:11;26512:33;;;;;;12956:18:1;;26512:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26486:110;;;;26607:10;10715:3;26626:9;26621:2;;:14;;;;:::i;:::-;26620:31;;;;:::i;:::-;26607:44;-1:-1:-1;26713:14:0;;;:25;;-1:-1:-1;26731:7:0;;26713:25;26709:53;;;11053:10;26740:22;;;;;;26709:53;26988:34;;-1:-1:-1;;;26988:34:0;;-1:-1:-1;;;;;4166:32:1;;;26988:34:0;;;4148:51:1;-1:-1:-1;;;;;;26997:8:0;26988:27;;;;;;4121:18:1;;26988:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26775:247;;;;;;;;;;;;27037:16;27057:1;27037:21;:55;;;;27081:11;27062:15;:30;;27037:55;27033:96;;;11053:10;27107:22;;;;;;;;;27033:96;27203:25;27240:8;-1:-1:-1;;;;;27231:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27301;;-1:-1:-1;;;27301:38:0;;;;;12773:25:1;;;27203:66:0;;-1:-1:-1;27282:9:0;;-1:-1:-1;;;;;27313:11:0;27301:32;;;;12746:18:1;;27301:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27282:58;-1:-1:-1;27351:26:0;27426:9;27381:27;27395:13;27381:11;:27;:::i;:::-;27380:56;;;;:::i;:::-;27351:85;-1:-1:-1;27457:10:0;27613:29;27633:9;27613:17;:29;:::i;:::-;27593:2;;27473:25;;-1:-1:-1;;;27473:25:0;;-1:-1:-1;;;;;27486:11:0;4166:32:1;;27473:25:0;;;4148:51:1;11290:3:0;;27546:18;;27514:16;;27473:12;;;;;;4121:18:1;;27473:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;:::i;:::-;:91;;;;:::i;:::-;27472:117;;;;:::i;:::-;27471:124;;;;:::i;:::-;27470:173;;;;:::i;:::-;27457:186;-1:-1:-1;27802:2:0;11053:10;27730:7;27457:186;27802:2;27730:7;:::i;:::-;27717:9;:21;:45;;27754:7;27759:2;27754;:7;:::i;:::-;27717:45;;;27741:9;27717:45;27716:82;;;;:::i;:::-;27715:89;;;;:::i;:::-;27695:109;;;;;;;;;;;26251:1561;;;;;;;:::o;395:365::-;513:16;532;;;:11;;;:16;;;;;;;;;559:14;;;;;;;:22;;;596:12;;592:161;;610:7;395:365;;;:::o;592:161::-;666:9;;;:16;:20;;685:1;666:20;:::i;:::-;647:16;;;;:11;;;;:16;;;;;;;:39;;;;701:9;;;;:19;;;;;;;;;;;;;;;;;-1:-1:-1;;395:365:0:o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;610:6;618;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:325::-;1013:6;1021;1074:2;1062:9;1053:7;1049:23;1045:32;1042:2;;;1095:6;1087;1080:22;1042:2;1139:9;1126:23;1158:31;1183:5;1158:31;:::i;:::-;1208:5;1260:2;1245:18;;;;1232:32;;-1:-1:-1;;;1032:238:1:o;1275:393::-;1352:6;1360;1368;1421:2;1409:9;1400:7;1396:23;1392:32;1389:2;;;1442:6;1434;1427:22;1389:2;1486:9;1473:23;1505:31;1530:5;1505:31;:::i;:::-;1555:5;1607:2;1592:18;;1579:32;;-1:-1:-1;1658:2:1;1643:18;;;1630:32;;1379:289;-1:-1:-1;;;1379:289:1:o;1673:531::-;1768:6;1776;1784;1792;1800;1853:3;1841:9;1832:7;1828:23;1824:33;1821:2;;;1875:6;1867;1860:22;1821:2;1919:9;1906:23;1938:31;1963:5;1938:31;:::i;:::-;1988:5;2040:2;2025:18;;2012:32;;-1:-1:-1;2091:2:1;2076:18;;2063:32;;2142:2;2127:18;;2114:32;;-1:-1:-1;2193:3:1;2178:19;2165:33;;-1:-1:-1;1811:393:1;-1:-1:-1;;;1811:393:1:o;2209:190::-;2268:6;2321:2;2309:9;2300:7;2296:23;2292:32;2289:2;;;2342:6;2334;2327:22;2289:2;-1:-1:-1;2370:23:1;;2279:120;-1:-1:-1;2279:120:1:o;2404:194::-;2474:6;2527:2;2515:9;2506:7;2502:23;2498:32;2495:2;;;2548:6;2540;2533:22;2495:2;-1:-1:-1;2576:16:1;;2485:113;-1:-1:-1;2485:113:1:o;2603:319::-;2668:6;2676;2729:2;2717:9;2708:7;2704:23;2700:32;2697:2;;;2750:6;2742;2735:22;2697:2;2791:9;2778:23;2768:33;;2851:2;2840:9;2836:18;2823:32;2864:28;2886:5;2864:28;:::i;2927:316::-;3015:6;3023;3031;3084:2;3072:9;3063:7;3059:23;3055:32;3052:2;;;3105:6;3097;3090:22;3052:2;3139:9;3133:16;3123:26;;3189:2;3178:9;3174:18;3168:25;3158:35;;3233:2;3222:9;3218:18;3212:25;3202:35;;3042:201;;;;;:::o;3248:749::-;3387:6;3395;3403;3411;3419;3427;3435;3443;3451;3504:3;3492:9;3483:7;3479:23;3475:33;3472:2;;;3526:6;3518;3511:22;3472:2;3560:9;3554:16;3544:26;;3610:2;3599:9;3595:18;3589:25;3579:35;;3654:2;3643:9;3639:18;3633:25;3623:35;;3698:2;3687:9;3683:18;3677:25;3667:35;;3742:3;3731:9;3727:19;3721:26;3711:36;;3787:3;3776:9;3772:19;3766:26;3756:36;;3832:3;3821:9;3817:19;3811:26;3801:36;;3880:3;3869:9;3865:19;3859:26;3894:28;3916:5;3894:28;:::i;:::-;3941:5;3931:15;;;3986:3;3975:9;3971:19;3965:26;3955:36;;3462:535;;;;;;;;;;;:::o;4839:635::-;5010:2;5062:21;;;5132:13;;5035:18;;;5154:22;;;4981:4;;5010:2;5233:15;;;;5207:2;5192:18;;;4981:4;5279:169;5293:6;5290:1;5287:13;5279:169;;;5354:13;;5342:26;;5423:15;;;;5388:12;;;;5315:1;5308:9;5279:169;;;-1:-1:-1;5465:3:1;;4990:484;-1:-1:-1;;;;;;4990:484:1:o;14324:128::-;14364:3;14395:1;14391:6;14388:1;14385:13;14382:2;;;14401:18;;:::i;:::-;-1:-1:-1;14437:9:1;;14372:80::o;14457:217::-;14497:1;14523;14513:2;;-1:-1:-1;;;14548:31:1;;14602:4;14599:1;14592:15;14630:4;14555:1;14620:15;14513:2;-1:-1:-1;14659:9:1;;14503:171::o;14679:168::-;14719:7;14785:1;14781;14777:6;14773:14;14770:1;14767:21;14762:1;14755:9;14748:17;14744:45;14741:2;;;14792:18;;:::i;:::-;-1:-1:-1;14832:9:1;;14731:116::o;14852:125::-;14892:4;14920:1;14917;14914:8;14911:2;;;14925:18;;:::i;:::-;-1:-1:-1;14962:9:1;;14901:76::o;14982:135::-;15021:3;-1:-1:-1;;15042:17:1;;15039:2;;;15062:18;;:::i;:::-;-1:-1:-1;15109:1:1;15098:13;;15029:88::o;15122:127::-;15183:10;15178:3;15174:20;15171:1;15164:31;15214:4;15211:1;15204:15;15238:4;15235:1;15228:15;15254:131;-1:-1:-1;;;;;15329:31:1;;15319:42;;15309:2;;15375:1;15372;15365:12;15390:118;15476:5;15469:13;15462:21;15455:5;15452:32;15442:2;;15498:1;15495;15488:12

Swarm Source

ipfs://4fb177b77f867d34fe713e675896ca2da3d472cb1a9dfb7bc367c057ed964296
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.