Contract
0x53948B7D375739E746A17C35d5883D51C649603c
1
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x593781849c160dfa8249c467f9b1bba809bb8f2efabcadfe1a96a44df524d8e7 | 57864282 | 5 days 4 hrs ago | 0xc43815bdc7effeb98765ed6574bfb0f8beafef9c | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
BarMasterChef
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2023-03-18 */ // SPDX-License-Identifier: MIT // File: BarbarianChef/interfaces/IBarReferral.sol pragma solidity ^0.8.0; interface IBarReferral { /** * @dev Record referral. */ function recordReferrer(address _account, address _referrer) external; /** * @dev Record referral reward. */ function addReferralReward(address _referrer, uint256 _reward) external; /** * @dev Get the account that referred the user. */ function getReferrer(address _account) external view returns (address); /** * @dev Get the total earned of a referrer */ function getReferrerEarned(address _account) external view returns (uint256); /** * @notice Get referred users count by an account */ function getReferredUserCount(address _account) external view returns (uint256); } // File: BarbarianChef/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ 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"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: BarbarianChef/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: BarbarianChef/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: BarbarianChef/interfaces/IBar.sol pragma solidity ^0.8.0; interface IBar is IERC20 { function mint(uint256 _amount) external; function mint(address _account, uint256 _amount) external; } // File: BarbarianChef/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: BarbarianChef/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: BarbarianChef/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: BarbarianChef/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: BarbarianChef/BarMasterChef.sol pragma solidity ^0.8.0; pragma experimental ABIEncoderV2; contract BarMasterChef is Ownable, ReentrancyGuard { using SafeERC20 for IERC20; using SafeERC20 for IBar; /// @notice Info of each user. /// `amount` LP token amount the user has provided. /// `rewardDebt` Used to calculate the correct amount of rewards. See explanation below. /// /// We do some fancy math here. Basically, any point in time, the amount of BARs /// entitled to a user but is pending to be distributed is: /// /// pending reward = (user share * pool.accBarPerShare) - user.rewardDebt /// /// Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: /// 1. The pool's `accBarPerShare` (and `lastRewardBlock`) gets updated. /// 2. User receives the pending reward sent to his/her address. /// 3. User's `amount` gets updated. Pool's `totalBoostedShare` gets updated. /// 4. User's `rewardDebt` gets updated. struct UserInfo { uint256 amount; uint256 rewardDebt; uint256 boostMultiplier; } /// @notice Info of each pool. /// `allocPoint` The amount of allocation points assigned to the pool. /// Also known as the amount of "multipliers". Combined with `totalXAllocPoint`, it defines the % of /// BAR rewards each pool gets. /// `accBarPerShare` Accumulated BARs per share, times 1e12. /// `lastRewardBlock` Last block number that pool update action is executed. /// `isRegular` The flag to set pool is regular or special. See below: /// In MasterChef farms are "regular pools". "special pools", which use a different sets of /// `allocPoint` and their own `totalSpecialAllocPoint` are designed to handle the distribution of /// the BAR rewards to all the BarSwap products. /// `totalBoostedShare` The total amount of user shares in each pool. After considering the share boosts. struct PoolInfo { uint256 accBarPerShare; uint256 lastRewardBlock; uint256 allocPoint; uint256 totalBoostedShare; bool isRegular; } /// @notice Address of BAR contract. IBar public immutable barToken; /// @notice Farm referral contract IBarReferral public refContract; /// @notice The contract handles the share boosts. address public boostContract; /// @notice Developer account to receive address public devAccount; /// @notice Info of each pool. PoolInfo[] public poolInfo; /// @notice Address of the LP token for each pool. IERC20[] public lpToken; /// @notice Info of each pool user. mapping(uint256 => mapping(address => UserInfo)) public userInfo; /// @notice The whitelist of addresses allowed to deposit in special pools. mapping(address => bool) public whiteList; /// @notice Total BAR staked in the pools, we have this amount to prevent user staked BAR token is being sent as rewards uint256 public totalBarStaked; /// @notice Total regular allocation points. Must be the sum of all regular pools' allocation points. uint256 public totalRegularAllocPoint; /// @notice Total special allocation points. Must be the sum of all special pools' allocation points. uint256 public totalSpecialAllocPoint; /// @notice Reward generated per block uint256 public rewardPerBlock; /// @notice total BAR rate = toRegular + toSpecial uint256 public constant BAR_RATE_TOTAL_PRECISION = 1e5; /// @notice BAR distribute % for regular farm pool uint256 public barRateToRegularFarm = 16666; /// @notice BAR distribute % for special pools uint256 public barRateToSpecialFarm = 83334; /// @notice Referral commission fee, default 1% uint16 public refCommissionFee = 100; /// @notice Max referral commission fee should be less than 10% uint16 public constant MAX_REF_FEE = 1000; uint16 public constant FEE_PRECISION = 1e4; uint256 public constant ACC_BAR_PRECISION = 1e18; /// @notice Basic boost factor, none boosted user's boost factor uint256 public constant BOOST_PRECISION = 100 * 1e10; /// @notice Hard limit for maxmium boost factor, it must greater than BOOST_PRECISION uint256 public constant MAX_BOOST_PRECISION = 200 * 1e10; event AddPool( uint256 indexed pid, uint256 allocPoint, IERC20 indexed lpToken, bool isRegular ); event SetPool(uint256 indexed pid, uint256 allocPoint); event UpdatePool( uint256 indexed pid, uint256 lastRewardBlock, uint256 lpSupply, uint256 accBarPerShare ); event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw( address indexed user, uint256 indexed pid, uint256 amount ); event UpdateEmissionRate(uint256 oldRate, uint256 newRate); event UpdateBarRate(uint256 regularFarmRate, uint256 specialFarmRate); event UpdateRefContract(address oldContract, address newContract); event UpdateRefCommissionFee(uint16 oldFee, uint16 newFee); event UpdateDevAccount(address oldAccount, address newAccount); event UpdateWhiteList(address indexed user, bool isValid); event UpdateBoostContract(address indexed boostContract); event UpdateBoostMultiplier( address indexed user, uint256 pid, uint256 oldMultiplier, uint256 newMultiplier ); /// @param _barToken The bar token contract address. /// @param _refContract The referral contract /// @param _devAccount The account to receive BAR minted for the dev team /// @param _rewardPerBlock Emission rate constructor( IBar _barToken, IBarReferral _refContract, address _devAccount, uint256 _rewardPerBlock ) { require(_devAccount != address(0), "Invalid dev account"); barToken = _barToken; refContract = _refContract; devAccount = _devAccount; rewardPerBlock = _rewardPerBlock; } /** * @dev Throws if caller is not the boost contract. */ modifier onlyBoostContract() { require( boostContract == msg.sender, "Ownable: caller is not the boost contract" ); _; } /// @notice Returns the number of pools. function poolLength() public view returns (uint256 pools) { pools = poolInfo.length; } /// @notice Add a new pool. Can only be called by the owner. /// @param _allocPoint Number of allocation points for the new pool. /// @param _lpToken Address of the LP BEP-20 token. /// @param _isRegular Whether the pool is regular or special. LP farms are always "regular". "Special" pools are /// @param _withUpdate Whether call "massUpdatePools" operation. /// only for BAR distributions within BarSwap products. function add( uint256 _allocPoint, IERC20 _lpToken, bool _isRegular, bool _withUpdate ) external onlyOwner { require(_lpToken.balanceOf(address(this)) >= 0, "None ERC20 tokens"); if (_withUpdate) { massUpdatePools(); } if (_isRegular) totalRegularAllocPoint += _allocPoint; else totalSpecialAllocPoint += _allocPoint; lpToken.push(_lpToken); poolInfo.push( PoolInfo({ allocPoint: _allocPoint, lastRewardBlock: block.number, accBarPerShare: 0, isRegular: _isRegular, totalBoostedShare: 0 }) ); emit AddPool(lpToken.length - 1, _allocPoint, _lpToken, _isRegular); } /// @notice Update the given pool's BAR allocation point. Can only be called by the owner. /// @param _pid The id of the pool. See `poolInfo`. /// @param _allocPoint New number of allocation points for the pool. /// @param _withUpdate Whether call "massUpdatePools" operation. function set( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) external onlyOwner { // No matter _withUpdate is true or false, we need to execute updatePool once before set the pool parameters. updatePool(_pid); if (_withUpdate) { massUpdatePools(); } if (poolInfo[_pid].isRegular) { totalRegularAllocPoint = totalRegularAllocPoint + _allocPoint - poolInfo[_pid].allocPoint; } else { totalSpecialAllocPoint = totalSpecialAllocPoint + _allocPoint - poolInfo[_pid].allocPoint; } poolInfo[_pid].allocPoint = _allocPoint; emit SetPool(_pid, _allocPoint); } /// @notice View function for checking pending BAR rewards. /// @param _pid The id of the pool. See `poolInfo`. /// @param _user Address of the user. function pendingBar(uint256 _pid, address _user) external view returns (uint256) { PoolInfo memory pool = poolInfo[_pid]; UserInfo memory user = userInfo[_pid][_user]; uint256 accBarPerShare = pool.accBarPerShare; uint256 lpSupply = pool.totalBoostedShare; if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = block.number - pool.lastRewardBlock; uint256 barReward = (multiplier * barPerBlock(pool.isRegular) * pool.allocPoint) / ( pool.isRegular ? totalRegularAllocPoint : totalSpecialAllocPoint ); accBarPerShare += (barReward * ACC_BAR_PRECISION) / lpSupply; } uint256 boostedAmount = (user.amount * getBoostMultiplier(_user, _pid)) / BOOST_PRECISION; return (boostedAmount * accBarPerShare) / ACC_BAR_PRECISION - user.rewardDebt; } /// @notice Update BAR reward for all the active pools. Be careful of gas spending! function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { PoolInfo memory pool = poolInfo[pid]; if (pool.allocPoint != 0) { updatePool(pid); } } } /// @notice Calculates and returns the `amount` of BAR per block. /// @param _isRegular If the pool belongs to regular or special. function barPerBlock(bool _isRegular) public view returns (uint256 amount) { if (_isRegular) { amount = (rewardPerBlock * barRateToRegularFarm) / BAR_RATE_TOTAL_PRECISION; } else { amount = (rewardPerBlock * barRateToSpecialFarm) / BAR_RATE_TOTAL_PRECISION; } } /// @notice Update reward variables for the given pool. /// @param _pid The id of the pool. See `poolInfo`. /// @return pool Returns the pool that was updated. function updatePool(uint256 _pid) public returns (PoolInfo memory pool) { pool = poolInfo[_pid]; if (block.number > pool.lastRewardBlock) { uint256 lpSupply = pool.totalBoostedShare; uint256 totalAllocPoint = ( pool.isRegular ? totalRegularAllocPoint : totalSpecialAllocPoint ); if (lpSupply > 0 && totalAllocPoint > 0) { uint256 multiplier = block.number - pool.lastRewardBlock; uint256 barReward = (multiplier * barPerBlock(pool.isRegular) * pool.allocPoint) / totalAllocPoint; // BAR token is minted for user rewards barToken.mint(barReward); barToken.mint(devAccount, barReward / 10); // 10% of mint amount is sent to dev team wallet pool.accBarPerShare += (barReward * ACC_BAR_PRECISION) / lpSupply; } pool.lastRewardBlock = block.number; poolInfo[_pid] = pool; emit UpdatePool( _pid, pool.lastRewardBlock, lpSupply, pool.accBarPerShare ); } } /// @notice Deposit LP tokens to pool. /// @param _pid The id of the pool. See `poolInfo`. /// @param _amount Amount of LP tokens to deposit. /// @param _referrer Referrer who bring me to Bar Finance function deposit( uint256 _pid, uint256 _amount, address _referrer ) external nonReentrant { PoolInfo memory pool = updatePool(_pid); UserInfo storage user = userInfo[_pid][msg.sender]; // Record referrer to this depositer refContract.recordReferrer(_msgSender(), _referrer); require(pool.isRegular || whiteList[msg.sender], "Unable to deposit"); uint256 multiplier = getBoostMultiplier(msg.sender, _pid); if (user.amount > 0) { safeRewardTransfer(msg.sender, _pid, multiplier); } if (_amount > 0) { uint256 before = lpToken[_pid].balanceOf(address(this)); lpToken[_pid].safeTransferFrom(msg.sender, address(this), _amount); _amount = lpToken[_pid].balanceOf(address(this)) - before; user.amount += _amount; if (lpToken[_pid] == barToken) totalBarStaked += _amount; // Update total boosted share. pool.totalBoostedShare += (_amount * multiplier) / BOOST_PRECISION; } user.rewardDebt = (((user.amount * multiplier) / BOOST_PRECISION) * pool.accBarPerShare) / ACC_BAR_PRECISION; poolInfo[_pid] = pool; emit Deposit(msg.sender, _pid, _amount); } /// @notice Withdraw LP tokens from pool. /// @param _pid The id of the pool. See `poolInfo`. /// @param _amount Amount of LP tokens to withdraw. function withdraw(uint256 _pid, uint256 _amount) external nonReentrant { PoolInfo memory pool = updatePool(_pid); UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "withdraw: Insufficient"); uint256 multiplier = getBoostMultiplier(msg.sender, _pid); safeRewardTransfer(msg.sender, _pid, multiplier); if (_amount > 0) { user.amount -= _amount; if (lpToken[_pid] == barToken) totalBarStaked -= _amount; lpToken[_pid].safeTransfer(msg.sender, _amount); } user.rewardDebt = (((user.amount * multiplier) / BOOST_PRECISION) * pool.accBarPerShare) / ACC_BAR_PRECISION; poolInfo[_pid].totalBoostedShare -= (_amount * multiplier) / BOOST_PRECISION; emit Withdraw(msg.sender, _pid, _amount); } /// @notice Withdraw without caring about the rewards. EMERGENCY ONLY. /// @param _pid The id of the pool. See `poolInfo`. function emergencyWithdraw(uint256 _pid) external nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 amount = user.amount; user.amount = 0; user.rewardDebt = 0; uint256 boostedAmount = (amount * getBoostMultiplier(msg.sender, _pid)) / BOOST_PRECISION; pool.totalBoostedShare = pool.totalBoostedShare > boostedAmount ? pool.totalBoostedShare - boostedAmount : 0; if (lpToken[_pid] == barToken) totalBarStaked -= amount; // Note: transfer can fail or succeed if `amount` is zero. lpToken[_pid].safeTransfer(msg.sender, amount); emit EmergencyWithdraw(msg.sender, _pid, amount); } /// @notice Update the % of BAR distributions for regular pools and special pools. /// @param _regularFarmRate The % of BAR to regular pools each block. /// @param _specialFarmRate The % of BAR to special pools each block. /// @param _withUpdate Whether call "massUpdatePools" operation. function updateBarRate( uint256 _regularFarmRate, uint256 _specialFarmRate, bool _withUpdate ) external onlyOwner { require( _regularFarmRate > 0 && _specialFarmRate > 0 && _regularFarmRate + _specialFarmRate == BAR_RATE_TOTAL_PRECISION, "Invalid rates" ); if (_withUpdate) { massUpdatePools(); } barRateToRegularFarm = _regularFarmRate; barRateToSpecialFarm = _specialFarmRate; emit UpdateBarRate(_regularFarmRate, _specialFarmRate); } /// @notice Update emission rate /// @param _rewardPerBlock The new emission rate value function updateEmissionRate(uint256 _rewardPerBlock) external onlyOwner { uint256 prevRewardPerBlock_ = rewardPerBlock; rewardPerBlock = _rewardPerBlock; emit UpdateEmissionRate(prevRewardPerBlock_, rewardPerBlock); } /// @notice Update referral commission fee function updateRefCommissionFee(uint16 _refFee) external onlyOwner { require(_refFee <= MAX_REF_FEE, "Too much fee"); emit UpdateRefCommissionFee(refCommissionFee, _refFee); refCommissionFee = _refFee; } /// @notice Update referral contract function updateRefContract(IBarReferral _refContract) external onlyOwner { require(address(_refContract) != address(0), "Invalid contract"); emit UpdateRefContract(address(refContract), address(_refContract)); refContract = _refContract; } /// @notice Update the dev account for the BAR team /// @param _devAccount To receive the minted BAR tokens for the team function updateDevAccount(address _devAccount) external onlyOwner { require(_devAccount != address(0), "Invalid dev account"); address oldAccount = devAccount; devAccount = _devAccount; emit UpdateDevAccount(oldAccount, devAccount); } /// @notice Update whitelisted addresses for special pools. /// @param _user The address to be updated. /// @param _isValid The flag for valid or invalid. function updateWhiteList(address _user, bool _isValid) external onlyOwner { require(_user != address(0), "Invalid user"); whiteList[_user] = _isValid; emit UpdateWhiteList(_user, _isValid); } /// @notice Update boost contract address and max boost factor. /// @param _newBoostContract The new address for handling all the share boosts. function updateBoostContract(address _newBoostContract) external onlyOwner { require( _newBoostContract != address(0) && _newBoostContract != boostContract, "Invalid contract" ); boostContract = _newBoostContract; emit UpdateBoostContract(_newBoostContract); } /// @notice Update user boost factor. /// @param _user The user address for boost factor updates. /// @param _pid The pool id for the boost factor updates. /// @param _newMultiplier New boost multiplier. function updateBoostMultiplier( address _user, uint256 _pid, uint256 _newMultiplier ) external onlyBoostContract nonReentrant { require(_user != address(0), "Invalid user"); require(poolInfo[_pid].isRegular, "Only regular farm could be boosted"); require( _newMultiplier >= BOOST_PRECISION && _newMultiplier <= MAX_BOOST_PRECISION, "Invalid boost multiplier" ); PoolInfo memory pool = updatePool(_pid); UserInfo storage user = userInfo[_pid][_user]; uint256 prevMultiplier = getBoostMultiplier(_user, _pid); safeRewardTransfer(_user, _pid, prevMultiplier); user.rewardDebt = (((user.amount * _newMultiplier) / BOOST_PRECISION) * pool.accBarPerShare) / ACC_BAR_PRECISION; pool.totalBoostedShare = pool.totalBoostedShare + (user.amount * _newMultiplier) / BOOST_PRECISION - (user.amount * prevMultiplier) / BOOST_PRECISION; poolInfo[_pid] = pool; userInfo[_pid][_user].boostMultiplier = _newMultiplier; emit UpdateBoostMultiplier(_user, _pid, prevMultiplier, _newMultiplier); } /// @notice Get user boost multiplier for specific pool id. /// @param _user The user address. /// @param _pid The pool id. function getBoostMultiplier(address _user, uint256 _pid) public view returns (uint256) { uint256 multiplier = userInfo[_pid][_user].boostMultiplier; return multiplier > BOOST_PRECISION ? multiplier : BOOST_PRECISION; } /// @notice Settles, distribute the pending BAR rewards for given user. /// @param _user The user address for settling rewards. /// @param _pid The pool id. /// @param _boostMultiplier The user boost multiplier in specific pool id. function safeRewardTransfer( address _user, uint256 _pid, uint256 _boostMultiplier ) internal { UserInfo memory user = userInfo[_pid][_user]; uint256 boostedAmount = (user.amount * _boostMultiplier) / BOOST_PRECISION; uint256 accBar = (boostedAmount * poolInfo[_pid].accBarPerShare) / ACC_BAR_PRECISION; uint256 pending = accBar - user.rewardDebt; // If masterchef does not have enough BAR, mints deficient BAR if (barToken.balanceOf(address(this)) < pending + totalBarStaked) barToken.mint( pending + totalBarStaked - barToken.balanceOf(address(this)) ); if (pending > 0) { barToken.safeTransfer(_user, pending); } // Referrer of this user will get commission fee address referrer = refContract.getReferrer(_user); if (referrer != address(0)) { uint256 feeAmount = (pending * refCommissionFee) / FEE_PRECISION; if (feeAmount > 0) { barToken.mint(referrer, feeAmount); refContract.addReferralReward(_user, feeAmount); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IBar","name":"_barToken","type":"address"},{"internalType":"contract IBarReferral","name":"_refContract","type":"address"},{"internalType":"address","name":"_devAccount","type":"address"},{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"lpToken","type":"address"},{"indexed":false,"internalType":"bool","name":"isRegular","type":"bool"}],"name":"AddPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","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":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"}],"name":"SetPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"regularFarmRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"specialFarmRate","type":"uint256"}],"name":"UpdateBarRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"boostContract","type":"address"}],"name":"UpdateBoostContract","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":"UpdateBoostMultiplier","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccount","type":"address"},{"indexed":false,"internalType":"address","name":"newAccount","type":"address"}],"name":"UpdateDevAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"UpdateEmissionRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accBarPerShare","type":"uint256"}],"name":"UpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"oldFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newFee","type":"uint16"}],"name":"UpdateRefCommissionFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldContract","type":"address"},{"indexed":false,"internalType":"address","name":"newContract","type":"address"}],"name":"UpdateRefContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"isValid","type":"bool"}],"name":"UpdateWhiteList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ACC_BAR_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BAR_RATE_TOTAL_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOOST_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_PRECISION","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BOOST_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_REF_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_isRegular","type":"bool"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isRegular","type":"bool"}],"name":"barPerBlock","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"barRateToRegularFarm","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"barRateToSpecialFarm","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"barToken","outputs":[{"internalType":"contract IBar","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getBoostMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingBar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"accBarPerShare","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"totalBoostedShare","type":"uint256"},{"internalType":"bool","name":"isRegular","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"pools","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refCommissionFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refContract","outputs":[{"internalType":"contract IBarReferral","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBarStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRegularAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSpecialAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_regularFarmRate","type":"uint256"},{"internalType":"uint256","name":"_specialFarmRate","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"updateBarRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newBoostContract","type":"address"}],"name":"updateBoostContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_newMultiplier","type":"uint256"}],"name":"updateBoostMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAccount","type":"address"}],"name":"updateDevAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[{"components":[{"internalType":"uint256","name":"accBarPerShare","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"totalBoostedShare","type":"uint256"},{"internalType":"bool","name":"isRegular","type":"bool"}],"internalType":"struct BarMasterChef.PoolInfo","name":"pool","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_refFee","type":"uint16"}],"name":"updateRefCommissionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBarReferral","name":"_refContract","type":"address"}],"name":"updateRefContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_isValid","type":"bool"}],"name":"updateWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"boostMultiplier","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405261411a600d5562014586600e55600f805461ffff191660641790553480156200002c57600080fd5b50604051620030ab380380620030ab8339810160408190526200004f9162000152565b6200005a3362000102565b600180556001600160a01b038216620000b95760405162461bcd60e51b815260206004820152601360248201527f496e76616c696420646576206163636f756e7400000000000000000000000000604482015260640160405180910390fd5b60609390931b6001600160601b031916608052600280546001600160a01b03199081166001600160a01b03948516179091556004805490911691909216179055600c55620001c4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806080858703121562000168578384fd5b84516200017581620001ab565b60208601519094506200018881620001ab565b60408601519093506200019b81620001ab565b6060959095015193969295505050565b6001600160a01b0381168114620001c157600080fd5b50565b60805160601c612e89620002226000396000818161059201528181610c4101528181610fd601528181611045015281816112ad015281816119a50152818161236e0152818161240b0152818161251001526126160152612e896000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c8063794a911c11610151578063ac1d0609116100c3578063cc6db2da11610087578063cc6db2da146105d0578063df97d31c146105dc578063dfcedeee146105ef578063e63a391f14610602578063e87e35f01461060b578063f2fde38b1461061e57600080fd5b8063ac1d060914610567578063b1aff22c1461057a578063c05e50df1461058d578063c40d337b146105b4578063c507aeaa146105bd57600080fd5b80638dbdbe6d116101155780638dbdbe6d146104c757806393f1a40b146104da578063972c408b1461052f57806399d7e84a146105385780639dd2fcc314610541578063a8d7c1d51461055457600080fd5b8063794a911c146104885780637ba20694146104915780638ae39cac1461049a5780638c9452bf146104a35780638da5cb5b146104b657600080fd5b80634a72dfd9116101ea57806364482f79116101ae57806364482f7914610419578063691edfda1461042c57806369b0212814610457578063715018a6146104645780637378f32d1461046c57806378ed5d1f1461047557600080fd5b80634a72dfd91461037c57806351eb05a6146103865780635312ea8e146103dd5780635c3c6b8e146103f0578063630b5ba11461041157600080fd5b80631a67df50116102315780631a67df5014610301578063372c12b11461031457806337d9ab0514610347578063441a3e7014610356578063483c35a21461036957600080fd5b8063033186e81461026e578063041a84c914610294578063081e3eda146102a95780630ba84cd2146102b15780631526fe27146102c4575b600080fd5b61028161027c366004612afa565b610631565b6040519081526020015b60405180910390f35b6102a76102a2366004612b25565b610678565b005b600554610281565b6102a76102bf366004612bb3565b610a18565b6102d76102d2366004612bb3565b610a66565b6040805195865260208601949094529284019190915260608301521515608082015260a00161028b565b6102a761030f366004612cb2565b610aaa565b610337610322366004612a8a565b60086020526000908152604090205460ff1681565b604051901515815260200161028b565b610281670de0b6b3a764000081565b6102a7610364366004612c59565b610b6b565b6102a7610377366004612a8a565b610de6565b610281620186a081565b610399610394366004612bb3565b610e94565b60405161028b9190600060a0820190508251825260208301516020830152604083015160408301526060830151606083015260808301511515608083015292915050565b6102a76103eb366004612bb3565b6111d6565b600f546103fe9061ffff1681565b60405161ffff909116815260200161028b565b6102a7611383565b6102a7610427366004612cb2565b61142d565b60045461043f906001600160a01b031681565b6040516001600160a01b03909116815260200161028b565b6102816501d1a94a200081565b6102a76115a2565b610281600e5481565b61043f610483366004612bb3565b6115b6565b61028160095481565b6103fe6103e881565b610281600c5481565b6102a76104b1366004612a8a565b6115e0565b6000546001600160a01b031661043f565b6102a76104d5366004612c7a565b61169a565b6105146104e8366004612be3565b600760209081526000928352604080842090915290825290208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161028b565b610281600d5481565b610281600b5481565b6102a761054f366004612a8a565b611b49565b6102a7610562366004612b91565b611c00565b6102a7610575366004612ac2565b611ca7565b610281610588366004612b59565b611d53565b61043f7f000000000000000000000000000000000000000000000000000000000000000081565b610281600a5481565b6102a76105cb366004612c07565b611d93565b61028164e8d4a5100081565b60025461043f906001600160a01b031681565b60035461043f906001600160a01b031681565b6103fe61271081565b610281610619366004612be3565b612045565b6102a761062c366004612a8a565b612201565b60008181526007602090815260408083206001600160a01b038616845290915281206002015464e8d4a51000811161066e5764e8d4a51000610670565b805b949350505050565b6003546001600160a01b031633146106e95760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520626f6f73746044820152680818dbdb9d1c9858dd60ba1b60648201526084015b60405180910390fd5b6002600154141561070c5760405162461bcd60e51b81526004016106e090612d2e565b60026001556001600160a01b0383166107565760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103ab9b2b960a11b60448201526064016106e0565b6005828154811061077757634e487b7160e01b600052603260045260246000fd5b600091825260209091206004600590920201015460ff166107e55760405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920726567756c6172206661726d20636f756c6420626520626f6f7374604482015261195960f21b60648201526084016106e0565b64e8d4a51000811015801561080057506501d1a94a20008111155b61084c5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420626f6f7374206d756c7469706c696572000000000000000060448201526064016106e0565b600061085783610e94565b60008481526007602090815260408083206001600160a01b038916845290915281209192506108868686610631565b905061089386868361227a565b82518254670de0b6b3a7640000919064e8d4a51000906108b4908890612d9d565b6108be9190612d7d565b6108c89190612d9d565b6108d29190612d7d565b6001830155815464e8d4a51000906108eb908390612d9d565b6108f59190612d7d565b825464e8d4a5100090610909908790612d9d565b6109139190612d7d565b84606001516109229190612d65565b61092c9190612dbc565b6060840152600580548491908790811061095657634e487b7160e01b600052603260045260246000fd5b6000918252602080832084516005939093020191825583810151600183015560408085015160028085019190915560608087015160038601556080909601516004909401805460ff191694151594909417909355898452600782528084206001600160a01b038c1680865290835293819020909201889055815189815290810185905290810187905290917f01abd62439b64f6c5dab6f94d56099495bd0c094f9c21f98f4d3562a21edb4ba910160405180910390a250506001805550505050565b610a206126e5565b600c80549082905560408051828152602081018490527f16b9091836a63537907593ebc3a80f3528891f3575b10f58ad7dd9c29fd0d44f91015b60405180910390a15050565b60058181548110610a7657600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909160ff1685565b610ab26126e5565b600083118015610ac25750600082115b8015610ad95750620186a0610ad78385612d65565b145b610b155760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420726174657360981b60448201526064016106e0565b8015610b2357610b23611383565b600d839055600e82905560408051848152602081018490527ff7f5978cf5a23d7b4eeac8cfa7bc7961d492253d614ca788d13bbaaeb5457265910160405180910390a1505050565b60026001541415610b8e5760405162461bcd60e51b81526004016106e090612d2e565b60026001556000610b9e83610e94565b60008481526007602090815260408083203384529091529020805491925090831115610c055760405162461bcd60e51b81526020600482015260166024820152751dda5d1a191c985dce88125b9cdd59999a58da595b9d60521b60448201526064016106e0565b6000610c113386610631565b9050610c1e33868361227a565b8315610cff5783826000016000828254610c389190612dbc565b925050819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660068681548110610c8a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610cbd578360096000828254610cb79190612dbc565b90915550505b610cff338560068881548110610ce357634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316919061273f565b82518254670de0b6b3a7640000919064e8d4a5100090610d20908590612d9d565b610d2a9190612d7d565b610d349190612d9d565b610d3e9190612d7d565b600183015564e8d4a51000610d538286612d9d565b610d5d9190612d7d565b60058681548110610d7e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502016003016000828254610d9e9190612dbc565b9091555050604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568906020015b60405180910390a3505060018055505050565b610dee6126e5565b6001600160a01b038116610e3a5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a590819195d881858d8dbdd5b9d606a1b60448201526064016106e0565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f9a5d366468a1a31e1bb00d0b902e99244f7f05d635aa42f621df8fc94c11e72b9101610a5a565b610ec86040518060a00160405280600081526020016000815260200160008152602001600081526020016000151581525090565b60058281548110610ee957634e487b7160e01b600052603260045260246000fd5b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301849052600281015491830191909152600381015460608301526004015460ff161515608082015291504311156111d15760608101516080820151600090610f5b57600b54610f5f565b600a545b9050600082118015610f715750600081115b1561110d576000836020015143610f889190612dbc565b90506000828560400151610f9f8760800151611d53565b610fa99085612d9d565b610fb39190612d9d565b610fbd9190612d7d565b60405163140e25ad60e31b8152600481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a0712d6890602401600060405180830381600087803b15801561102257600080fd5b505af1158015611036573d6000803e3d6000fd5b50506004546001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693506340c10f1992501661107b600a85612d7d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156110c157600080fd5b505af11580156110d5573d6000803e3d6000fd5b5050505083670de0b6b3a7640000826110ee9190612d9d565b6110f89190612d7d565b85518690611107908390612d65565b90525050505b436020840152600580548491908690811061113857634e487b7160e01b600052603260045260246000fd5b6000918252602091829020835160059290920201908155828201516001820155604080840151600283015560608085015160038401556080909401516004909201805460ff19169215159290921790915585820151865182519182529281018690529081019190915285917f3be3541fc42237d611b30329040bfa4569541d156560acdbbae57640d20b8f46910160405180910390a250505b919050565b600260015414156111f95760405162461bcd60e51b81526004016106e090612d2e565b600260018190555060006005828154811061122457634e487b7160e01b600052603260045260246000fd5b60009182526020808320858452600782526040808520338087529352842080548582556001820186905560059094029091019450929064e8d4a510009061126b9087610631565b6112759084612d9d565b61127f9190612d7d565b9050808460030154116112935760006112a3565b8084600301546112a39190612dbc565b84600301819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600686815481106112f657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156113295781600960008282546113239190612dbc565b90915550505b61134f338360068881548110610ce357634e487b7160e01b600052603260045260246000fd5b604051828152859033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae059590602001610dd3565b60055460005b81811015611429576000600582815481106113b457634e487b7160e01b600052603260045260246000fd5b60009182526020918290206040805160a08101825260059093029091018054835260018101549383019390935260028301549082018190526003830154606083015260049092015460ff16151560808201529150156114185761141682610e94565b505b5061142281612dff565b9050611389565b5050565b6114356126e5565b61143e83610e94565b50801561144d5761144d611383565b6005838154811061146e57634e487b7160e01b600052603260045260246000fd5b600091825260209091206004600590920201015460ff16156114dd57600583815481106114ab57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502016002015482600a546114cb9190612d65565b6114d59190612dbc565b600a5561152c565b600583815481106114fe57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600502016002015482600b5461151e9190612d65565b6115289190612dbc565b600b555b816005848154811061154e57634e487b7160e01b600052603260045260246000fd5b906000526020600020906005020160020181905550827fc0cfd54d2de2b55f1e6e108d3ec53ff0a1abe6055401d32c61e9433b747ef9f88360405161159591815260200190565b60405180910390a2505050565b6115aa6126e5565b6115b460006127a7565b565b600681815481106115c657600080fd5b6000918252602090912001546001600160a01b0316905081565b6115e86126e5565b6001600160a01b0381166116315760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a590818dbdb9d1c9858dd60821b60448201526064016106e0565b600254604080516001600160a01b03928316815291831660208301527fc5fedeac3ec8504f13b417db560c742ef0f140a992cb6fc5831109a02850a254910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b600260015414156116bd5760405162461bcd60e51b81526004016106e090612d2e565b600260015560006116cd84610e94565b60008581526007602090815260408083203384529091529020600254919250906001600160a01b031663a77b9c206117023390565b6040516001600160e01b031960e084901b1681526001600160a01b0391821660048201529086166024820152604401600060405180830381600087803b15801561174b57600080fd5b505af115801561175f573d6000803e3d6000fd5b5050505081608001518061178257503360009081526008602052604090205460ff165b6117c25760405162461bcd60e51b8152602060048201526011602482015270155b98589b19481d1bc819195c1bdcda5d607a1b60448201526064016106e0565b60006117ce3387610631565b8254909150156117e3576117e333878361227a565b8415611a515760006006878154811061180c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561185857600080fd5b505afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190612bcb565b90506118d633308860068b815481106118b957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03169291906127f7565b80600688815481106118f857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561194457600080fd5b505afa158015611958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197c9190612bcb565b6119869190612dbc565b95508583600001600082825461199c9190612d65565b925050819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600688815481106119ee57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611a21578560096000828254611a1b9190612d65565b90915550505b64e8d4a51000611a318388612d9d565b611a3b9190612d7d565b84606001818151611a4c9190612d65565b905250505b82518254670de0b6b3a7640000919064e8d4a5100090611a72908590612d9d565b611a7c9190612d7d565b611a869190612d9d565b611a909190612d7d565b82600101819055508260058781548110611aba57634e487b7160e01b600052603260045260246000fd5b60009182526020918290208351600592909202019081558282015160018201556040808401516002830155606084015160038301556080909301516004909101805460ff19169115159190911790559051868152879133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a350506001805550505050565b611b516126e5565b6001600160a01b03811615801590611b7757506003546001600160a01b03828116911614155b611bb65760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a590818dbdb9d1c9858dd60821b60448201526064016106e0565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4c0c07d0b548b824a1b998eb4d11fccf1cfbc1e47edcdb309970ba88315eb30390600090a250565b611c086126e5565b6103e861ffff82161115611c4d5760405162461bcd60e51b815260206004820152600c60248201526b546f6f206d7563682066656560a01b60448201526064016106e0565b600f546040805161ffff928316815291831660208301527faa93efc265d57d12921d0ff827c5c7498fe0db75e9f8b1e0d6723d582c2faecb910160405180910390a1600f805461ffff191661ffff92909216919091179055565b611caf6126e5565b6001600160a01b038216611cf45760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103ab9b2b960a11b60448201526064016106e0565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527fc551bbb22d0406dbfb8b6b7740cc521bcf44e1106029cf899c19b6a8e4c99d51910160405180910390a25050565b60008115611d7f57620186a0600d54600c54611d6f9190612d9d565b611d799190612d7d565b92915050565b620186a0600e54600c54611d6f9190612d9d565b611d9b6126e5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611ddd57600080fd5b505afa158015611df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e159190612bcb565b1015611e575760405162461bcd60e51b81526020600482015260116024820152704e6f6e6520455243323020746f6b656e7360781b60448201526064016106e0565b8015611e6557611e65611383565b8115611e885783600a6000828254611e7d9190612d65565b90915550611ea09050565b83600b6000828254611e9a9190612d65565b90915550505b60068054600180820183557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0319166001600160a01b0387169081179091556040805160a081018252600080825243602083019081529282018a8152606083018281528915156080850190815260058054808a0182559481905294517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0949095029384019490945593517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1830155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db282015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db3830155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db4909101805460ff191691151591909117905591546120059190612dbc565b6040805187815285151560208201527f18caa0724a26384928efe604ae6ddc99c242548876259770fc88fcb7e719d8fa910160405180910390a350505050565b6000806005848154811061206957634e487b7160e01b600052603260045260246000fd5b600091825260208083206040805160a081018252600590940290910180548452600180820154858501908152600280840154878601526003840154606080890191825260049095015460ff16151560808901528c8952600787528589206001600160a01b038d168a52875297859020855194850186528054855292830154958401959095529301549181019190915282519351915192945092914311801561211057508015155b1561219e5760008460200151436121279190612dbc565b90506000856080015161213c57600b54612140565b600a545b86604001516121528860800151611d53565b61215c9085612d9d565b6121669190612d9d565b6121709190612d7d565b905082612185670de0b6b3a764000083612d9d565b61218f9190612d7d565b6121999085612d65565b935050505b600064e8d4a510006121b0888a610631565b85516121bc9190612d9d565b6121c69190612d7d565b6020850151909150670de0b6b3a76400006121e18584612d9d565b6121eb9190612d7d565b6121f59190612dbc565b98975050505050505050565b6122096126e5565b6001600160a01b03811661226e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e0565b612277816127a7565b50565b60008281526007602090815260408083206001600160a01b038716845282528083208151606081018352815480825260018301549482019490945260029091015491810191909152919064e8d4a51000906122d6908590612d9d565b6122e09190612d7d565b90506000670de0b6b3a76400006005868154811061230e57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060050201600001548361232b9190612d9d565b6123359190612d7d565b905060008360200151826123499190612dbc565b9050600954816123599190612d65565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156123b857600080fd5b505afa1580156123cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f09190612bcb565b10156124fd576040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a0712d689082906370a082319060240160206040518083038186803b15801561245d57600080fd5b505afa158015612471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124959190612bcb565b6009546124a29085612d65565b6124ac9190612dbc565b6040518263ffffffff1660e01b81526004016124ca91815260200190565b600060405180830381600087803b1580156124e457600080fd5b505af11580156124f8573d6000803e3d6000fd5b505050505b8015612537576125376001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016888361273f565b600254604051634a9fefc760e01b81526001600160a01b0389811660048301526000921690634a9fefc79060240160206040518083038186803b15801561257d57600080fd5b505afa158015612591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b59190612aa6565b90506001600160a01b038116156126db57600f54600090612710906125de9061ffff1685612d9d565b6125e89190612d7d565b905080156126d9576040516340c10f1960e01b81526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b15801561265a57600080fd5b505af115801561266e573d6000803e3d6000fd5b5050600254604051632c83e50360e21b81526001600160a01b038d8116600483015260248201869052909116925063b20f940c9150604401600060405180830381600087803b1580156126c057600080fd5b505af11580156126d4573d6000803e3d6000fd5b505050505b505b5050505050505050565b6000546001600160a01b031633146115b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e0565b6040516001600160a01b0383166024820152604481018290526127a290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612835565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b038085166024830152831660448201526064810182905261282f9085906323b872dd60e01b9060840161276b565b50505050565b600061288a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129079092919063ffffffff16565b8051909150156127a257808060200190518101906128a89190612b75565b6127a25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106e0565b60606129168484600085612920565b90505b9392505050565b6060824710156129815760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106e0565b6001600160a01b0385163b6129d85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106e0565b600080866001600160a01b031685876040516129f49190612cdf565b60006040518083038185875af1925050503d8060008114612a31576040519150601f19603f3d011682016040523d82523d6000602084013e612a36565b606091505b5091509150612a46828286612a51565b979650505050505050565b60608315612a60575081612919565b825115612a705782518084602001fd5b8160405162461bcd60e51b81526004016106e09190612cfb565b600060208284031215612a9b578081fd5b813561066e81612e30565b600060208284031215612ab7578081fd5b815161066e81612e30565b60008060408385031215612ad4578081fd5b8235612adf81612e30565b91506020830135612aef81612e45565b809150509250929050565b60008060408385031215612b0c578182fd5b8235612b1781612e30565b946020939093013593505050565b600080600060608486031215612b39578081fd5b8335612b4481612e30565b95602085013595506040909401359392505050565b600060208284031215612b6a578081fd5b813561066e81612e45565b600060208284031215612b86578081fd5b815161066e81612e45565b600060208284031215612ba2578081fd5b813561ffff8116811461066e578182fd5b600060208284031215612bc4578081fd5b5035919050565b600060208284031215612bdc578081fd5b5051919050565b60008060408385031215612bf5578182fd5b823591506020830135612aef81612e30565b60008060008060808587031215612c1c578081fd5b843593506020850135612c2e81612e30565b92506040850135612c3e81612e45565b91506060850135612c4e81612e45565b939692955090935050565b60008060408385031215612c6b578182fd5b50508035926020909101359150565b600080600060608486031215612c8e578283fd5b83359250602084013591506040840135612ca781612e30565b809150509250925092565b600080600060608486031215612cc6578081fd5b83359250602084013591506040840135612ca781612e45565b60008251612cf1818460208701612dd3565b9190910192915050565b6020815260008251806020840152612d1a816040850160208701612dd3565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115612d7857612d78612e1a565b500190565b600082612d9857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612db757612db7612e1a565b500290565b600082821015612dce57612dce612e1a565b500390565b60005b83811015612dee578181015183820152602001612dd6565b8381111561282f5750506000910152565b6000600019821415612e1357612e13612e1a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461227757600080fd5b801515811461227757600080fdfea264697066735822122010993fe402957c8c236b2c952a6eb0f26621c97cdfba43777c89032d9ef0254e64736f6c634300080400330000000000000000000000006adea0efc8df952ac683680d860a1f4db69a9425000000000000000000000000386aa2538103fe5a69bec68158577c6cc15f3d5d000000000000000000000000c43815bdc7effeb98765ed6574bfb0f8beafef9c00000000000000000000000000000000000000000000000029a2241af62c0000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006adea0efc8df952ac683680d860a1f4db69a9425000000000000000000000000386aa2538103fe5a69bec68158577c6cc15f3d5d000000000000000000000000c43815bdc7effeb98765ed6574bfb0f8beafef9c00000000000000000000000000000000000000000000000029a2241af62c0000
-----Decoded View---------------
Arg [0] : _barToken (address): 0x6adea0efc8df952ac683680d860a1f4db69a9425
Arg [1] : _refContract (address): 0x386aa2538103fe5a69bec68158577c6cc15f3d5d
Arg [2] : _devAccount (address): 0xc43815bdc7effeb98765ed6574bfb0f8beafef9c
Arg [3] : _rewardPerBlock (uint256): 3000000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000006adea0efc8df952ac683680d860a1f4db69a9425
Arg [1] : 000000000000000000000000386aa2538103fe5a69bec68158577c6cc15f3d5d
Arg [2] : 000000000000000000000000c43815bdc7effeb98765ed6574bfb0f8beafef9c
Arg [3] : 00000000000000000000000000000000000000000000000029a2241af62c0000
Deployed ByteCode Sourcemap
25891:23015:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47139:273;;;;;;:::i;:::-;;:::i;:::-;;;15226:25:1;;;15214:2;15199:18;47139:273:0;;;;;;;;45704:1288;;;;;;:::i;:::-;;:::i;:::-;;32412:100;32489:8;:15;32412:100;;43282:251;;;;;;:::i;:::-;;:::i;28381:26::-;;;;;;:::i;:::-;;:::i;:::-;;;;16355:25:1;;;16411:2;16396:18;;16389:34;;;;16439:18;;;16432:34;;;;16497:2;16482:18;;16475:34;16553:14;16546:22;16540:3;16525:19;;16518:51;16342:3;16327:19;28381:26:0;16309:266:1;42544:632:0;;;;;;:::i;:::-;;:::i;28695:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6773:14:1;;6766:22;6748:41;;6736:2;6721:18;28695:41:0;6703:92:1;29882:48:0;;29926:4;29882:48;;40365:934;;;;;;:::i;:::-;;:::i;44284:277::-;;;;;;:::i;:::-;;:::i;29347:54::-;;29398:3;29347:54;;37333:1274;;;;;;:::i;:::-;;:::i;:::-;;;;;;14229:4:1;14271:3;14260:9;14256:19;14248:27;;14308:6;14302:13;14291:9;14284:32;14372:4;14364:6;14360:17;14354:24;14347:4;14336:9;14332:20;14325:54;14435:4;14427:6;14423:17;14417:24;14410:4;14399:9;14395:20;14388:54;14498:4;14490:6;14486:17;14480:24;14473:4;14462:9;14458:20;14451:54;14575:4;14567:6;14563:17;14557:24;14550:32;14543:40;14536:4;14525:9;14521:20;14514:70;14238:352;;;;;41440:788:0;;;;;;:::i;:::-;;:::i;29671:36::-;;;;;;;;;;;;14769:6:1;14757:19;;;14739:38;;14727:2;14712:18;29671:36:0;14694:89:1;36291:291:0;;;:::i;34093:820::-;;;;;;:::i;:::-;;:::i;28311:25::-;;;;;-1:-1:-1;;;;;28311:25:0;;;;;;-1:-1:-1;;;;;5596:32:1;;;5578:51;;5566:2;5551:18;28311:25:0;5533:102:1;30157:56:0;;30203:10;30157:56;;24956:103;;;:::i;29566:43::-;;;;;;28470:23;;;;;;:::i;:::-;;:::i;28871:29::-;;;;;;29783:41;;29820:4;29783:41;;29255:29;;;;;;43874:271;;;;;;:::i;:::-;;:::i;24308:87::-;24354:7;24381:6;-1:-1:-1;;;;;24381:6:0;24308:87;;38835:1361;;;;;;:::i;:::-;;:::i;28543:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15980:25:1;;;16036:2;16021:18;;16014:34;;;;16064:18;;;16057:34;15968:2;15953:18;28543:64:0;15935:162:1;29464:43:0;;;;;;29165:37;;;;;;45126:346;;;;;;:::i;:::-;;:::i;43589:235::-;;;;;;:::i;:::-;;:::i;44739:225::-;;;;;;:::i;:::-;;:::i;36731:419::-;;;;;;:::i;:::-;;:::i;28053:30::-;;;;;29014:37;;;;;;32966:822;;;;;;:::i;:::-;;:::i;30007:52::-;;30049:10;30007:52;;28132:31;;;;;-1:-1:-1;;;;;28132:31:0;;;28228:28;;;;;-1:-1:-1;;;;;28228:28:0;;;29831:42;;29870:3;29831:42;;35086:1108;;;;;;:::i;:::-;;:::i;25214:201::-;;;;;;:::i;:::-;;:::i;47139:273::-;47244:7;47290:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;47290:21:0;;;;;;;;;:37;;;30049:10;47345:28;;:59;;30049:10;47345:59;;;47376:10;47345:59;47338:66;47139:273;-1:-1:-1;;;;47139:273:0:o;45704:1288::-;32242:13;;-1:-1:-1;;;;;32242:13:0;32259:10;32242:27;32220:118;;;;-1:-1:-1;;;32220:118:0;;11021:2:1;32220:118:0;;;11003:21:1;11060:2;11040:18;;;11033:30;11099:34;11079:18;;;11072:62;-1:-1:-1;;;11150:18:1;;;11143:39;11199:19;;32220:118:0;;;;;;;;;21237:1:::1;21835:7;;:19;;21827:63;;;;-1:-1:-1::0;;;21827:63:0::1;;;;;;;:::i;:::-;21237:1;21968:7;:18:::0;-1:-1:-1;;;;;45881:19:0;::::2;45873:44;;;::::0;-1:-1:-1;;;45873:44:0;;12483:2:1;45873:44:0::2;::::0;::::2;12465:21:1::0;12522:2;12502:18;;;12495:30;-1:-1:-1;;;12541:18:1;;;12534:42;12593:18;;45873:44:0::2;12455:162:1::0;45873:44:0::2;45936:8;45945:4;45936:14;;;;;;-1:-1:-1::0;;;45936:14:0::2;;;;;;;;;;::::0;;;::::2;::::0;;;:24:::2;:14;::::0;;::::2;;:24;::::0;::::2;;45928:71;;;::::0;-1:-1:-1;;;45928:71:0;;10618:2:1;45928:71:0::2;::::0;::::2;10600:21:1::0;10657:2;10637:18;;;10630:30;10696:34;10676:18;;;10669:62;-1:-1:-1;;;10747:18:1;;;10740:32;10789:19;;45928:71:0::2;10590:224:1::0;45928:71:0::2;30049:10;46032:14;:33;;:91;;;;;30203:10;46086:14;:37;;46032:91;46010:165;;;::::0;-1:-1:-1;;;46010:165:0;;12130:2:1;46010:165:0::2;::::0;::::2;12112:21:1::0;12169:2;12149:18;;;12142:30;12208:26;12188:18;;;12181:54;12252:18;;46010:165:0::2;12102:174:1::0;46010:165:0::2;46188:20;46211:16;46222:4;46211:10;:16::i;:::-;46238:21;46262:14:::0;;;:8:::2;:14;::::0;;;;;;;-1:-1:-1;;;;;46262:21:0;::::2;::::0;;;;;;;46188:39;;-1:-1:-1;46321:31:0::2;46277:5:::0;46271:4;46321:18:::2;:31::i;:::-;46296:56;;46363:47;46382:5;46389:4;46395:14;46363:18;:47::i;:::-;46525:19:::0;;46457:11;;29926:4:::2;::::0;46525:19;30049:10:::2;::::0;46457:28:::2;::::0;46471:14;;46457:28:::2;:::i;:::-;46456:48;;;;:::i;:::-;46455:89;;;;:::i;:::-;46454:124;;;;:::i;:::-;46423:15;::::0;::::2;:155:::0;46743:11;;30049:10:::2;::::0;46743:28:::2;::::0;46757:14;;46743:28:::2;:::i;:::-;46742:61;;;;:::i;:::-;46666:11:::0;;30049:10:::2;::::0;46666:28:::2;::::0;46680:14;;46666:28:::2;:::i;:::-;46665:61;;;;:::i;:::-;46627:4;:22;;;:99;;;;:::i;:::-;:176;;;;:::i;:::-;46589:22;::::0;::::2;:214:::0;46814:8:::2;:14:::0;;46589:4;;46814:8;46823:4;;46814:14;::::2;;;-1:-1:-1::0;;;46814:14:0::2;;;;;;;;;;::::0;;;::::2;::::0;;;:21;;:14:::2;::::0;;;::::2;;:21:::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;;;::::2;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;-1:-1:-1;;46814:21:0::2;::::0;::::2;;::::0;;;::::2;::::0;;;46846:14;;;:8:::2;:14:::0;;;;;-1:-1:-1;;;;;46846:21:0;::::2;::::0;;;;;;;;;;:37;;::::2;:54:::0;;;46918:66;;15980:25:1;;;16021:18;;;16014:34;;;16064:18;;;16057:34;;;46846:21:0;;46918:66:::2;::::0;15953:18:1;46918:66:0::2;;;;;;;-1:-1:-1::0;;21193:1:0::1;22147:22:::0;;-1:-1:-1;;;;45704:1288:0:o;43282:251::-;24194:13;:11;:13::i;:::-;43395:14:::1;::::0;;43420:32;;;;43470:55:::1;::::0;;15699:25:1;;;15755:2;15740:18;;15733:34;;;43470:55:0::1;::::0;15672:18:1;43470:55:0::1;;;;;;;;24218:1;43282:251:::0;:::o;28381:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28381:26:0;;;;;;;:::o;42544:632::-;24194:13;:11;:13::i;:::-;42742:1:::1;42723:16;:20;:61;;;;;42783:1;42764:16;:20;42723:61;:162;;;;-1:-1:-1::0;29398:3:0::1;42805:35;42824:16:::0;42805;:35:::1;:::i;:::-;:80;42723:162;42701:225;;;::::0;-1:-1:-1;;;42701:225:0;;9564:2:1;42701:225:0::1;::::0;::::1;9546:21:1::0;9603:2;9583:18;;;9576:30;-1:-1:-1;;;9622:18:1;;;9615:43;9675:18;;42701:225:0::1;9536:163:1::0;42701:225:0::1;42943:11;42939:61;;;42971:17;:15;:17::i;:::-;43012:20;:39:::0;;;43062:20:::1;:39:::0;;;43119:49:::1;::::0;;15699:25:1;;;15755:2;15740:18;;15733:34;;;43119:49:0::1;::::0;15672:18:1;43119:49:0::1;;;;;;;42544:632:::0;;;:::o;40365:934::-;21237:1;21835:7;;:19;;21827:63;;;;-1:-1:-1;;;21827:63:0;;;;;;;:::i;:::-;21237:1;21968:7;:18;40447:20:::1;40470:16;40481:4:::0;40470:10:::1;:16::i;:::-;40497:21;40521:14:::0;;;:8:::1;:14;::::0;;;;;;;40536:10:::1;40521:26:::0;;;;;;;40568:11;;40447:39;;-1:-1:-1;40521:26:0;40568:22;-1:-1:-1;40568:22:0::1;40560:57;;;::::0;-1:-1:-1;;;40560:57:0;;9906:2:1;40560:57:0::1;::::0;::::1;9888:21:1::0;9945:2;9925:18;;;9918:30;-1:-1:-1;;;9964:18:1;;;9957:52;10026:18;;40560:57:0::1;9878:172:1::0;40560:57:0::1;40630:18;40651:36;40670:10;40682:4;40651:18;:36::i;:::-;40630:57;;40700:48;40719:10;40731:4;40737:10;40700:18;:48::i;:::-;40765:11:::0;;40761:201:::1;;40808:7;40793:4;:11;;;:22;;;;;;;:::i;:::-;;;;;;;;40851:8;-1:-1:-1::0;;;;;40834:25:0::1;:7;40842:4;40834:13;;;;;;-1:-1:-1::0;;;40834:13:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;40834:13:0::1;:25;40830:56;;;40879:7;40861:14;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;40830:56:0::1;40903:47;40930:10;40942:7;40903;40911:4;40903:13;;;;;;-1:-1:-1::0;;;40903:13:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;40903:13:0::1;::::0;:47;:26:::1;:47::i;:::-;41072:19:::0;;41008:11;;29926:4:::1;::::0;41072:19;30049:10:::1;::::0;41008:24:::1;::::0;41022:10;;41008:24:::1;:::i;:::-;41007:44;;;;:::i;:::-;41006:85;;;;:::i;:::-;41005:120;;;;:::i;:::-;40974:15;::::0;::::1;:151:::0;30049:10:::1;41186:20;41196:10:::0;41186:7;:20:::1;:::i;:::-;41185:53;;;;:::i;:::-;41136:8;41145:4;41136:14;;;;;;-1:-1:-1::0;;;41136:14:0::1;;;;;;;;;;;;;;;;;;;:32;;;:102;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;41256:35:0::1;::::0;15226:25:1;;;41277:4:0;;41265:10:::1;::::0;41256:35:::1;::::0;15214:2:1;15199:18;41256:35:0::1;;;;;;;;-1:-1:-1::0;;21193:1:0;22147:22;;-1:-1:-1;;;40365:934:0:o;44284:277::-;24194:13;:11;:13::i;:::-;-1:-1:-1;;;;;44369:25:0;::::1;44361:57;;;::::0;-1:-1:-1;;;44361:57:0;;13941:2:1;44361:57:0::1;::::0;::::1;13923:21:1::0;13980:2;13960:18;;;13953:30;-1:-1:-1;;;13999:18:1;;;13992:49;14058:18;;44361:57:0::1;13913:169:1::0;44361:57:0::1;44450:10;::::0;;-1:-1:-1;;;;;44471:24:0;;::::1;-1:-1:-1::0;;;;;;44471:24:0;::::1;::::0;::::1;::::0;;;44513:40:::1;::::0;;44450:10;;;::::1;5852:34:1::0;;;5917:2;5902:18;;5895:43;;;;44513:40:0::1;::::0;5787:18:1;44513:40:0::1;5769:175:1::0;37333:1274:0;37383:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37383:20:0;37423:8;37432:4;37423:14;;;;;;-1:-1:-1;;;37423:14:0;;;;;;;;;;;;;;;;;;37416:21;;;;;;;;37423:14;;;;;;;37416:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37452:12:0;:35;37448:1152;;;37523:22;;;;37605:14;;;;37504:16;;37605:64;;37647:22;;37605:64;;;37622:22;;37605:64;37560:124;;37716:1;37705:8;:12;:35;;;;;37739:1;37721:15;:19;37705:35;37701:630;;;37761:18;37797:4;:20;;;37782:12;:35;;;;:::i;:::-;37761:56;;37836:17;37961:15;37942:4;:15;;;37891:27;37903:4;:14;;;37891:11;:27::i;:::-;37857:61;;:10;:61;:::i;:::-;:100;;;;:::i;:::-;37856:120;;;;:::i;:::-;38054:24;;-1:-1:-1;;;38054:24:0;;;;;15226:25:1;;;37836:140:0;;-1:-1:-1;38054:8:0;-1:-1:-1;;;;;38054:13:0;;;;15199:18:1;;38054:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38111:10:0;;-1:-1:-1;;;;;38097:8:0;:13;;;-1:-1:-1;38097:13:0;;-1:-1:-1;38111:10:0;38123:14;38135:2;38123:9;:14;:::i;:::-;38097:41;;-1:-1:-1;;;;;;38097:41:0;;;;;;;-1:-1:-1;;;;;6521:32:1;;;38097:41:0;;;6503:51:1;6570:18;;;6563:34;6476:18;;38097:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38307:8;29926:4;38253:9;:29;;;;:::i;:::-;38252:63;;;;:::i;:::-;38208:107;;:4;;:107;;;;;:::i;:::-;;;-1:-1:-1;;;37701:630:0;38368:12;38345:20;;;:35;38395:8;:14;;38345:4;;38395:8;38404:4;;38395:14;;;;-1:-1:-1;;;38395:14:0;;;;;;;;;;;;;;;;;;:21;;:14;;;;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38395:21:0;;;;;;;;;;;38488:20;;;;38554:19;;38436:152;;15980:25:1;;;16021:18;;;16014:34;;;16064:18;;;16057:34;;;;38465:4:0;;38436:152;;15953:18:1;38436:152:0;;;;;;;37448:1152;;;37333:1274;;;:::o;41440:788::-;21237:1;21835:7;;:19;;21827:63;;;;-1:-1:-1;;;21827:63:0;;;;;;;:::i;:::-;21237:1;21968:7;:18;;;;41514:21:::1;41538:8;41547:4;41538:14;;;;;;-1:-1:-1::0;;;41538:14:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;41587;;;:8:::1;:14:::0;;;;;;41602:10:::1;41587:26:::0;;;;;;;41643:11;;41665:15;;;-1:-1:-1;41691:15:0;::::1;:19:::0;;;41538:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;41587:26:0;41538:14;30049:10:::1;::::0;41768:36:::1;::::0;41596:4;41768:18:::1;:36::i;:::-;41746:58;::::0;:6;:58:::1;:::i;:::-;41745:78;;;;:::i;:::-;41721:102;;41884:13;41859:4;:22;;;:38;:109;;41967:1;41859:109;;;41938:13;41913:4;:22;;;:38;;;;:::i;:::-;41834:4;:22;;:134;;;;42000:8;-1:-1:-1::0;;;;;41983:25:0::1;:7;41991:4;41983:13;;;;;;-1:-1:-1::0;;;41983:13:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;41983:13:0::1;:25;41979:55;;;42028:6;42010:14;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;41979:55:0::1;42115:46;42142:10;42154:6;42115:7;42123:4;42115:13;;;;;;-1:-1:-1::0;;;42115:13:0::1;;;;;;;;:46;42177:43;::::0;15226:25:1;;;42207:4:0;;42195:10:::1;::::0;42177:43:::1;::::0;15214:2:1;15199:18;42177:43:0::1;15181:76:1::0;36291:291:0;36353:8;:15;36336:14;36379:196;36407:6;36401:3;:12;36379:196;;;36437:20;36460:8;36469:3;36460:13;;;;;;-1:-1:-1;;;36460:13:0;;;;;;;;;;;;;;;;;;36437:36;;;;;;;;36460:13;;;;;;;36437:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36492:20:0;36488:76;;36533:15;36544:3;36533:10;:15::i;:::-;;36488:76;-1:-1:-1;36415:5:0;;;:::i;:::-;;;36379:196;;;;36291:291;:::o;34093:820::-;24194:13;:11;:13::i;:::-;34342:16:::1;34353:4;34342:10;:16::i;:::-;;34375:11;34371:61;;;34403:17;:15;:17::i;:::-;34448:8;34457:4;34448:14;;;;;;-1:-1:-1::0;;;34448:14:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;:24:::1;:14;::::0;;::::1;;:24;::::0;::::1;;34444:370;;;34604:8;34613:4;34604:14;;;;;;-1:-1:-1::0;;;34604:14:0::1;;;;;;;;;;;;;;;;;;;:25;;;34573:11;34531:22;;:53;;;;:::i;:::-;:98;;;;:::i;:::-;34489:22;:140:::0;34444:370:::1;;;34777:8;34786:4;34777:14;;;;;;-1:-1:-1::0;;;34777:14:0::1;;;;;;;;;;;;;;;;;;;:25;;;34746:11;34704:22;;:53;;;;:::i;:::-;:98;;;;:::i;:::-;34662:22;:140:::0;34444:370:::1;34852:11;34824:8;34833:4;34824:14;;;;;;-1:-1:-1::0;;;34824:14:0::1;;;;;;;;;;;;;;;;;;;:25;;:39;;;;34887:4;34879:26;34893:11;34879:26;;;;15226:25:1::0;;15214:2;15199:18;;15181:76;34879:26:0::1;;;;;;;;34093:820:::0;;;:::o;24956:103::-;24194:13;:11;:13::i;:::-;25021:30:::1;25048:1;25021:18;:30::i;:::-;24956:103::o:0;28470:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28470:23:0;;-1:-1:-1;28470:23:0;:::o;43874:271::-;24194:13;:11;:13::i;:::-;-1:-1:-1;;;;;43966:35:0;::::1;43958:64;;;::::0;-1:-1:-1;;;43958:64:0;;8466:2:1;43958:64:0::1;::::0;::::1;8448:21:1::0;8505:2;8485:18;;;8478:30;-1:-1:-1;;;8524:18:1;;;8517:46;8580:18;;43958:64:0::1;8438:166:1::0;43958:64:0::1;44064:11;::::0;44038:62:::1;::::0;;-1:-1:-1;;;;;44064:11:0;;::::1;5852:34:1::0;;5922:15;;;5917:2;5902:18;;5895:43;44038:62:0::1;::::0;5787:18:1;44038:62:0::1;;;;;;;44111:11;:26:::0;;-1:-1:-1;;;;;;44111:26:0::1;-1:-1:-1::0;;;;;44111:26:0;;;::::1;::::0;;;::::1;::::0;;43874:271::o;38835:1361::-;21237:1;21835:7;;:19;;21827:63;;;;-1:-1:-1;;;21827:63:0;;;;;;;:::i;:::-;21237:1;21968:7;:18;38969:20:::1;38992:16;39003:4:::0;38992:10:::1;:16::i;:::-;39019:21;39043:14:::0;;;:8:::1;:14;::::0;;;;;;;39058:10:::1;39043:26:::0;;;;;;;39128:11:::1;::::0;38969:39;;-1:-1:-1;39043:26:0;-1:-1:-1;;;;;39128:11:0::1;:26;39155:12;22941:10:::0;;22861:98;39155:12:::1;39128:51;::::0;-1:-1:-1;;;;;;39128:51:0::1;::::0;;;;;;-1:-1:-1;;;;;5870:15:1;;;39128:51:0::1;::::0;::::1;5852:34:1::0;5922:15;;;5902:18;;;5895:43;5787:18;;39128:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39200:4;:14;;;:39;;;-1:-1:-1::0;39228:10:0::1;39218:21;::::0;;;:9:::1;:21;::::0;;;;;::::1;;39200:39;39192:69;;;::::0;-1:-1:-1;;;39192:69:0;;9218:2:1;39192:69:0::1;::::0;::::1;9200:21:1::0;9257:2;9237:18;;;9230:30;-1:-1:-1;;;9276:18:1;;;9269:47;9333:18;;39192:69:0::1;9190:167:1::0;39192:69:0::1;39274:18;39295:36;39314:10;39326:4;39295:18;:36::i;:::-;39348:11:::0;;39274:57;;-1:-1:-1;39348:15:0;39344:96:::1;;39380:48;39399:10;39411:4;39417:10;39380:18;:48::i;:::-;39456:11:::0;;39452:489:::1;;39484:14;39501:7;39509:4;39501:13;;;;;;-1:-1:-1::0;;;39501:13:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;:38:::1;::::0;-1:-1:-1;;;39501:38:0;;39533:4:::1;39501:38;::::0;::::1;5578:51:1::0;-1:-1:-1;;;;;39501:13:0;;::::1;::::0;:23:::1;::::0;5551:18:1;;39501:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39484:55;;39554:66;39585:10;39605:4;39612:7;39554;39562:4;39554:13;;;;;;-1:-1:-1::0;;;39554:13:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;39554:13:0::1;::::0;:66;;:30:::1;:66::i;:::-;39686:6;39645:7;39653:4;39645:13;;;;;;-1:-1:-1::0;;;39645:13:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;:38:::1;::::0;-1:-1:-1;;;39645:38:0;;39677:4:::1;39645:38;::::0;::::1;5578:51:1::0;-1:-1:-1;;;;;39645:13:0;;::::1;::::0;:23:::1;::::0;5551:18:1;;39645:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;39635:57;;39722:7;39707:4;:11;;;:22;;;;;;;:::i;:::-;;;;;;;;39767:8;-1:-1:-1::0;;;;;39750:25:0::1;:7;39758:4;39750:13;;;;;;-1:-1:-1::0;;;39750:13:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;39750:13:0::1;:25;39746:56;;;39795:7;39777:14;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;39746:56:0::1;30049:10;39890:20;39900:10:::0;39890:7;:20:::1;:::i;:::-;39889:40;;;;:::i;:::-;39863:4;:22;;:66;;;;;;;:::i;:::-;::::0;;-1:-1:-1;;39452:489:0::1;40051:19:::0;;39987:11;;29926:4:::1;::::0;40051:19;30049:10:::1;::::0;39987:24:::1;::::0;40001:10;;39987:24:::1;:::i;:::-;39986:44;;;;:::i;:::-;39985:85;;;;:::i;:::-;39984:120;;;;:::i;:::-;39953:4;:15;;:151;;;;40132:4;40115:8;40124:4;40115:14;;;;;;-1:-1:-1::0;;;40115:14:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;:21;;:14:::1;::::0;;;::::1;;:21:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;40115:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40154:34;;15226:25:1;;;40174:4:0;;40162:10:::1;::::0;40154:34:::1;::::0;15199:18:1;40154:34:0::1;;;;;;;-1:-1:-1::0;;21193:1:0;22147:22;;-1:-1:-1;;;;38835:1361:0:o;45126:346::-;24194:13;:11;:13::i;:::-;-1:-1:-1;;;;;45234:31:0;::::1;::::0;;::::1;::::0;:86:::1;;-1:-1:-1::0;45307:13:0::1;::::0;-1:-1:-1;;;;;45286:34:0;;::::1;45307:13:::0;::::1;45286:34;;45234:86;45212:152;;;::::0;-1:-1:-1;;;45212:152:0;;8466:2:1;45212:152:0::1;::::0;::::1;8448:21:1::0;8505:2;8485:18;;;8478:30;-1:-1:-1;;;8524:18:1;;;8517:46;8580:18;;45212:152:0::1;8438:166:1::0;45212:152:0::1;45377:13;:33:::0;;-1:-1:-1;;;;;;45377:33:0::1;-1:-1:-1::0;;;;;45377:33:0;::::1;::::0;;::::1;::::0;;;45426:38:::1;::::0;::::1;::::0;-1:-1:-1;;45426:38:0::1;45126:346:::0;:::o;43589:235::-;24194:13;:11;:13::i;:::-;29820:4:::1;43675:22;::::0;::::1;;;43667:47;;;::::0;-1:-1:-1;;;43667:47:0;;11431:2:1;43667:47:0::1;::::0;::::1;11413:21:1::0;11470:2;11450:18;;;11443:30;-1:-1:-1;;;11489:18:1;;;11482:42;11541:18;;43667:47:0::1;11403:162:1::0;43667:47:0::1;43753:16;::::0;43730:49:::1;::::0;;43753:16:::1;::::0;;::::1;14983:34:1::0;;15053:15;;;15048:2;15033:18;;15026:43;43730:49:0::1;::::0;14931:18:1;43730:49:0::1;;;;;;;43790:16;:26:::0;;-1:-1:-1;;43790:26:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;43589:235::o;44739:225::-;24194:13;:11;:13::i;:::-;-1:-1:-1;;;;;44832:19:0;::::1;44824:44;;;::::0;-1:-1:-1;;;44824:44:0;;12483:2:1;44824:44:0::1;::::0;::::1;12465:21:1::0;12522:2;12502:18;;;12495:30;-1:-1:-1;;;12541:18:1;;;12534:42;12593:18;;44824:44:0::1;12455:162:1::0;44824:44:0::1;-1:-1:-1::0;;;;;44881:16:0;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;;;:27;;-1:-1:-1;;44881:27:0::1;::::0;::::1;;::::0;;::::1;::::0;;;44924:32;;6748:41:1;;;44924:32:0::1;::::0;6721:18:1;44924:32:0::1;;;;;;;44739:225:::0;;:::o;36731:419::-;36817:14;36853:10;36849:294;;;29398:3;36924:20;;36907:14;;:37;;;;:::i;:::-;36906:83;;;;:::i;:::-;36880:109;37333:1274;-1:-1:-1;;37333:1274:0:o;36849:294::-;29398:3;37066:20;;37049:14;;:37;;;;:::i;32966:822::-;24194:13;:11;:13::i;:::-;33133:33:::1;::::0;-1:-1:-1;;;33133:33:0;;33160:4:::1;33133:33;::::0;::::1;5578:51:1::0;33170:1:0::1;::::0;-1:-1:-1;;;;;33133:18:0;::::1;::::0;::::1;::::0;5551::1;;33133:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;33125:68;;;::::0;-1:-1:-1;;;33125:68:0;;12824:2:1;33125:68:0::1;::::0;::::1;12806:21:1::0;12863:2;12843:18;;;12836:30;-1:-1:-1;;;12882:18:1;;;12875:47;12939:18;;33125:68:0::1;12796:167:1::0;33125:68:0::1;33210:11;33206:61;;;33238:17;:15;:17::i;:::-;33283:10;33279:106;;;33321:11;33295:22;;:37;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;33279:106:0::1;::::0;-1:-1:-1;33279:106:0::1;;33374:11;33348:22;;:37;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;33279:106:0::1;33398:7;:22:::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;33398:22:0::1;-1:-1:-1::0;;;;;33398:22:0;::::1;::::0;;::::1;::::0;;;33461:230:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;33461:230:0;;;33548:12:::1;33398:22;33461:230:::0;::::1;::::0;;;;;;;;;;;;;;;;::::1;;::::0;;;;;;33433:8:::1;:269:::0;;;;::::1;::::0;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33433:269:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33726:14;;:18:::1;::::0;33398:22;33726:18:::1;:::i;:::-;33718:62;::::0;;15430:25:1;;;15498:14;;15491:22;15486:2;15471:18;;15464:50;33718:62:0::1;::::0;15403:18:1;33718:62:0::1;;;;;;;32966:822:::0;;;;:::o;35086:1108::-;35185:7;35210:20;35233:8;35242:4;35233:14;;;;;;-1:-1:-1;;;35233:14:0;;;;;;;;;;;;;;;;;35210:37;;;;;;;;35233:14;;;;;;;35210:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35281:14;;;:8;:14;;;;;-1:-1:-1;;;;;35281:21:0;;;;;;;;;;35258:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35338:19;;35387:22;;35441:20;;35210:37;;-1:-1:-1;35258:44:0;35338:19;35426:12;:35;:52;;;;-1:-1:-1;35465:13:0;;;35426:52;35422:523;;;35495:18;35531:4;:20;;;35516:12;:35;;;;:::i;:::-;35495:56;;35568:17;35725:4;:14;;;:114;;35817:22;;35725:114;;;35767:22;;35725:114;35666:4;:15;;;35619:27;35631:4;:14;;;35619:11;:27::i;:::-;35589:57;;:10;:57;:::i;:::-;:92;;;;:::i;:::-;35588:270;;;;:::i;:::-;35568:290;-1:-1:-1;35925:8:0;35892:29;29926:4;35568:290;35892:29;:::i;:::-;35891:42;;;;:::i;:::-;35873:60;;;;:::i;:::-;;;35422:523;;;35957:21;30049:10;36009:31;36028:5;36035:4;36009:18;:31::i;:::-;35982:11;;:58;;;;:::i;:::-;35981:78;;;;:::i;:::-;36171:15;;;;35957:102;;-1:-1:-1;29926:4:0;36091:30;36107:14;35957:102;36091:30;:::i;:::-;36090:65;;;;:::i;:::-;:96;;;;:::i;:::-;36070:116;35086:1108;-1:-1:-1;;;;;;;;35086:1108:0:o;25214:201::-;24194:13;:11;:13::i;:::-;-1:-1:-1;;;;;25303:22:0;::::1;25295:73;;;::::0;-1:-1:-1;;;25295:73:0;;8059:2:1;25295:73:0::1;::::0;::::1;8041:21:1::0;8098:2;8078:18;;;8071:30;8137:34;8117:18;;;8110:62;-1:-1:-1;;;8188:18:1;;;8181:36;8234:19;;25295:73:0::1;8031:228:1::0;25295:73:0::1;25379:28;25398:8;25379:18;:28::i;:::-;25214:201:::0;:::o;47672:1231::-;47809:20;47832:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;47832:21:0;;;;;;;;;47809:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;30049:10;;47891:30;;47905:16;;47891:30;:::i;:::-;47890:63;;;;:::i;:::-;47866:87;;47964:14;29926:4;47998:8;48007:4;47998:14;;;;;;-1:-1:-1;;;47998:14:0;;;;;;;;;;;;;;;;;;;:29;;;47982:13;:45;;;;:::i;:::-;47981:80;;;;:::i;:::-;47964:97;;48072:15;48099:4;:15;;;48090:6;:24;;;;:::i;:::-;48072:42;;48249:14;;48239:7;:24;;;;:::i;:::-;48203:33;;-1:-1:-1;;;48203:33:0;;48230:4;48203:33;;;5578:51:1;48203:8:0;-1:-1:-1;;;;;48203:18:0;;;;5551::1;;48203:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;48199:186;;;48337:33;;-1:-1:-1;;;48337:33:0;;48364:4;48337:33;;;5578:51:1;48278:8:0;-1:-1:-1;;;;;48278:13:0;;;;;;48337:18;;5551::1;;48337:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48320:14;;48310:24;;:7;:24;:::i;:::-;:60;;;;:::i;:::-;48278:107;;;;;;;;;;;;;15226:25:1;;15214:2;15199:18;;15181:76;48278:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48199:186;48402:11;;48398:81;;48430:37;-1:-1:-1;;;;;48430:8:0;:21;48452:5;48459:7;48430:21;:37::i;:::-;48568:11;;:30;;-1:-1:-1;;;48568:30:0;;-1:-1:-1;;;;;5596:32:1;;;48568:30:0;;;5578:51:1;48549:16:0;;48568:11;;:23;;5551:18:1;;48568:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48549:49;-1:-1:-1;;;;;;48613:22:0;;;48609:287;;48683:16;;48652:17;;29870:3;;48673:26;;48672:44;48683:16;48673:7;:26;:::i;:::-;48672:44;;;;:::i;:::-;48652:64;-1:-1:-1;48735:13:0;;48731:154;;48769:34;;-1:-1:-1;;;48769:34:0;;-1:-1:-1;;;;;6521:32:1;;;48769:34:0;;;6503:51:1;6570:18;;;6563:34;;;48769:8:0;:13;;;;6476:18:1;;48769:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48822:11:0;;:47;;-1:-1:-1;;;48822:47:0;;-1:-1:-1;;;;;6521:32:1;;;48822:47:0;;;6503:51:1;6570:18;;;6563:34;;;48822:11:0;;;;-1:-1:-1;48822:29:0;;-1:-1:-1;6476:18:1;;48822:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48731:154;48609:287;;47672:1231;;;;;;;;:::o;24473:132::-;24354:7;24381:6;-1:-1:-1;;;;;24381:6:0;22941:10;24537:23;24529:68;;;;-1:-1:-1;;;24529:68:0;;10257:2:1;24529:68:0;;;10239:21:1;;;10276:18;;;10269:30;10335:34;10315:18;;;10308:62;10387:18;;24529:68:0;10229:182:1;15637:211:0;15781:58;;-1:-1:-1;;;;;6521:32:1;;15781:58:0;;;6503:51:1;6570:18;;;6563:34;;;15754:86:0;;15774:5;;-1:-1:-1;;;15804:23:0;6476:18:1;;15781:58:0;;;;-1:-1:-1;;15781:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;15781:58:0;-1:-1:-1;;;;;;15781:58:0;;;;;;;;;;15754:19;:86::i;:::-;15637:211;;;:::o;25575:191::-;25649:16;25668:6;;-1:-1:-1;;;;;25685:17:0;;;-1:-1:-1;;;;;;25685:17:0;;;;;;25718:40;;25668:6;;;;;;;25718:40;;25649:16;25718:40;25575:191;;:::o;15856:248::-;16027:68;;-1:-1:-1;;;;;6207:15:1;;;16027:68:0;;;6189:34:1;6259:15;;6239:18;;;6232:43;6291:18;;;6284:34;;;16000:96:0;;16020:5;;-1:-1:-1;;;16050:27:0;6124:18:1;;16027:68:0;6106:218:1;16000:96:0;15856:248;;;;:::o;18704:716::-;19128:23;19154:69;19182:4;19154:69;;;;;;;;;;;;;;;;;19162:5;-1:-1:-1;;;;;19154:27:0;;;:69;;;;;:::i;:::-;19238:17;;19128:95;;-1:-1:-1;19238:21:0;19234:179;;19335:10;19324:30;;;;;;;;;;;;:::i;:::-;19316:85;;;;-1:-1:-1;;;19316:85:0;;13170:2:1;19316:85:0;;;13152:21:1;13209:2;13189:18;;;13182:30;13248:34;13228:18;;;13221:62;-1:-1:-1;;;13299:18:1;;;13292:40;13349:19;;19316:85:0;13142:232:1;4896:229:0;5033:12;5065:52;5087:6;5095:4;5101:1;5104:12;5065:21;:52::i;:::-;5058:59;;4896:229;;;;;;:::o;6016:510::-;6186:12;6244:5;6219:21;:30;;6211:81;;;;-1:-1:-1;;;6211:81:0;;8811:2:1;6211:81:0;;;8793:21:1;8850:2;8830:18;;;8823:30;8889:34;8869:18;;;8862:62;-1:-1:-1;;;8940:18:1;;;8933:36;8986:19;;6211:81:0;8783:228:1;6211:81:0;-1:-1:-1;;;;;2446:19:0;;;6303:60;;;;-1:-1:-1;;;6303:60:0;;11772:2:1;6303:60:0;;;11754:21:1;11811:2;11791:18;;;11784:30;11850:31;11830:18;;;11823:59;11899:18;;6303:60:0;11744:179:1;6303:60:0;6377:12;6391:23;6418:6;-1:-1:-1;;;;;6418:11:0;6437:5;6444:4;6418:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6376:73;;;;6467:51;6484:7;6493:10;6505:12;6467:16;:51::i;:::-;6460:58;6016:510;-1:-1:-1;;;;;;;6016:510:0:o;8702:762::-;8852:12;8881:7;8877:580;;;-1:-1:-1;8912:10:0;8905:17;;8877:580;9026:17;;:21;9022:424;;9274:10;9268:17;9335:15;9322:10;9318:2;9314:19;9307:44;9222:148;9417:12;9410:20;;-1:-1:-1;;;9410:20:0;;;;;;;;:::i;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:392::-;607:6;615;668:2;656:9;647:7;643:23;639:32;636:2;;;689:6;681;674:22;636:2;733:9;720:23;752:31;777:5;752:31;:::i;:::-;802:5;-1:-1:-1;859:2:1;844:18;;831:32;872:30;831:32;872:30;:::i;:::-;921:7;911:17;;;626:308;;;;;:::o;939:325::-;1007:6;1015;1068:2;1056:9;1047:7;1043:23;1039:32;1036:2;;;1089:6;1081;1074:22;1036:2;1133:9;1120:23;1152:31;1177:5;1152:31;:::i;:::-;1202:5;1254:2;1239:18;;;;1226:32;;-1:-1:-1;;;1026:238:1:o;1269:393::-;1346:6;1354;1362;1415:2;1403:9;1394:7;1390:23;1386:32;1383:2;;;1436:6;1428;1421:22;1383:2;1480:9;1467:23;1499:31;1524:5;1499:31;:::i;:::-;1549:5;1601:2;1586:18;;1573:32;;-1:-1:-1;1652:2:1;1637:18;;;1624:32;;1373:289;-1:-1:-1;;;1373:289:1:o;1667:251::-;1723:6;1776:2;1764:9;1755:7;1751:23;1747:32;1744:2;;;1797:6;1789;1782:22;1744:2;1841:9;1828:23;1860:28;1882:5;1860:28;:::i;1923:255::-;1990:6;2043:2;2031:9;2022:7;2018:23;2014:32;2011:2;;;2064:6;2056;2049:22;2011:2;2101:9;2095:16;2120:28;2142:5;2120:28;:::i;2464:292::-;2522:6;2575:2;2563:9;2554:7;2550:23;2546:32;2543:2;;;2596:6;2588;2581:22;2543:2;2640:9;2627:23;2690:6;2683:5;2679:18;2672:5;2669:29;2659:2;;2717:6;2709;2702:22;2761:190;2820:6;2873:2;2861:9;2852:7;2848:23;2844:32;2841:2;;;2894:6;2886;2879:22;2841:2;-1:-1:-1;2922:23:1;;2831:120;-1:-1:-1;2831:120:1:o;2956:194::-;3026:6;3079:2;3067:9;3058:7;3054:23;3050:32;3047:2;;;3100:6;3092;3085:22;3047:2;-1:-1:-1;3128:16:1;;3037:113;-1:-1:-1;3037:113:1:o;3155:325::-;3223:6;3231;3284:2;3272:9;3263:7;3259:23;3255:32;3252:2;;;3305:6;3297;3290:22;3252:2;3346:9;3333:23;3323:33;;3406:2;3395:9;3391:18;3378:32;3419:31;3444:5;3419:31;:::i;3485:610::-;3579:6;3587;3595;3603;3656:3;3644:9;3635:7;3631:23;3627:33;3624:2;;;3678:6;3670;3663:22;3624:2;3719:9;3706:23;3696:33;;3779:2;3768:9;3764:18;3751:32;3792:31;3817:5;3792:31;:::i;:::-;3842:5;-1:-1:-1;3899:2:1;3884:18;;3871:32;3912:30;3871:32;3912:30;:::i;:::-;3961:7;-1:-1:-1;4020:2:1;4005:18;;3992:32;4033:30;3992:32;4033:30;:::i;:::-;3614:481;;;;-1:-1:-1;3614:481:1;;-1:-1:-1;;3614:481:1:o;4100:258::-;4168:6;4176;4229:2;4217:9;4208:7;4204:23;4200:32;4197:2;;;4250:6;4242;4235:22;4197:2;-1:-1:-1;;4278:23:1;;;4348:2;4333:18;;;4320:32;;-1:-1:-1;4187:171:1:o;4363:393::-;4440:6;4448;4456;4509:2;4497:9;4488:7;4484:23;4480:32;4477:2;;;4530:6;4522;4515:22;4477:2;4571:9;4558:23;4548:33;;4628:2;4617:9;4613:18;4600:32;4590:42;;4682:2;4671:9;4667:18;4654:32;4695:31;4720:5;4695:31;:::i;:::-;4745:5;4735:15;;;4467:289;;;;;:::o;4761:387::-;4835:6;4843;4851;4904:2;4892:9;4883:7;4879:23;4875:32;4872:2;;;4925:6;4917;4910:22;4872:2;4966:9;4953:23;4943:33;;5023:2;5012:9;5008:18;4995:32;4985:42;;5077:2;5066:9;5062:18;5049:32;5090:28;5112:5;5090:28;:::i;5153:274::-;5282:3;5320:6;5314:13;5336:53;5382:6;5377:3;5370:4;5362:6;5358:17;5336:53;:::i;:::-;5405:16;;;;;5290:137;-1:-1:-1;;5290:137:1:o;7469:383::-;7618:2;7607:9;7600:21;7581:4;7650:6;7644:13;7693:6;7688:2;7677:9;7673:18;7666:34;7709:66;7768:6;7763:2;7752:9;7748:18;7743:2;7735:6;7731:15;7709:66;:::i;:::-;7836:2;7815:15;-1:-1:-1;;7811:29:1;7796:45;;;;7843:2;7792:54;;7590:262;-1:-1:-1;;7590:262:1:o;13379:355::-;13581:2;13563:21;;;13620:2;13600:18;;;13593:30;13659:33;13654:2;13639:18;;13632:61;13725:2;13710:18;;13553:181::o;16580:128::-;16620:3;16651:1;16647:6;16644:1;16641:13;16638:2;;;16657:18;;:::i;:::-;-1:-1:-1;16693:9:1;;16628:80::o;16713:217::-;16753:1;16779;16769:2;;-1:-1:-1;;;16804:31:1;;16858:4;16855:1;16848:15;16886:4;16811:1;16876:15;16769:2;-1:-1:-1;16915:9:1;;16759:171::o;16935:168::-;16975:7;17041:1;17037;17033:6;17029:14;17026:1;17023:21;17018:1;17011:9;17004:17;17000:45;16997:2;;;17048:18;;:::i;:::-;-1:-1:-1;17088:9:1;;16987:116::o;17108:125::-;17148:4;17176:1;17173;17170:8;17167:2;;;17181:18;;:::i;:::-;-1:-1:-1;17218:9:1;;17157:76::o;17238:258::-;17310:1;17320:113;17334:6;17331:1;17328:13;17320:113;;;17410:11;;;17404:18;17391:11;;;17384:39;17356:2;17349:10;17320:113;;;17451:6;17448:1;17445:13;17442:2;;;-1:-1:-1;;17486:1:1;17468:16;;17461:27;17291:205::o;17501:135::-;17540:3;-1:-1:-1;;17561:17:1;;17558:2;;;17581:18;;:::i;:::-;-1:-1:-1;17628:1:1;17617:13;;17548:88::o;17641:127::-;17702:10;17697:3;17693:20;17690:1;17683:31;17733:4;17730:1;17723:15;17757:4;17754:1;17747:15;17773:131;-1:-1:-1;;;;;17848:31:1;;17838:42;;17828:2;;17894:1;17891;17884:12;17909:118;17995:5;17988:13;17981:21;17974:5;17971:32;17961:2;;18017:1;18014;18007:12
Swarm Source
ipfs://10993fe402957c8c236b2c952a6eb0f26621c97cdfba43777c89032d9ef0254e
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 |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.