Contract 0xff5a8072565726A055690bd14924022DE020623A

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcbdf76cb6c28bd641727239447ff20ee459c95552a98631daf914b2bac316efbEnd Fibonaccenin...295170602022-06-13 12:28:4919 days 10 hrs ago0x9c36bc6b8c107014b6e86536d809b74c6fdb8ce9 IN  0xff5a8072565726a055690bd14924022de020623a0 MATIC0.101920172867 205.99255596
0x622933dde8fe3a606b9c166d3dadeb185a9000fac84d5d7ee1b71f95ecbdfbfdCalculate Upcomi...295166392022-06-13 12:14:1919 days 11 hrs ago0x9c36bc6b8c107014b6e86536d809b74c6fdb8ce9 IN  0xff5a8072565726a055690bd14924022de020623a0 MATIC0.0468675 1,500
0xd2ec264aecc110e37b60497fa01257698d935d736bfe9d6db9a3ead3abb68f1dLever Pull Fibon...293232292022-06-08 17:11:3824 days 6 hrs ago0xe8acfcf8bf5bed4579b44a5b8a67d455272271e2 IN  0xff5a8072565726a055690bd14924022de020623a0 MATIC0.030932484 66
0xb6284db26af21808ed9a5eb54e3258fff56ae95e4289030eb79cff179db6e9570x61010060292123412022-06-05 22:20:5627 days 1 hr ago0x77447f2ca205d6405206d1af316f1f5954bc2bb5 IN  Create: XVMCfibonaccening0 MATIC0.214183728 44
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
XVMCfibonaccening

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-06-05
*/

// File: xvmc-contracts/libs/standard/Address.sol


pragma solidity >=0.6.12 <=0.8.0;

/**
 * @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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: xvmc-contracts/libs/custom/IERC20.sol


pragma solidity >=0.6.12 <=0.8.0;
//original: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol

//added functions for mint, burn, burnXVMC, transferXVMC and transferOwnership
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
	
	function mint(address to, uint256 amount) external;
	function burn(uint256 amount) external;
    function burnXVMC(address account, uint256 amount) external returns (bool);
	function transferXVMC(address _sender, address _recipient, uint256 _amount) external returns (bool);
	function transferOwnership(address newOwner) external;

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

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

// File: xvmc-contracts/libs/custom/SafeERC20.sol


pragma solidity >=0.6.12 <=0.8.0;
//original: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol
//using transferXVMC instead of transferFrom for safeTransferFrom



/**
 * @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.transferXVMC.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));
        }
    }

    /**
     * @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: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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: xvmc-contracts/rewardBoost.sol



pragma solidity 0.8.0;






interface IXVMCgovernor {
    function costToVote() external view returns (uint256);
    function maximumVoteTokens() external view returns (uint256);
    function delayBeforeEnforce() external view returns (uint256);
    function thresholdFibonaccening() external view returns (uint256);
    function eventFibonacceningActive() external view returns (bool);
    function setThresholdFibonaccening(uint256 newThreshold) external;
    function fibonacciDelayed() external returns (bool);
    function setInflation(uint256 newInflation) external;
    function delayFibonacci(bool _arg) external;
    function totalFibonacciEventsAfterGrand() external returns (uint256);
    function lastRegularReward() external returns (uint256);
    function blocksPerSecond() external returns (uint256);
    function changeGovernorEnforced() external returns (bool);
    function eligibleNewGovernor() external returns (address);
	function burnFromOldChef(uint256 _amount) external;
	function setActivateFibonaccening(bool _arg) external;
	function isInflationStatic() external returns (bool);
	function consensusContract() external view returns (address);
	function postGrandFibIncreaseCount() external;
	function rememberReward() external;
}

interface IMasterChef {
    function XVMCPerBlock() external returns (uint256);
    function owner() external view returns (address);
}

interface IToken {
    function governor() external view returns (address);
}

interface IConsensus {
	function totalXVMCStaked() external view returns(uint256);
	function tokensCastedPerVote(uint256 _forID) external view returns(uint256);
}

// reward boost contract
// tldr; A reward boost is called 'Fibonaccening', could be compared to Bitcoin halvening
// When A threshold of tokens are collected, a reward boost event can be scheduled
// During the event there is a period of boosted rewards
// After the event ends, the tokens are burned and the global inflation is reduced
contract XVMCfibonaccening is Ownable {
    using SafeERC20 for IERC20;
    
    struct FibonacceningProposal {
        bool valid;
        uint256 firstCallTimestamp;
        uint256 valueSacrificedForVote;
		uint256 valueSacrificedAgainst;
		uint256 delay;
        uint256 rewardPerBlock;
        uint256 duration;
        uint256 startTime;
    }
    struct ProposeGrandFibonaccening{
        bool valid;
        uint256 eventDate; 
        uint256 firstCallTimestamp;
        uint256 valueSacrificedForVote;
		uint256 valueSacrificedAgainst;
		uint256 delay;
        uint256 finalSupply;
    }
    
    FibonacceningProposal[] public fibonacceningProposals;
    ProposeGrandFibonaccening[] public grandFibonacceningProposals;

    //WARNING: careful where we are using 1e18 and where not
    uint256 public immutable goldenRatio = 1618; //1.618 is the golden ratio
    IERC20 public immutable token; //XVMC token
	
	address public immutable oldToken = 0x6d0c966c8A09e354Df9C48b446A474CE3343D912;
	
	address public immutable oldMasterchef = 0x9BD741F077241b594EBdD745945B577d59C8768e;
 
    
    //masterchef address
    address public masterchef;
    
    uint256 public lastCallFibonaccening; //stores timestamp of last grand fibonaccening event
    
    bool public eligibleGrandFibonaccening; // when big event is ready
    bool public grandFibonacceningActivated; // if upgrading the contract after event, watch out this must be true
    uint256 public desiredSupplyAfterGrandFibonaccening; // Desired supply to reach for Grand Fib Event
    
    uint256 public targetBlock; // used for calculating target block
    bool public isRunningGrand; //we use this during Grand Fib Event

    uint256 public fibonacceningActiveID;
    uint256 public fibonacceningActivatedBlock;
    
    bool public expiredGrandFibonaccening;
    
    uint256 public tokensForBurn; //tokens we draw from governor to burn for fib event

	uint256 public grandEventLength = 14 * 24 * 3600; // default Duration for the Grand Fibonaccening(the time in which 61.8% of the supply is printed)
	uint256 public delayBetweenEvents = 48 * 3600; // delay between when grand events can be triggered(default 48hrs)

    event ProposeFibonaccening(uint256 proposalID, uint256 valueSacrificedForVote, uint256 startTime, uint256 durationInBlocks, uint256 newRewardPerBlock , address indexed enforcer, uint256 delay);

    event EndFibonaccening(uint256 proposalID, address indexed enforcer);
    event CancleFibonaccening(uint256 proposalID, address indexed enforcer);
    
    event RebalanceInflation(uint256 newRewardPerBlock);
    
    event InitiateProposeGrandFibonaccening(uint256 proposalID, uint256 depositingTokens, uint256 eventDate, uint256 finalSupply, address indexed enforcer, uint256 delay);
	
	event AddVotes(uint256 _type, uint256 proposalID, address indexed voter, uint256 tokensSacrificed, bool _for);
	event EnforceProposal(uint256 _type, uint256 proposalID, address indexed enforcer, bool isSuccess);
    
    event ChangeGovernor(address newGovernor);
	
	constructor (IERC20 _XVMC, address _masterchef) {
		token = _XVMC;
		masterchef = _masterchef;
		
		fibonacceningProposals.push(
		    FibonacceningProposal(true, 0, 1e40, 0, 0, 169*1e21, 185000, 1654097100)
		    );
	}
    
    
    /**
     * Regulatory process for scheduling a "fibonaccening event"
    */    
    function proposeFibonaccening(uint256 depositingTokens, uint256 newRewardPerBlock, uint256 durationInBlocks, uint256 startTimestamp, uint256 delay) external {
        require(depositingTokens >= IXVMCgovernor(owner()).costToVote(), "costs to submit decisions");
        require(IERC20(token).balanceOf(owner()) >= IXVMCgovernor(owner()).thresholdFibonaccening(), "need to collect penalties before calling");
        require(!(IXVMCgovernor(owner()).eventFibonacceningActive()), "Event already running");
        require(delay <= IXVMCgovernor(owner()).delayBeforeEnforce(), "must be shorter than Delay before enforce");
        require(
            startTimestamp > block.timestamp + delay + (24*3600) + IXVMCgovernor(owner()).delayBeforeEnforce() && 
            startTimestamp - block.timestamp <= 21 days, "max 21 days"); 
        require(
            (newRewardPerBlock * durationInBlocks) < (getTotalSupply() * 23 / 100),
            "Safeguard: Can't print more than 23% of tokens in single event"
        );
		require(newRewardPerBlock > goldenRatio || (!isRunningGrand && expiredGrandFibonaccening),
					"can't go below goldenratio"); //would enable grand fibonaccening
		//duration(in blocks) must be lower than amount of blocks mined in 30days(can't last more than roughly 30days)
		//30(days)*24(hours)*3600(seconds)  = 2592000
		uint256 amountOfBlocksIn30Days = 2592 * IXVMCgovernor(owner()).blocksPerSecond() / 1000;
		require(durationInBlocks <= amountOfBlocksIn30Days, "maximum 30days duration");
    
		IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens); 
        fibonacceningProposals.push(
            FibonacceningProposal(true, block.timestamp, depositingTokens, 0, delay, newRewardPerBlock, durationInBlocks, startTimestamp)
            );
    	
    	emit ProposeFibonaccening(fibonacceningProposals.length - 1, depositingTokens, startTimestamp, durationInBlocks, newRewardPerBlock, msg.sender, delay);
    }
	function voteFibonacceningY(uint256 proposalID, uint256 withTokens) external {
		require(fibonacceningProposals[proposalID].valid, "invalid");
		require(fibonacceningProposals[proposalID].firstCallTimestamp + fibonacceningProposals[proposalID].delay + IXVMCgovernor(owner()).delayBeforeEnforce() > block.timestamp, "past the point of no return"); 
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);

		fibonacceningProposals[proposalID].valueSacrificedForVote+= withTokens;

		emit AddVotes(0, proposalID, msg.sender, withTokens, true);
	}
	function voteFibonacceningN(uint256 proposalID, uint256 withTokens, bool withAction) external {
		require(fibonacceningProposals[proposalID].valid, "invalid");
		require(fibonacceningProposals[proposalID].firstCallTimestamp + fibonacceningProposals[proposalID].delay + IXVMCgovernor(owner()).delayBeforeEnforce() > block.timestamp, "past the point of no return"); 
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);

		fibonacceningProposals[proposalID].valueSacrificedAgainst+= withTokens;
		if(withAction) { vetoFibonaccening(proposalID); }
		
		emit AddVotes(0, proposalID, msg.sender, withTokens, false);
	}
    function vetoFibonaccening(uint256 proposalID) public {
    	require(fibonacceningProposals[proposalID].valid == true, "Invalid proposal"); 
		require(fibonacceningProposals[proposalID].firstCallTimestamp + fibonacceningProposals[proposalID].delay <= block.timestamp, "pending delay");
		require(fibonacceningProposals[proposalID].valueSacrificedForVote < fibonacceningProposals[proposalID].valueSacrificedAgainst, "needs more votes");
 
    	fibonacceningProposals[proposalID].valid = false; 
    	
    	emit EnforceProposal(0, proposalID, msg.sender, false);
    }

    /**
     * Activates a valid fibonaccening event
     * 
    */
    function leverPullFibonaccening(uint256 proposalID) public {
		require(!(IXVMCgovernor(owner()).fibonacciDelayed()), "event has been delayed");
        require(
            IERC20(token).balanceOf(owner()) >= IXVMCgovernor(owner()).thresholdFibonaccening(),
            "needa collect penalties");
    	require(fibonacceningProposals[proposalID].valid == true, "invalid proposal");
    	require(block.timestamp >= fibonacceningProposals[proposalID].startTime, "can only start when set");
    	require(!(IXVMCgovernor(owner()).eventFibonacceningActive()), "already active");
		require(!grandFibonacceningActivated || (expiredGrandFibonaccening && !isRunningGrand), "not available during the grand boost event");
    	
    	if(fibonacceningProposals[proposalID].valueSacrificedForVote >= fibonacceningProposals[proposalID].valueSacrificedAgainst) {
			//IERC20(token).safeTransferFrom(msg.sender, owner(), IXVMCgovernor(owner()).costToVote()); 
			tokensForBurn = IXVMCgovernor(owner()).thresholdFibonaccening();
			IERC20(token).safeTransferFrom(owner(), address(this), tokensForBurn); 
			
			IXVMCgovernor(owner()).rememberReward(); // remembers last regular rewar(before boost)
			IXVMCgovernor(owner()).setInflation(fibonacceningProposals[proposalID].rewardPerBlock);
			
			fibonacceningProposals[proposalID].valid = false;
			fibonacceningActiveID = proposalID;
			fibonacceningActivatedBlock = block.number;
			IXVMCgovernor(owner()).setActivateFibonaccening(true);
			
			emit EnforceProposal(0, proposalID, msg.sender, true);
		} else {
			vetoFibonaccening(proposalID);
		}
    }
    
     /**
     * Ends fibonaccening event 
     * sets new inflation  
     * burns the tokens
    */
    function endFibonaccening() external {
        require(IXVMCgovernor(owner()).eventFibonacceningActive(), "no active event");
        require(
            block.number >= fibonacceningActivatedBlock + fibonacceningProposals[fibonacceningActiveID].duration, 
            "not yet expired"
           ); 
        
        uint256 newAmount = calculateUpcomingRewardPerBlock();
        
        IXVMCgovernor(owner()).setInflation(newAmount);
        IXVMCgovernor(owner()).setActivateFibonaccening(false);
        
    	IERC20(token).burn(tokensForBurn); // burns the tokens - "fibonaccening" sacrifice
		IXVMCgovernor(owner()).burnFromOldChef(0); //burns all the tokens in old chef
		
		//if past 'grand fibonaccening' increase event count
		if(!isRunningGrand && expiredGrandFibonaccening) {
			IXVMCgovernor(owner()).postGrandFibIncreaseCount();
		}
		
    	emit EndFibonaccening(fibonacceningActiveID, msg.sender);
    }
    

    /**
     * In case we have multiple valid fibonaccening proposals
     * When the event is enforced, all other valid proposals can be invalidated
     * Just to clear up the space
    */
    function cancleFibonaccening(uint256 proposalID) external {
        require(IXVMCgovernor(owner()).eventFibonacceningActive(), "fibonaccening active required");

        require(fibonacceningProposals[proposalID].valid, "must be valid to negate ofc");
        
        fibonacceningProposals[proposalID].valid = false;
        emit CancleFibonaccening(proposalID, msg.sender);
    }
    
    /**
     * After the Grand Fibonaccening event, the inflation reduces to roughly 1.618% annually
     * On each new Fibonaccening event, it further reduces by Golden ratio(in percentile)
	 *
     * New inflation = Current inflation * ((100 - 1.618) / 100)
     */
    function rebalanceInflation() external {
        require(IXVMCgovernor(owner()).totalFibonacciEventsAfterGrand() > 0, "Only after the Grand Fibonaccening event");
        require(!(IXVMCgovernor(owner()).eventFibonacceningActive()), "Event is running");
		bool isStatic = IXVMCgovernor(owner()).isInflationStatic();
        
		uint256 initialSupply = getTotalSupply();
		uint256 _factor = goldenRatio;
		
		// if static, then inflation is 1.618% annually
		// Else the inflation reduces by 1.618%(annually) on each event
		if(!isStatic) {
			for(uint256 i = 0; i < IXVMCgovernor(owner()).totalFibonacciEventsAfterGrand(); i++) {
				_factor = _factor * 98382 / 100000; //factor is multiplied * 1000 (number is 1618, when actual factor is 1.618)
			}
		}
		
		// divide by 1000 to turn 1618 into 1.618% (and then divide farther by 100 to convert percentage)
        uint256 supplyToPrint = initialSupply * _factor / 100000; 
		
        uint256 rewardPerBlock = supplyToPrint / (365 * 24 * 36 * IXVMCgovernor(owner()).blocksPerSecond() / 10000);
        IXVMCgovernor(owner()).setInflation(rewardPerBlock);
       
        emit RebalanceInflation(rewardPerBlock);
    }
    
     /**
     * If inflation is to drop below golden ratio, the grand fibonaccening event is ready
	 * IMPORTANT NOTE: the math for the grand fibonaccening needs a lot of additional checks
	 * It is almost certain that fixes will be required. The event won't happen for quite some time.
	 * Giving enough time for additional fixes and changes to be adapted
     */
    function isGrandFibonacceningReady() external {
		require(!eligibleGrandFibonaccening);
        if((IMasterChef(masterchef).XVMCPerBlock() - goldenRatio * 1e18) <= goldenRatio * 1e18) { //we x1000'd the supply so 1e18
            eligibleGrandFibonaccening = true;
        }
    }

    /**
     * The Grand Fibonaccening Event, only happens once
	 * A lot of Supply is printed (x1.618 - x1,000,000)
	 * People like to buy on the way down
	 * People like high APYs
	 * People like to buy cheap coins
	 * Grand Fibonaccening ain't happening for quite some time... 
	 * We could add a requirement to vote through consensus for the "Grand Fibonaccening" to be enforced
     */    
    function initiateProposeGrandFibonaccening(uint256 depositingTokens, uint256 eventDate, uint256 finalSupply, uint256 delay) external {
    	require(eligibleGrandFibonaccening && !grandFibonacceningActivated);
		require(delay <= IXVMCgovernor(owner()).delayBeforeEnforce(), "must be shorter than Delay before enforce");
    	require(depositingTokens >= IXVMCgovernor(owner()).costToVote(), "there is a minimum cost to vote");
		uint256 _totalSupply = getTotalSupply();
    	require(finalSupply >= (_totalSupply * 1618 / 1000) && finalSupply <= (_totalSupply * 1000000));
    	require(eventDate > block.timestamp + delay + (7*24*3600) + IXVMCgovernor(owner()).delayBeforeEnforce());
    	
    	
    	IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens);
    	grandFibonacceningProposals.push(
    	    ProposeGrandFibonaccening(true, eventDate, block.timestamp, depositingTokens, 0, delay, finalSupply)
    	    );
    
        emit EnforceProposal(1, grandFibonacceningProposals.length - 1, msg.sender, true);
    }
	function voteGrandFibonacceningY(uint256 proposalID, uint256 withTokens) external {
		require(grandFibonacceningProposals[proposalID].valid, "invalid");
		require(grandFibonacceningProposals[proposalID].eventDate - (7*24*3600) > block.timestamp, "past the point of no return"); //can only be cancled up until 7days before event
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);

		grandFibonacceningProposals[proposalID].valueSacrificedForVote+= withTokens;

		emit AddVotes(1, proposalID, msg.sender, withTokens, true);
	}
	function voteGrandFibonacceningN(uint256 proposalID, uint256 withTokens, bool withAction) external {
		require(grandFibonacceningProposals[proposalID].valid, "invalid");
		require(grandFibonacceningProposals[proposalID].eventDate - (7*24*3600) > block.timestamp, "past the point of no return"); //can only be cancled up until 7days before event
		
		IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens);

		grandFibonacceningProposals[proposalID].valueSacrificedAgainst+= withTokens;
		if(withAction) { vetoProposeGrandFibonaccening(proposalID); }

		emit AddVotes(1, proposalID, msg.sender, withTokens, false);
	}
	/*
	* can be vetto'd during delayBeforeEnforce period.
	* afterwards it can not be cancled anymore
	* but it can still be front-ran by earlier event
	*/
    function vetoProposeGrandFibonaccening(uint256 proposalID) public {
    	require(grandFibonacceningProposals[proposalID].valid, "already invalid");
		require(grandFibonacceningProposals[proposalID].firstCallTimestamp + grandFibonacceningProposals[proposalID].delay + IXVMCgovernor(owner()).delayBeforeEnforce() <= block.timestamp, "pending delay");
		require(grandFibonacceningProposals[proposalID].valueSacrificedForVote < grandFibonacceningProposals[proposalID].valueSacrificedAgainst, "needs more votes");

    	grandFibonacceningProposals[proposalID].valid = false;  
    	
    	emit EnforceProposal(1, proposalID, msg.sender, false);
    }
    
	
    function grandFibonacceningEnforce(uint256 proposalID) public {
        require(!grandFibonacceningActivated, "already called");
        require(grandFibonacceningProposals[proposalID].valid && grandFibonacceningProposals[proposalID].eventDate <= block.timestamp, "not yet valid");
		
		address _consensusContract = IXVMCgovernor(owner()).consensusContract();
		
		uint256 _totalStaked = IConsensus(_consensusContract).totalXVMCStaked();
		
		//to approve grand fibonaccening, more tokens have to be sacrificed for vote ++
		// more stakes(locked shares) need to vote in favor than against it
		//to vote in favor, simply vote for proposal ID of maximum uint256 number - 1
		uint256 _totalVotedInFavor = IConsensus(_consensusContract).tokensCastedPerVote(type(uint256).max - 1);
		uint256 _totalVotedAgainst= IConsensus(_consensusContract).tokensCastedPerVote(type(uint256).max);
		
        require(_totalVotedInFavor >= _totalStaked * 25 / 100
                    || _totalVotedAgainst >= _totalStaked * 25 / 100,
                             "minimum 25% weighted vote required");

		if(grandFibonacceningProposals[proposalID].valueSacrificedForVote >= grandFibonacceningProposals[proposalID].valueSacrificedAgainst
				&& _totalVotedInFavor > _totalVotedAgainst) {
			grandFibonacceningActivated = true;
			grandFibonacceningProposals[proposalID].valid = false;
			desiredSupplyAfterGrandFibonaccening = grandFibonacceningProposals[proposalID].finalSupply;
			
			emit EnforceProposal(1, proposalID, msg.sender, true);
		} else {
			grandFibonacceningProposals[proposalID].valid = false;  
    	
			emit EnforceProposal(1, proposalID, msg.sender, false);
		}
    }
    
    /**
     * Function handling The Grand Fibonaccening
	 *
     */
    function grandFibonacceningRunning() external {
        require(grandFibonacceningActivated && !expiredGrandFibonaccening);
        
        if(isRunningGrand){
            require(block.number >= targetBlock, "target block not yet reached");
            IXVMCgovernor(owner()).setInflation(0);
            isRunningGrand = false;
			
			//incentive to stop the event in time
			if(IERC20(token).balanceOf(owner()) >= IXVMCgovernor(owner()).costToVote() * 42) {
				IERC20(token).safeTransferFrom(owner(), payable(msg.sender), IXVMCgovernor(owner()).costToVote() * 42);
			}
        } else {
			require(!(IXVMCgovernor(owner()).fibonacciDelayed()), "event has been delayed");
			uint256 _totalSupply = getTotalSupply();
            require(
                ( _totalSupply * goldenRatio * goldenRatio / 1000000) < desiredSupplyAfterGrandFibonaccening, 
                "Last 2 events happen at once"
                );
			// Just a simple implementation that allows max once per day at a certain time
            require(
                (block.timestamp % 86400) / 3600 >= 16 && (block.timestamp % 86400) / 3600 <= 18,
                "can only call between 16-18 UTC"
            );
			require(block.timestamp - lastCallFibonaccening > delayBetweenEvents);
			
			lastCallFibonaccening = block.timestamp;
            uint256 targetedSupply =  _totalSupply * goldenRatio / 1000;
			uint256 amountToPrint = targetedSupply - _totalSupply; // (+61.8%)
            
			//printing the amount(61.8% of supply) in uint256(grandEventLength) seconds ( blocks in second are x100 )
            uint256 rewardPerBlock = amountToPrint / (grandEventLength * IXVMCgovernor(owner()).blocksPerSecond() / 1000000); 
			targetBlock = block.number + (amountToPrint / rewardPerBlock);
            IXVMCgovernor(owner()).setInflation(rewardPerBlock);
			
            isRunningGrand = true;
        }
    
    }
    
    /**
     * During the last print of the Grand Fibonaccening
     * It prints up to "double the dose" in order to reach the desired supply
     * Why? to create a big decrease in the price, moving away from everyone's 
     * buy point. It creates a big gap with no overhead resistance, creating the potential for
     * the price to move back up effortlessly
     */
    function startLastPrintGrandFibonaccening() external {
        require(!(IXVMCgovernor(owner()).fibonacciDelayed()), "event has been delayed");
        require(grandFibonacceningActivated && !expiredGrandFibonaccening && !isRunningGrand);
		uint256 _totalSupply = getTotalSupply();
        require(
             _totalSupply * goldenRatio * goldenRatio / 1000000 >= desiredSupplyAfterGrandFibonaccening,
            "on the last 2 we do it in one, call lastprint"
            );
        
		require(block.timestamp - lastCallFibonaccening > delayBetweenEvents, "pending delay");
        require((block.timestamp % 86400) / 3600 >= 16, "only after 16:00 UTC");
        
        uint256 rewardPerBlock = ( desiredSupplyAfterGrandFibonaccening -  _totalSupply ) / (grandEventLength * IXVMCgovernor(owner()).blocksPerSecond() / 1000000); //prints in desired time
		targetBlock = (desiredSupplyAfterGrandFibonaccening -  _totalSupply) / rewardPerBlock;
        IXVMCgovernor(owner()).setInflation(rewardPerBlock);
                
        isRunningGrand = true;
        expiredGrandFibonaccening = true;
    }
    function expireLastPrintGrandFibonaccening() external {
        require(isRunningGrand && expiredGrandFibonaccening);
        require(block.number >= (targetBlock-7));
        
		uint256 _totalSupply = getTotalSupply();
		uint256 tokensToPrint = (_totalSupply * goldenRatio) / 100000; // 1618 => 1.618 (/1000), 1.618 => 1.618% (/100)
		
        uint256 newEmissions =  tokensToPrint / (365 * 24 * 36 * IXVMCgovernor(owner()).blocksPerSecond() / 10000); 
		
        IXVMCgovernor(owner()).setInflation(newEmissions);
        isRunningGrand = false;
		
		//incentive to stop the event in time
		if(IERC20(token).balanceOf(owner()) >= IXVMCgovernor(owner()).costToVote() * 50) {
			IERC20(token).safeTransferFrom(owner(), payable(msg.sender), IXVMCgovernor(owner()).costToVote() * 50);
		}
    }
	
  function setMasterchef() external {
		masterchef = IMasterChef(address(token)).owner();
    }
    
    //transfers ownership of this contract to new governor
    //masterchef is the token owner, governor is the owner of masterchef
    function changeGovernor() external {
		_transferOwnership(IToken(address(token)).governor());
    }
    
    // this is unneccesary until the Grand Fibonaccening is actually to happen
    // Should perhaps add a proposal to regulate the length and delay
    function updateDelayBetweenEvents(uint256 _delay) external onlyOwner {
		delayBetweenEvents = _delay;
    }
    function updateGrandEventLength(uint256 _length) external onlyOwner {
    	grandEventLength = _length;
    }
    
    function getTotalSupply() private view returns (uint256) {
         return (token.totalSupply() +
					1000 * (IERC20(oldToken).totalSupply() - IERC20(oldToken).balanceOf(address(token))));
    }

    
    /**
     * After the Fibonaccening event ends, global inflation reduces
     * by -1.618 tokens/block prior to the Grand Fibonaccening and
     * by 1.618 percentile after the Grand Fibonaccening ( * ((100-1.618) / 100))
    */
    function calculateUpcomingRewardPerBlock() public returns(uint256) {
        if(!expiredGrandFibonaccening) {
            return IXVMCgovernor(owner()).lastRegularReward() - goldenRatio * 1e18;
        } else {
            return IXVMCgovernor(owner()).lastRegularReward() * 98382 / 100000; 
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_XVMC","type":"address"},{"internalType":"address","name":"_masterchef","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_type","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSacrificed","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_for","type":"bool"}],"name":"AddVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"CancleFibonaccening","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newGovernor","type":"address"}],"name":"ChangeGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"EndFibonaccening","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_type","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"bool","name":"isSuccess","type":"bool"}],"name":"EnforceProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eventDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"finalSupply","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"InitiateProposeGrandFibonaccening","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":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"durationInBlocks","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRewardPerBlock","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"ProposeFibonaccening","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRewardPerBlock","type":"uint256"}],"name":"RebalanceInflation","type":"event"},{"inputs":[],"name":"calculateUpcomingRewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"cancleFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delayBetweenEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"desiredSupplyAfterGrandFibonaccening","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eligibleGrandFibonaccening","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expireLastPrintGrandFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expiredGrandFibonaccening","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fibonacceningActivatedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fibonacceningActiveID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fibonacceningProposals","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedAgainst","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"uint256","name":"rewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldenRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grandEventLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grandFibonacceningActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"grandFibonacceningEnforce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"grandFibonacceningProposals","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"eventDate","type":"uint256"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedAgainst","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"uint256","name":"finalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grandFibonacceningRunning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"uint256","name":"eventDate","type":"uint256"},{"internalType":"uint256","name":"finalSupply","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"initiateProposeGrandFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isGrandFibonacceningReady","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isRunningGrand","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastCallFibonaccening","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"leverPullFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldMasterchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"uint256","name":"newRewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"durationInBlocks","type":"uint256"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"proposeFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalanceInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setMasterchef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLastPrintGrandFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"targetBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","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":"_delay","type":"uint256"}],"name":"updateDelayBetweenEvents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"updateGrandEventLength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoProposeGrandFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"},{"internalType":"bool","name":"withAction","type":"bool"}],"name":"voteFibonacceningN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"}],"name":"voteFibonacceningY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"},{"internalType":"bool","name":"withAction","type":"bool"}],"name":"voteGrandFibonacceningN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"}],"name":"voteGrandFibonacceningY","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101006040526106526080527f6d0c966c8a09e354df9c48b446a474ce3343d91200000000000000000000000060c0527f9bd741f077241b594ebdd745945b577d59c8768e00000000000000000000000060e05262127500600d556202a300600e553480156200006e57600080fd5b5060405162005710380380620057108339810160408190526200009191620002e9565b620000a56200009f62000295565b62000299565b606091821b6001600160601b03191660a0908152600380546001600160a01b0319166001600160a01b03939093169290921790915560408051610100810182526001808252600060208301818152701d6329f1c35ca4bfabb9f5610000000000948401948552958301818152608084018281526923c98223b79ff7a000009685019687526202d2a860c0860190815263629784cc60e08701908152855480870187559590945294517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf66008909502948501805460ff191691151591909117905596517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf784015593517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf883015592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf982015593517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa85015591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfb84015590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfc830155517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfd9091015562000340565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620002fc578182fd5b8251620003098162000327565b60208401519092506200031c8162000327565b809150509250929050565b6001600160a01b03811681146200033d57600080fd5b50565b60805160a05160601c60c05160601c60e05160601c6152d76200043960003960006117ea01526000818161278a015281816141c20152614269015260008181610ac501528181610eec01528181611255015281816113940152818161198301528181611e810152818161246b015281816130b1015281816136c3015281816137ff015281816138b501528181613c2a01528181613f6701528181614186015281816141ef0152614310015260008181610dc70152818161146e01528181611550015281816116e301528181611715015281816120df0152818161233a01528181612989015281816134fb01526139cc01526152d76000f3fe608060405234801561001057600080fd5b50600436106102735760003560e01c80639f8fd39f11610151578063d931064b116100c3578063f26d5d2611610087578063f26d5d261461049b578063f2fde38b146104a3578063f35950c0146104b6578063f6e3423d146104be578063fb1db278146104d1578063fc0c546a146104d957610273565b8063d931064b14610449578063e8bdf3e514610470578063e94eabc914610483578063f03507af1461048b578063f08669dc1461049357610273565b8063c34f00f411610115578063c34f00f4146103f8578063c98df7b114610400578063c98eadc014610408578063d3a1441014610410578063d76bb83a14610423578063d783e7fb1461043657610273565b80639f8fd39f146103b2578063a4cbcd14146103d8578063b31c710a146103e0578063b661e5a2146103e8578063bbcc85f0146103f057610273565b80633906b622116101ea5780636ce57221116101ae5780636ce5722114610361578063715018a61461036957806386ddb9de146103715780638da5cb5b14610384578063955b9ee41461038c5780639bc643a41461039f57610273565b80633906b62214610323578063528e04c71461032b57806353775c011461033e57806354ad391e14610346578063640ba48d1461034e57610273565b80632535e6111161023c5780632535e611146102db5780632f651dbb146102e3578063322d617b146102eb578063343f7760146102f35780633830b9d8146102fb57806338d6ee701461031057610273565b806206cae0146102785780630a16697a1461028d57806312dee591146102ab5780631d777856146102be57806322565bc6146102c6575b600080fd5b61028b610286366004614686565b6104e1565b005b6102956109ae565b6040516102a29190614843565b60405180910390f35b61028b6102b9366004614740565b6109b4565b610295611100565b6102ce611106565b6040516102a291906147ce565b61028b61110f565b6102956116c2565b6102956116c8565b61028b6116ce565b6103036117e8565b6040516102a29190614796565b61028b61031e3660046146d7565b61180c565b6102ce611a3d565b61028b610339366004614686565b611a46565b61028b611c9d565b61028b612000565b61028b61035c366004614686565b6122f4565b610295612338565b61028b61235c565b61028b61037f3660046146b6565b6123a5565b61030361250d565b61028b61039a366004614686565b61251d565b61028b6103ad366004614686565b6126eb565b6103c56103c0366004614686565b61272f565b6040516102a297969594939291906147d9565b610295612782565b610303612788565b6102ce6127ac565b6102ce6127ba565b6102956127c3565b6102956127c9565b61028b6127cf565b61028b61041e3660046146d7565b612bc3565b61028b610431366004614686565b612d04565b61028b61044436600461470f565b612e5d565b61045c610457366004614686565b613271565b6040516102a298979695949392919061480b565b61028b61047e3660046146b6565b6132cb565b6102956134a7565b61028b6134ad565b61028b6137fd565b61028b6138b0565b61028b6104b1366004614632565b613949565b6102956139ba565b61028b6104cc366004614686565b613b19565b610303614175565b610303614184565b600554610100900460ff16156105125760405162461bcd60e51b815260040161050990614eba565b60405180910390fd5b6002818154811061053357634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff1680156105855750426002828154811061057057634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016001015411155b6105a15760405162461bcd60e51b815260040161050990614f87565b60006105ab61250d565b6001600160a01b031663931cc2d46040518163ffffffff1660e01b815260040160206040518083038186803b1580156105e357600080fd5b505afa1580156105f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061b919061464e565b90506000816001600160a01b03166319cbe9506040518163ffffffff1660e01b815260040160206040518083038186803b15801561065857600080fd5b505afa15801561066c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610690919061469e565b905060006001600160a01b038316637e57e8ff6106b060016000196151a0565b6040518263ffffffff1660e01b81526004016106cc9190614843565b60206040518083038186803b1580156106e457600080fd5b505afa1580156106f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071c919061469e565b90506000836001600160a01b0316637e57e8ff6000196040518263ffffffff1660e01b815260040161074e9190614843565b60206040518083038186803b15801561076657600080fd5b505afa15801561077a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079e919061469e565b905060646107ad846019615181565b6107b7919061516d565b821015806107db575060646107cd846019615181565b6107d7919061516d565b8110155b6107f75760405162461bcd60e51b815260040161050990614d33565b6002858154811061081857634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600401546002868154811061084b57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600301541015801561086a57508082115b15610937576005805461ff0019166101001790556002805460009190879081106108a457634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201805460ff191691151591909117905560028054869081106108e557634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160060154600681905550336001600160a01b0316600080516020615262833981519152600187600160405161092a9392919061484c565b60405180910390a26109a7565b60006002868154811061095a57634e487b7160e01b600052603260045260246000fd5b60009182526020822060079190910201805460ff19169215159290921790915560405133916000805160206152628339815191529161099e916001918a919061484c565b60405180910390a25b5050505050565b60075481565b6109bc61250d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109f457600080fd5b505afa158015610a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2c919061469e565b851015610a4b5760405162461bcd60e51b815260040161050990614937565b610a5361250d565b6001600160a01b031663ae8853526040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8b57600080fd5b505afa158015610a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac3919061469e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231610afa61250d565b6040518263ffffffff1660e01b8152600401610b169190614796565b60206040518083038186803b158015610b2e57600080fd5b505afa158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b66919061469e565b1015610b845760405162461bcd60e51b815260040161050990614b87565b610b8c61250d565b6001600160a01b0316632a5626f26040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc457600080fd5b505afa158015610bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfc919061466a565b15610c195760405162461bcd60e51b815260040161050990614e8b565b610c2161250d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5957600080fd5b505afa158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c91919061469e565b811115610cb05760405162461bcd60e51b815260040161050990614de1565b610cb861250d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b158015610cf057600080fd5b505afa158015610d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d28919061469e565b610d328242615155565b610d3f9062015180615155565b610d499190615155565b82118015610d635750621baf80610d6042846151a0565b11155b610d7f5760405162461bcd60e51b815260040161050990614ff8565b6064610d896141a8565b610d94906017615181565b610d9e919061516d565b610da88486615181565b10610dc55760405162461bcd60e51b815260040161050990614bcf565b7f0000000000000000000000000000000000000000000000000000000000000000841180610e03575060085460ff16158015610e035750600b5460ff165b610e1f5760405162461bcd60e51b815260040161050990614b19565b60006103e8610e2c61250d565b6001600160a01b0316638a22abb16040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e6657600080fd5b505af1158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e919061469e565b610eaa90610a20615181565b610eb4919061516d565b905080841115610ed65760405162461bcd60e51b815260040161050990614b50565b610f1433610ee261250d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190896143ae565b6040805161010081018252600180825242602083019081529282018981526000606084018181526080850188815260a086018c815260c087018c815260e088018c8152875480890189559588905297517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf66008909602958601805460ff191691151591909117905597517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf785015593517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf884015590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9830155517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa82015590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfb82015592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfc84015590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfd90920191909155805433917f7516e35bbad4efdde8665222e2ab1519fcd5f952186c57dfeec3fcd83a5ba5e2916110d991906151a0565b8886888a886040516110f09695949392919061512d565b60405180910390a2505050505050565b600c5481565b60055460ff1681565b600554610100900460ff1680156111295750600b5460ff16155b61113257600080fd5b60085460ff16156113c15760075443101561115f5760405162461bcd60e51b8152600401610509906150d5565b61116761250d565b6001600160a01b031663e0a8ed5260006040518263ffffffff1660e01b81526004016111939190614843565b600060405180830381600087803b1580156111ad57600080fd5b505af11580156111c1573d6000803e3d6000fd5b50506008805460ff19169055506111d8905061250d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561121057600080fd5b505afa158015611224573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611248919061469e565b61125390602a615181565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a0823161128a61250d565b6040518263ffffffff1660e01b81526004016112a69190614796565b60206040518083038186803b1580156112be57600080fd5b505afa1580156112d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f6919061469e565b106113bc576113bc61130661250d565b3361130f61250d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561134757600080fd5b505afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137f919061469e565b61138a90602a615181565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906143ae565b6116c0565b6113c961250d565b6001600160a01b031663129ebc4b6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561140357600080fd5b505af1158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b919061466a565b156114585760405162461bcd60e51b8152600401610509906148de565b60006114626141a8565b600654909150620f42407f00000000000000000000000000000000000000000000000000000000000000006114978185615181565b6114a19190615181565b6114ab919061516d565b106114c85760405162461bcd60e51b815260040161050990614f19565b6010610e106114da62015180426151fe565b6114e4919061516d565b1015801561150c57506012610e106114ff62015180426151fe565b611509919061516d565b11155b6115285760405162461bcd60e51b81526004016105099061509e565b600e5460045461153890426151a0565b1161154257600080fd5b4260045560006103e86115757f000000000000000000000000000000000000000000000000000000000000000084615181565b61157f919061516d565b9050600061158d83836151a0565b90506000620f424061159d61250d565b6001600160a01b0316638a22abb16040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156115d757600080fd5b505af11580156115eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160f919061469e565b600d5461161c9190615181565b611626919061516d565b611630908361516d565b905061163c818361516d565b6116469043615155565b60075561165161250d565b6001600160a01b031663e0a8ed52826040518263ffffffff1660e01b815260040161167c9190614843565b600060405180830381600087803b15801561169657600080fd5b505af11580156116aa573d6000803e3d6000fd5b50506008805460ff191660011790555050505050505b565b60065481565b600a5481565b60055460ff16156116de57600080fd5b6117107f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000615181565b6117427f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000615181565b600360009054906101000a90046001600160a01b03166001600160a01b031663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561179257600080fd5b505af11580156117a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ca919061469e565b6117d491906151a0565b116116c0576005805460ff19166001179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001838154811061182d57634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff1661185d5760405162461bcd60e51b81526004016105099061510c565b4261186661250d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b15801561189e57600080fd5b505afa1580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d6919061469e565b600185815481106118f757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600401546001868154811061192a57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600101546119469190615155565b6119509190615155565b1161196d5760405162461bcd60e51b815260040161050990614c2c565b6119ab3361197961250d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190856143ae565b81600184815481106119cd57634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160030160008282546119ed9190615155565b90915550508015611a0157611a018361251d565b336001600160a01b0316600080516020615282833981519152600085856000604051611a309493929190614864565b60405180910390a2505050565b60085460ff1681565b60028181548110611a6757634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff16611a975760405162461bcd60e51b81526004016105099061501d565b42611aa061250d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b158015611ad857600080fd5b505afa158015611aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b10919061469e565b60028381548110611b3157634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016005015460028481548110611b6457634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160020154611b809190615155565b611b8a9190615155565b1115611ba85760405162461bcd60e51b815260040161050990614abb565b60028181548110611bc957634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016004015460028281548110611bfc57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016003015410611c2b5760405162461bcd60e51b815260040161050990614ca9565b600060028281548110611c4e57634e487b7160e01b600052603260045260246000fd5b60009182526020822060079190910201805460ff191692151592909217909155604051339160008051602061526283398151915291611c929160019186919061484c565b60405180910390a250565b611ca561250d565b6001600160a01b0316632a5626f26040518163ffffffff1660e01b815260040160206040518083038186803b158015611cdd57600080fd5b505afa158015611cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d15919061466a565b611d315760405162461bcd60e51b815260040161050990614cd3565b600160095481548110611d5457634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160060154600a54611d739190615155565b431015611d925760405162461bcd60e51b81526004016105099061490e565b6000611d9c6139ba565b9050611da661250d565b6001600160a01b031663e0a8ed52826040518263ffffffff1660e01b8152600401611dd19190614843565b600060405180830381600087803b158015611deb57600080fd5b505af1158015611dff573d6000803e3d6000fd5b50505050611e0b61250d565b6001600160a01b031663f0929fc860006040518263ffffffff1660e01b8152600401611e3791906147ce565b600060405180830381600087803b158015611e5157600080fd5b505af1158015611e65573d6000803e3d6000fd5b5050600c54604051630852cd8d60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693506342966c689250611eb79190600401614843565b600060405180830381600087803b158015611ed157600080fd5b505af1158015611ee5573d6000803e3d6000fd5b50505050611ef161250d565b6001600160a01b031663d287086460006040518263ffffffff1660e01b8152600401611f1d9190614843565b600060405180830381600087803b158015611f3757600080fd5b505af1158015611f4b573d6000803e3d6000fd5b505060085460ff16159150508015611f655750600b5460ff165b15611fc557611f7261250d565b6001600160a01b0316637668702a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611fac57600080fd5b505af1158015611fc0573d6000803e3d6000fd5b505050505b336001600160a01b03167f3bd63a865b36cad2ce00b7429a3f3179bd757296fcd45c75d57e432ffe039eb0600954604051611c929190614843565b61200861250d565b6001600160a01b031663129ebc4b6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207a919061466a565b156120975760405162461bcd60e51b8152600401610509906148de565b600554610100900460ff1680156120b15750600b5460ff16155b80156120c0575060085460ff16155b6120c957600080fd5b60006120d36141a8565b600654909150620f42407f00000000000000000000000000000000000000000000000000000000000000006121088185615181565b6121129190615181565b61211c919061516d565b101561213a5760405162461bcd60e51b81526004016105099061496e565b600e5460045461214a90426151a0565b116121675760405162461bcd60e51b815260040161050990614abb565b6010610e1061217962015180426151fe565b612183919061516d565b10156121a15760405162461bcd60e51b815260040161050990615046565b6000620f42406121af61250d565b6001600160a01b0316638a22abb16040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156121e957600080fd5b505af11580156121fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612221919061469e565b600d5461222e9190615181565b612238919061516d565b8260065461224691906151a0565b612250919061516d565b9050808260065461226191906151a0565b61226b919061516d565b60075561227661250d565b6001600160a01b031663e0a8ed52826040518263ffffffff1660e01b81526004016122a19190614843565b600060405180830381600087803b1580156122bb57600080fd5b505af11580156122cf573d6000803e3d6000fd5b505060088054600160ff199182168117909255600b8054909116909117905550505050565b6122fc61440c565b6001600160a01b031661230d61250d565b6001600160a01b0316146123335760405162461bcd60e51b815260040161050990614dac565b600e55565b7f000000000000000000000000000000000000000000000000000000000000000081565b61236461440c565b6001600160a01b031661237561250d565b6001600160a01b03161461239b5760405162461bcd60e51b815260040161050990614dac565b6116c06000614410565b600282815481106123c657634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff166123f65760405162461bcd60e51b81526004016105099061510c565b4262093a806002848154811061241c57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016001015461243891906151a0565b116124555760405162461bcd60e51b815260040161050990614c2c565b6124933361246161250d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190846143ae565b80600283815481106124b557634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160030160008282546124d59190615155565b909155505060405133906000805160206152828339815191529061250190600190869086908390614864565b60405180910390a25050565b6000546001600160a01b03165b90565b6001818154811061253e57634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff1615156001146125735760405162461bcd60e51b815260040161050990615074565b426001828154811061259557634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160040154600183815481106125c857634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600101546125e49190615155565b11156126025760405162461bcd60e51b815260040161050990614abb565b6001818154811061262357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600301546001828154811061265657634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160020154106126855760405162461bcd60e51b815260040161050990614ca9565b6000600182815481106126a857634e487b7160e01b600052603260045260246000fd5b60009182526020822060089190910201805460ff191692151592909217909155604051339160008051602061526283398151915291611c9291908590829061484c565b6126f361440c565b6001600160a01b031661270461250d565b6001600160a01b03161461272a5760405162461bcd60e51b815260040161050990614dac565b600d55565b6002818154811061273f57600080fd5b6000918252602090912060079091020180546001820154600283015460038401546004850154600586015460069096015460ff9095169650929491939092919087565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600554610100900460ff1681565b600b5460ff1681565b60095481565b60045481565b60006127d961250d565b6001600160a01b03166376b4c85c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561281357600080fd5b505af1158015612827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284b919061469e565b116128685760405162461bcd60e51b815260040161050990614a2d565b61287061250d565b6001600160a01b0316632a5626f26040518163ffffffff1660e01b815260040160206040518083038186803b1580156128a857600080fd5b505afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e0919061466a565b156128fd5760405162461bcd60e51b8152600401610509906148b4565b600061290761250d565b6001600160a01b0316635a4972e66040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561294157600080fd5b505af1158015612955573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612979919061466a565b905060006129856141a8565b90507f000000000000000000000000000000000000000000000000000000000000000082612a625760005b6129b861250d565b6001600160a01b03166376b4c85c6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156129f257600080fd5b505af1158015612a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2a919061469e565b811015612a6057620186a0612a42836201804e615181565b612a4c919061516d565b915080612a58816151e3565b9150506129b0565b505b6000620186a0612a728385615181565b612a7c919061516d565b90506000612710612a8b61250d565b6001600160a01b0316638a22abb16040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612ac557600080fd5b505af1158015612ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612afd919061469e565b612b0a906204cfe0615181565b612b14919061516d565b612b1e908361516d565b9050612b2861250d565b6001600160a01b031663e0a8ed52826040518263ffffffff1660e01b8152600401612b539190614843565b600060405180830381600087803b158015612b6d57600080fd5b505af1158015612b81573d6000803e3d6000fd5b505050507fd927275268e83b732873280470e2c79afd41f907a7e82978db0beff7a3429d7081604051612bb49190614843565b60405180910390a15050505050565b60028381548110612be457634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102015460ff16612c145760405162461bcd60e51b81526004016105099061510c565b4262093a8060028581548110612c3a57634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160010154612c5691906151a0565b11612c735760405162461bcd60e51b815260040161050990614c2c565b612c7f3361197961250d565b8160028481548110612ca157634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016004016000828254612cc19190615155565b90915550508015612cd557612cd583611a46565b336001600160a01b0316600080516020615282833981519152600185856000604051611a309493929190614864565b612d0c61250d565b6001600160a01b0316632a5626f26040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4457600080fd5b505afa158015612d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7c919061466a565b612d985760405162461bcd60e51b815260040161050990614d75565b60018181548110612db957634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff16612de95760405162461bcd60e51b815260040161050990614e54565b600060018281548110612e0c57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600890910201805460ff191691151591909117905560405133907fec1c9db186b03baa8575effc414c6bf7dca35ed89266613154e1f95843ef731990611c92908490614843565b60055460ff168015612e775750600554610100900460ff16155b612e8057600080fd5b612e8861250d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b158015612ec057600080fd5b505afa158015612ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef8919061469e565b811115612f175760405162461bcd60e51b815260040161050990614de1565b612f1f61250d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b158015612f5757600080fd5b505afa158015612f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8f919061469e565b841015612fae5760405162461bcd60e51b815260040161050990614ee2565b6000612fb86141a8565b90506103e8612fc982610652615181565b612fd3919061516d565b8310158015612fee5750612fea81620f4240615181565b8311155b612ff757600080fd5b612fff61250d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b15801561303757600080fd5b505afa15801561304b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306f919061469e565b6130798342615155565b6130869062093a80615155565b6130909190615155565b841161309b57600080fd5b6130d9336130a761250d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190886143ae565b6040805160e081018252600180825260208201878152429383019384526060830189815260006080850181815260a0860189815260c087018b81526002805480890182559481905297517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace6007909502948501805460ff191691151591909117905594517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf84015596517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad083015591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad282015593517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad3850155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad490930192909255543391600080516020615262833981519152916132609082906151a0565b600160405161099e9392919061484c565b6001818154811061328157600080fd5b60009182526020909120600890910201805460018201546002830154600384015460048501546005860154600687015460079097015460ff90961697509395929491939092909188565b600182815481106132ec57634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff1661331c5760405162461bcd60e51b81526004016105099061510c565b4261332561250d565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b15801561335d57600080fd5b505afa158015613371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613395919061469e565b600184815481106133b657634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160040154600185815481106133e957634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600101546134059190615155565b61340f9190615155565b1161342c5760405162461bcd60e51b815260040161050990614c2c565b6134383361246161250d565b806001838154811061345a57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600201600082825461347a9190615155565b90915550506040513390600080516020615282833981519152906125019060009086908690600190614864565b600e5481565b60085460ff1680156134c15750600b5460ff165b6134ca57600080fd5b600780546134d891906151a0565b4310156134e457600080fd5b60006134ee6141a8565b90506000620186a06135207f000000000000000000000000000000000000000000000000000000000000000084615181565b61352a919061516d565b9050600061271061353961250d565b6001600160a01b0316638a22abb16040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561357357600080fd5b505af1158015613587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ab919061469e565b6135b8906204cfe0615181565b6135c2919061516d565b6135cc908361516d565b90506135d661250d565b6001600160a01b031663e0a8ed52826040518263ffffffff1660e01b81526004016136019190614843565b600060405180830381600087803b15801561361b57600080fd5b505af115801561362f573d6000803e3d6000fd5b50506008805460ff1916905550613646905061250d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561367e57600080fd5b505afa158015613692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b6919061469e565b6136c1906032615181565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082316136f861250d565b6040518263ffffffff1660e01b81526004016137149190614796565b60206040518083038186803b15801561372c57600080fd5b505afa158015613740573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613764919061469e565b106137f8576137f861377461250d565b3361377d61250d565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b1580156137b557600080fd5b505afa1580156137c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ed919061469e565b61138a906032615181565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561385657600080fd5b505afa15801561386a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388e919061464e565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6116c07f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561390c57600080fd5b505afa158015613920573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613944919061464e565b614410565b61395161440c565b6001600160a01b031661396261250d565b6001600160a01b0316146139885760405162461bcd60e51b815260040161050990614dac565b6001600160a01b0381166139ae5760405162461bcd60e51b815260040161050990614a75565b6139b781614410565b50565b600b5460009060ff16613a84576139f97f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000615181565b613a0161250d565b6001600160a01b031663a569e8966040518163ffffffff1660e01b8152600401602060405180830381600087803b158015613a3b57600080fd5b505af1158015613a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a73919061469e565b613a7d91906151a0565b905061251a565b620186a0613a9061250d565b6001600160a01b031663a569e8966040518163ffffffff1660e01b8152600401602060405180830381600087803b158015613aca57600080fd5b505af1158015613ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b02919061469e565b613b0f906201804e615181565b613a7d919061516d565b613b2161250d565b6001600160a01b031663129ebc4b6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015613b5b57600080fd5b505af1158015613b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b93919061466a565b15613bb05760405162461bcd60e51b8152600401610509906148de565b613bb861250d565b6001600160a01b031663ae8853526040518163ffffffff1660e01b815260040160206040518083038186803b158015613bf057600080fd5b505afa158015613c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c28919061469e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231613c5f61250d565b6040518263ffffffff1660e01b8152600401613c7b9190614796565b60206040518083038186803b158015613c9357600080fd5b505afa158015613ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccb919061469e565b1015613ce95760405162461bcd60e51b815260040161050990614ae2565b60018181548110613d0a57634e487b7160e01b600052603260045260246000fd5b600091825260209091206008909102015460ff161515600114613d3f5760405162461bcd60e51b815260040161050990614e2a565b60018181548110613d6057634e487b7160e01b600052603260045260246000fd5b906000526020600020906008020160070154421015613d915760405162461bcd60e51b815260040161050990614cfc565b613d9961250d565b6001600160a01b0316632a5626f26040518163ffffffff1660e01b815260040160206040518083038186803b158015613dd157600080fd5b505afa158015613de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e09919061466a565b15613e265760405162461bcd60e51b815260040161050990614a05565b600554610100900460ff161580613e4d5750600b5460ff168015613e4d575060085460ff16155b613e695760405162461bcd60e51b8152600401610509906149bb565b60018181548110613e8a57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600802016003015460018281548110613ebd57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600201541061416c57613edc61250d565b6001600160a01b031663ae8853526040518163ffffffff1660e01b815260040160206040518083038186803b158015613f1457600080fd5b505afa158015613f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4c919061469e565b600c55613f90613f5a61250d565b600c546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919030906143ae565b613f9861250d565b6001600160a01b031663655ea8eb6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fd257600080fd5b505af1158015613fe6573d6000803e3d6000fd5b50505050613ff261250d565b6001600160a01b031663e0a8ed526001838154811061402157634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600501546040518263ffffffff1660e01b815260040161404f9190614843565b600060405180830381600087803b15801561406957600080fd5b505af115801561407d573d6000803e3d6000fd5b505050506000600182815481106140a457634e487b7160e01b600052603260045260246000fd5b60009182526020909120600890910201805460ff1916911515919091179055600981905543600a556140d461250d565b6001600160a01b031663f0929fc860016040518263ffffffff1660e01b815260040161410091906147ce565b600060405180830381600087803b15801561411a57600080fd5b505af115801561412e573d6000803e3d6000fd5b50505050336001600160a01b0316600080516020615262833981519152600083600160405161415f9392919061484c565b60405180910390a26139b7565b6139b78161251d565b6003546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190614217907f000000000000000000000000000000000000000000000000000000000000000090600401614796565b60206040518083038186803b15801561422f57600080fd5b505afa158015614243573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614267919061469e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156142c057600080fd5b505afa1580156142d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f8919061469e565b61430291906151a0565b61430e906103e8615181565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561436757600080fd5b505afa15801561437b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061439f919061469e565b6143a99190615155565b905090565b61440684630c3023b960e01b8585856040516024016143cf939291906147aa565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614460565b50505050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006144b5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166144ef9092919063ffffffff16565b8051909150156137f857808060200190518101906144d3919061466a565b6137f85760405162461bcd60e51b815260040161050990614fae565b60606144fe8484600085614508565b90505b9392505050565b60608247101561452a5760405162461bcd60e51b815260040161050990614c63565b614533856145c8565b61454f5760405162461bcd60e51b815260040161050990614f50565b600080866001600160a01b0316858760405161456b919061477a565b60006040518083038185875af1925050503d80600081146145a8576040519150601f19603f3d011682016040523d82523d6000602084013e6145ad565b606091505b50915091506145bd8282866145f9565b979650505050505050565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b60608315614608575081614501565b8251156146185782518084602001fd5b8160405162461bcd60e51b81526004016105099190614881565b600060208284031215614643578081fd5b81356145018161523e565b60006020828403121561465f578081fd5b81516145018161523e565b60006020828403121561467b578081fd5b815161450181615253565b600060208284031215614697578081fd5b5035919050565b6000602082840312156146af578081fd5b5051919050565b600080604083850312156146c8578081fd5b50508035926020909101359150565b6000806000606084860312156146eb578081fd5b8335925060208401359150604084013561470481615253565b809150509250925092565b60008060008060808587031215614724578081fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215614757578081fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000825161478c8184602087016151b7565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b901515815260200190565b9615158752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b9715158852602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000190565b90815260200190565b92835260208301919091521515604082015260600190565b938452602084019290925260408301521515606082015260800190565b60006020825282518060208401526148a08160408501602087016151b7565b601f01601f19169190910160400192915050565b60208082526010908201526f4576656e742069732072756e6e696e6760801b604082015260600190565b602080825260169082015275195d995b9d081a185cc81899595b8819195b185e595960521b604082015260600190565b6020808252600f908201526e1b9bdd081e595d08195e1c1a5c9959608a1b604082015260600190565b60208082526019908201527f636f73747320746f207375626d6974206465636973696f6e7300000000000000604082015260600190565b6020808252602d908201527f6f6e20746865206c617374203220776520646f20697420696e206f6e652c206360408201526c185b1b081b185cdd1c1c9a5b9d609a1b606082015260800190565b6020808252602a908201527f6e6f7420617661696c61626c6520647572696e6720746865206772616e6420626040820152691bdbdcdd08195d995b9d60b21b606082015260800190565b6020808252600e908201526d616c72656164792061637469766560901b604082015260600190565b60208082526028908201527f4f6e6c7920616674657220746865204772616e64204669626f6e616363656e696040820152671b99c8195d995b9d60c21b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600d908201526c70656e64696e672064656c617960981b604082015260600190565b60208082526017908201527f6e6565646120636f6c6c6563742070656e616c74696573000000000000000000604082015260600190565b6020808252601a908201527f63616e277420676f2062656c6f7720676f6c64656e726174696f000000000000604082015260600190565b60208082526017908201527f6d6178696d756d20333064617973206475726174696f6e000000000000000000604082015260600190565b60208082526028908201527f6e65656420746f20636f6c6c6563742070656e616c74696573206265666f72656040820152672063616c6c696e6760c01b606082015260800190565b6020808252603e908201527f5361666567756172643a2043616e2774207072696e74206d6f7265207468616e60408201527f20323325206f6620746f6b656e7320696e2073696e676c65206576656e740000606082015260800190565b6020808252601b908201527f706173742074686520706f696e74206f66206e6f2072657475726e0000000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60208082526010908201526f6e65656473206d6f726520766f74657360801b604082015260600190565b6020808252600f908201526e1b9bc81858dd1a5d9948195d995b9d608a1b604082015260600190565b60208082526017908201527f63616e206f6e6c79207374617274207768656e20736574000000000000000000604082015260600190565b60208082526022908201527f6d696e696d756d2032352520776569676874656420766f746520726571756972604082015261195960f21b606082015260800190565b6020808252601d908201527f6669626f6e616363656e696e6720616374697665207265717569726564000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f6d7573742062652073686f72746572207468616e2044656c6179206265666f726040820152686520656e666f72636560b81b606082015260800190565b60208082526010908201526f1a5b9d985b1a59081c1c9bdc1bdcd85b60821b604082015260600190565b6020808252601b908201527f6d7573742062652076616c696420746f206e6567617465206f66630000000000604082015260600190565b6020808252601590820152744576656e7420616c72656164792072756e6e696e6760581b604082015260600190565b6020808252600e908201526d185b1c9958591e4818d85b1b195960921b604082015260600190565b6020808252601f908201527f74686572652069732061206d696e696d756d20636f737420746f20766f746500604082015260600190565b6020808252601c908201527f4c6173742032206576656e74732068617070656e206174206f6e636500000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600d908201526c1b9bdd081e595d081d985b1a59609a1b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252600b908201526a6d6178203231206461797360a81b604082015260600190565b6020808252600f908201526e185b1c9958591e481a5b9d985b1a59608a1b604082015260600190565b6020808252601490820152736f6e6c792061667465722031363a30302055544360601b604082015260600190565b60208082526010908201526f125b9d985b1a59081c1c9bdc1bdcd85b60821b604082015260600190565b6020808252601f908201527f63616e206f6e6c792063616c6c206265747765656e2031362d31382055544300604082015260600190565b6020808252601c908201527f74617267657420626c6f636b206e6f7420796574207265616368656400000000604082015260600190565b6020808252600790820152661a5b9d985b1a5960ca1b604082015260600190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b6000821982111561516857615168615212565b500190565b60008261517c5761517c615228565b500490565b600081600019048311821515161561519b5761519b615212565b500290565b6000828210156151b2576151b2615212565b500390565b60005b838110156151d25781810151838201526020016151ba565b838111156144065750506000910152565b60006000198214156151f7576151f7615212565b5060010190565b60008261520d5761520d615228565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146139b757600080fd5b80151581146139b757600080fdfef2bb4a4a13cf6aeac92de647c51be644b020e0438e1f43d39af5cd361525b05f417668270754634975f63e2a103ec6546e665d5068d4f888385de42fcc113a12a26469706673582212201c3210d7ae808143c50704d91913582283390ec3829128fe742d81784d24fa4964736f6c63430008000033000000000000000000000000970ccee657dd831e9c37511aa3eb5302c1eb5eee0000000000000000000000006ff40a8a1fe16075bd6008a48befb768be08b4b0

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

000000000000000000000000970ccee657dd831e9c37511aa3eb5302c1eb5eee0000000000000000000000006ff40a8a1fe16075bd6008a48befb768be08b4b0

-----Decoded View---------------
Arg [0] : _XVMC (address): 0x970ccee657dd831e9c37511aa3eb5302c1eb5eee
Arg [1] : _masterchef (address): 0x6ff40a8a1fe16075bd6008a48befb768be08b4b0

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000970ccee657dd831e9c37511aa3eb5302c1eb5eee
Arg [1] : 0000000000000000000000006ff40a8a1fe16075bd6008a48befb768be08b4b0


Deployed ByteCode Sourcemap

21412:23744:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37609:1697;;;;;;:::i;:::-;;:::i;:::-;;23011:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24859:1975;;;;;;:::i;:::-;;:::i;23301:28::-;;;:::i;22712:38::-;;;:::i;:::-;;;;;;;:::i;39391:1926::-;;;:::i;22900:51::-;;;:::i;23196:42::-;;;:::i;33841:285::-;;;:::i;22447:83::-;;;:::i;:::-;;;;;;;:::i;27407:640::-;;;;;;:::i;:::-;;:::i;23081:26::-;;;:::i;36942:652::-;;;;;;:::i;:::-;;:::i;30440:943::-;;;:::i;41707:1121::-;;;:::i;44154:109::-;;;;;;:::i;:::-;;:::i;22235:43::-;;;:::i;18523:103::-;;;:::i;35587:552::-;;;;;;:::i;:::-;;:::i;17872:87::-;;;:::i;28053:574::-;;;;;;:::i;:::-;;:::i;44269:110::-;;;;;;:::i;:::-;;:::i;22102:62::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;23388:48::-;;;:::i;22362:78::-;;;:::i;22784:39::-;;;:::i;23251:37::-;;;:::i;23153:36::-;;;:::i;22610:::-;;;:::i;32268:1190::-;;;:::i;36142:635::-;;;;;;:::i;:::-;;:::i;31593:389::-;;;;;;:::i;:::-;;:::i;34538:1046::-;;;;;;:::i;:::-;;:::i;22042:53::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;26837:567::-;;;;;;:::i;:::-;;:::i;23538:45::-;;;:::i;42834:808::-;;;:::i;43649:95::-;;;:::i;43890:101::-;;;:::i;18781:201::-;;;;;;:::i;:::-;;:::i;44840:313::-;;;:::i;28707:1615::-;;;;;;:::i;:::-;;:::i;22572:25::-;;;:::i;22313:29::-;;;:::i;37609:1697::-;37691:27;;;;;;;37690:28;37682:55;;;;-1:-1:-1;;;37682:55:0;;;;;;;:::i;:::-;;;;;;;;;37756:27;37784:10;37756:39;;;;;;-1:-1:-1;;;37756:39:0;;;;;;;;;;;;;;;;;;;;;;:45;;;:117;;;;;37858:15;37805:27;37833:10;37805:39;;;;;;-1:-1:-1;;;37805:39:0;;;;;;;;;;;;;;;;;;;:49;;;:68;;37756:117;37748:143;;;;-1:-1:-1;;;37748:143:0;;;;;;;:::i;:::-;37900:26;37943:7;:5;:7::i;:::-;-1:-1:-1;;;;;37929:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37900:71;;37980:20;38014:18;-1:-1:-1;;;;;38003:46:0;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37980:71;-1:-1:-1;38295:26:0;-1:-1:-1;;;;;38324:50:0;;;38375:21;38395:1;-1:-1:-1;;38375:21:0;:::i;:::-;38324:73;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38295:102;;38402:26;38441:18;-1:-1:-1;;;;;38430:50:0;;-1:-1:-1;;38430:69:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38402:97;-1:-1:-1;38564:3:0;38544:17;:12;38559:2;38544:17;:::i;:::-;:23;;;;:::i;:::-;38522:18;:45;;:115;;;-1:-1:-1;38634:3:0;38614:17;:12;38629:2;38614:17;:::i;:::-;:23;;;;:::i;:::-;38592:18;:45;;38522:115;38514:192;;;;-1:-1:-1;;;38514:192:0;;;;;;;:::i;:::-;38782:27;38810:10;38782:39;;;;;;-1:-1:-1;;;38782:39:0;;;;;;;;;;;;;;;;;;;:62;;;38716:27;38744:10;38716:39;;;;;;-1:-1:-1;;;38716:39:0;;;;;;;;;;;;;;;;;;;:62;;;:128;;:176;;;;;38874:18;38853;:39;38716:176;38713:586;;;38900:27;:34;;-1:-1:-1;;38900:34:0;;;;;38940:27;:39;;38900:34;;38940:27;38968:10;;38940:39;;;;-1:-1:-1;;;38940:39:0;;;;;;;;;;;;;;;;;;;;;;:53;;-1:-1:-1;;38940:53:0;;;;;;;;;;39038:27;:39;;39066:10;;39038:39;;;;-1:-1:-1;;;39038:39:0;;;;;;;;;;;;;;;;;;;:51;;;38999:36;:90;;;;39136:10;-1:-1:-1;;;;;39105:48:0;-1:-1:-1;;;;;;;;;;;39121:1:0;39124:10;39148:4;39105:48;;;;;;;;:::i;:::-;;;;;;;;38713:586;;;39219:5;39171:27;39199:10;39171:39;;;;;;-1:-1:-1;;;39171:39:0;;;;;;;;;;;;;;;;;;;;;;:53;;-1:-1:-1;;39171:53:0;;;;;;;;;;;39244:49;;39275:10;;-1:-1:-1;;;;;;;;;;;39244:49:0;;;-1:-1:-1;;39263:10:0;;39171:39;39244:49;:::i;:::-;;;;;;;;38713:586;37609:1697;;;;;:::o;23011:26::-;;;;:::o;24859:1975::-;25069:7;:5;:7::i;:::-;-1:-1:-1;;;;;25055:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25035:16;:55;;25027:93;;;;-1:-1:-1;;;25027:93:0;;;;;;;:::i;:::-;25189:7;:5;:7::i;:::-;-1:-1:-1;;;;;25175:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25146:5;-1:-1:-1;;;;;25139:23:0;;25163:7;:5;:7::i;:::-;25139:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:83;;25131:136;;;;-1:-1:-1;;;25131:136:0;;;;;;;:::i;:::-;25302:7;:5;:7::i;:::-;-1:-1:-1;;;;;25288:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25286:52;25278:86;;;;-1:-1:-1;;;25278:86:0;;;;;;;:::i;:::-;25406:7;:5;:7::i;:::-;-1:-1:-1;;;;;25392:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25383:5;:52;;25375:106;;;;-1:-1:-1;;;25375:106:0;;;;;;;:::i;:::-;25583:7;:5;:7::i;:::-;-1:-1:-1;;;;;25569:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25531:23;25549:5;25531:15;:23;:::i;:::-;:35;;25558:7;25531:35;:::i;:::-;:81;;;;:::i;:::-;25514:14;:98;:159;;;;-1:-1:-1;25666:7:0;25630:32;25647:15;25630:14;:32;:::i;:::-;:43;;25514:159;25492:197;;;;-1:-1:-1;;;25492:197:0;;;;;;;:::i;:::-;25789:3;25765:16;:14;:16::i;:::-;:21;;25784:2;25765:21;:::i;:::-;:27;;;;:::i;:::-;25724:36;25744:16;25724:17;:36;:::i;:::-;25723:70;25701:182;;;;-1:-1:-1;;;25701:182:0;;;;;;;:::i;:::-;25916:11;25896:17;:31;:81;;;-1:-1:-1;25933:14:0;;;;25932:15;:44;;;;-1:-1:-1;25951:25:0;;;;25932:44;25888:126;;;;-1:-1:-1;;;25888:126:0;;;;;;;:::i;:::-;26217:30;26300:4;26271:7;:5;:7::i;:::-;-1:-1:-1;;;;;26257:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26250:47;;:4;:47;:::i;:::-;:54;;;;:::i;:::-;26217:87;;26337:22;26317:16;:42;;26309:78;;;;-1:-1:-1;;;26309:78:0;;;;;;;:::i;:::-;26398:69;26429:10;26441:7;:5;:7::i;:::-;-1:-1:-1;;;;;26405:5:0;26398:30;;:69;26450:16;26398:30;:69::i;:::-;26521:125;;;;;;;;26479:22;26521:125;;;26549:15;26521:125;;;;;;;;;;;;-1:-1:-1;26521:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26479:182;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26479:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26702:29;;26808:10;;26681:145;;26702:33;;26479:22;26702:33;:::i;:::-;26737:16;26755:14;26771:16;26789:17;26820:5;26681:145;;;;;;;;;;;:::i;:::-;;;;;;;;24859:1975;;;;;;:::o;23301:28::-;;;;:::o;22712:38::-;;;;;;:::o;39391:1926::-;39456:27;;;;;;;:57;;;;-1:-1:-1;39488:25:0;;;;39487:26;39456:57;39448:66;;;;;;39538:14;;;;39535:1769;;;39592:11;;39576:12;:27;;39568:68;;;;-1:-1:-1;;;39568:68:0;;;;;;;:::i;:::-;39665:7;:5;:7::i;:::-;-1:-1:-1;;;;;39651:35:0;;39687:1;39651:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39704:14:0;:22;;-1:-1:-1;;39704:22:0;;;-1:-1:-1;39832:7:0;;-1:-1:-1;39832:5:0;:7::i;:::-;-1:-1:-1;;;;;39818:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;39856:2;39818:40;:::i;:::-;39789:5;-1:-1:-1;;;;;39782:23:0;;39806:7;:5;:7::i;:::-;39782:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;39779:197;;39867:102;39898:7;:5;:7::i;:::-;39915:10;39942:7;:5;:7::i;:::-;-1:-1:-1;;;;;39928:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;39966:2;39928:40;:::i;:::-;-1:-1:-1;;;;;39874:5:0;39867:30;;:102;;:30;:102::i;:::-;39535:1769;;;40023:7;:5;:7::i;:::-;-1:-1:-1;;;;;40009:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40007:44;39999:79;;;;-1:-1:-1;;;39999:79:0;;;;;;;:::i;:::-;40084:20;40107:16;:14;:16::i;:::-;40220:36;;40084:39;;-1:-1:-1;40209:7:0;40195:11;40166:26;40195:11;40084:39;40166:26;:::i;:::-;:40;;;;:::i;:::-;:50;;;;:::i;:::-;40164:92;40138:187;;;;-1:-1:-1;;;40138:187:0;;;;;;;:::i;:::-;40485:2;40477:4;40450:23;40468:5;40450:15;:23;:::i;:::-;40449:32;;;;:::i;:::-;:38;;:80;;;;-1:-1:-1;40527:2:0;40519:4;40492:23;40510:5;40492:15;:23;:::i;:::-;40491:32;;;;:::i;:::-;:38;;40449:80;40423:173;;;;-1:-1:-1;;;40423:173:0;;;;;;;:::i;:::-;40652:18;;40628:21;;40610:39;;:15;:39;:::i;:::-;:60;40602:69;;;;;;40706:15;40682:21;:39;40736:22;40791:4;40762:26;40777:11;40762:12;:26;:::i;:::-;:33;;;;:::i;:::-;40736:59;-1:-1:-1;40801:21:0;40825:29;40842:12;40736:59;40825:29;:::i;:::-;40801:53;;41005:22;41109:7;41080;:5;:7::i;:::-;-1:-1:-1;;;;;41066:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41047:16;;:59;;;;:::i;:::-;:69;;;;:::i;:::-;41030:87;;:13;:87;:::i;:::-;41005:112;-1:-1:-1;41154:30:0;41005:112;41154:13;:30;:::i;:::-;41138:47;;:12;:47;:::i;:::-;41124:11;:61;41214:7;:5;:7::i;:::-;-1:-1:-1;;;;;41200:35:0;;41236:14;41200:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41271:14:0;:21;;-1:-1:-1;;41271:21:0;41288:4;41271:21;;;-1:-1:-1;;;;;;39535:1769:0;39391:1926::o;22900:51::-;;;;:::o;23196:42::-;;;;:::o;33841:285::-;33901:26;;;;33900:27;33892:36;;;;;;34007:18;:11;34021:4;34007:18;:::i;:::-;33984;:11;33998:4;33984:18;:::i;:::-;33955:10;;;;;;;;;-1:-1:-1;;;;;33955:10:0;-1:-1:-1;;;;;33943:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;;;:::i;:::-;33942:83;33939:180;;34074:26;:33;;-1:-1:-1;;34074:33:0;34103:4;34074:33;;;33841:285::o;22447:83::-;;;:::o;27407:640::-;27514:22;27537:10;27514:34;;;;;;-1:-1:-1;;;27514:34:0;;;;;;;;;;;;;;;;;;;;;;:40;;;27506:60;;;;-1:-1:-1;;;27506:60:0;;;;;;;:::i;:::-;27724:15;27692:7;:5;:7::i;:::-;-1:-1:-1;;;;;27678:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27635:22;27658:10;27635:34;;;;;;-1:-1:-1;;;27635:34:0;;;;;;;;;;;;;;;;;;;:40;;;27579:22;27602:10;27579:34;;;;;;-1:-1:-1;;;27579:34:0;;;;;;;;;;;;;;;;;;;:53;;;:96;;;;:::i;:::-;:142;;;;:::i;:::-;:160;27571:200;;;;-1:-1:-1;;;27571:200:0;;;;;;;:::i;:::-;27781:63;27812:10;27824:7;:5;:7::i;:::-;-1:-1:-1;;;;;27788:5:0;27781:30;;:63;27833:10;27781:30;:63::i;:::-;27911:10;27851:22;27874:10;27851:34;;;;;;-1:-1:-1;;;27851:34:0;;;;;;;;;;;;;;;;;;;:57;;;:70;;;;;;;:::i;:::-;;;;-1:-1:-1;;27926:49:0;;;;27943:29;27961:10;27943:17;:29::i;:::-;28012:10;-1:-1:-1;;;;;27988:54:0;-1:-1:-1;;;;;;;;;;;27997:1:0;28000:10;28024;28036:5;27988:54;;;;;;;;;:::i;:::-;;;;;;;;27407:640;;;:::o;23081:26::-;;;;;;:::o;36942:652::-;37024:27;37052:10;37024:39;;;;;;-1:-1:-1;;;37024:39:0;;;;;;;;;;;;;;;;;;;;;;:45;;;37016:73;;;;-1:-1:-1;;;37016:73:0;;;;;;;:::i;:::-;37258:15;37225:7;:5;:7::i;:::-;-1:-1:-1;;;;;37211:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37163:27;37191:10;37163:39;;;;;;-1:-1:-1;;;37163:39:0;;;;;;;;;;;;;;;;;;;:45;;;37102:27;37130:10;37102:39;;;;;;-1:-1:-1;;;37102:39:0;;;;;;;;;;;;;;;;;;;:58;;;:106;;;;:::i;:::-;:152;;;;:::i;:::-;:171;;37094:197;;;;-1:-1:-1;;;37094:197:0;;;;;;;:::i;:::-;37369:27;37397:10;37369:39;;;;;;-1:-1:-1;;;37369:39:0;;;;;;;;;;;;;;;;;;;:62;;;37304:27;37332:10;37304:39;;;;;;-1:-1:-1;;;37304:39:0;;;;;;;;;;;;;;;;;;;:62;;;:127;37296:156;;;;-1:-1:-1;;;37296:156:0;;;;;;;:::i;:::-;37510:5;37462:27;37490:10;37462:39;;;;;;-1:-1:-1;;;37462:39:0;;;;;;;;;;;;;;;;;;;;;;:53;;-1:-1:-1;;37462:53:0;;;;;;;;;;;37537:49;;37568:10;;-1:-1:-1;;;;;;;;;;;37537:49:0;;;-1:-1:-1;;37556:10:0;;37462:39;37537:49;:::i;:::-;;;;;;;;36942:652;:::o;30440:943::-;30510:7;:5;:7::i;:::-;-1:-1:-1;;;;;30496:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30488:77;;;;-1:-1:-1;;;30488:77:0;;;;;;;:::i;:::-;30644:22;30667:21;;30644:45;;;;;;-1:-1:-1;;;30644:45:0;;;;;;;;;;;;;;;;;;;:54;;;30614:27;;:84;;;;:::i;:::-;30598:12;:100;;30576:169;;;;-1:-1:-1;;;30576:169:0;;;;;;;:::i;:::-;30767:17;30787:33;:31;:33::i;:::-;30767:53;;30855:7;:5;:7::i;:::-;-1:-1:-1;;;;;30841:35:0;;30877:9;30841:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30912:7;:5;:7::i;:::-;-1:-1:-1;;;;;30898:47:0;;30946:5;30898:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30989:13:0;;30970:33;;-1:-1:-1;;;30970:33:0;;-1:-1:-1;;;;;30977:5:0;30970:18;;-1:-1:-1;30970:18:0;;-1:-1:-1;30970:33:0;;30989:13;30970:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31070:7;:5;:7::i;:::-;-1:-1:-1;;;;;31056:38:0;;31095:1;31056:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31201:14:0;;;;31200:15;;-1:-1:-1;;31200:44:0;;;;-1:-1:-1;31219:25:0;;;;31200:44;31197:111;;;31266:7;:5;:7::i;:::-;-1:-1:-1;;;;;31252:48:0;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31197:111;31364:10;-1:-1:-1;;;;;31324:51:0;;31341:21;;31324:51;;;;;;:::i;41707:1121::-;41795:7;:5;:7::i;:::-;-1:-1:-1;;;;;41781:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41779:44;41771:79;;;;-1:-1:-1;;;41771:79:0;;;;;;;:::i;:::-;41869:27;;;;;;;:57;;;;-1:-1:-1;41901:25:0;;;;41900:26;41869:57;:76;;;;-1:-1:-1;41931:14:0;;;;41930:15;41869:76;41861:85;;;;;;41951:20;41974:16;:14;:16::i;:::-;42078:36;;41951:39;;-1:-1:-1;42067:7:0;42053:11;42024:26;42053:11;41951:39;42024:26;:::i;:::-;:40;;;;:::i;:::-;:50;;;;:::i;:::-;:90;;42001:190;;;;-1:-1:-1;;;42001:190:0;;;;;;;:::i;:::-;42256:18;;42232:21;;42214:39;;:15;:39;:::i;:::-;:60;42206:86;;;;-1:-1:-1;;;42206:86:0;;;;;;;:::i;:::-;42347:2;42339:4;42312:23;42330:5;42312:15;:23;:::i;:::-;42311:32;;;;:::i;:::-;:38;;42303:71;;;;-1:-1:-1;;;42303:71:0;;;;;;;:::i;:::-;42395:22;42542:7;42513;:5;:7::i;:::-;-1:-1:-1;;;;;42499:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42480:16;;:59;;;;:::i;:::-;:69;;;;:::i;:::-;42462:12;42422:36;;:52;;;;:::i;:::-;42420:130;;;;:::i;:::-;42395:155;;42651:14;42635:12;42595:36;;:52;;;;:::i;:::-;42594:71;;;;:::i;:::-;42580:11;:85;42690:7;:5;:7::i;:::-;-1:-1:-1;;;;;42676:35:0;;42712:14;42676:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42756:14:0;:21;;42773:4;-1:-1:-1;;42756:21:0;;;;;;;;42788:25;:32;;;;;;;;;;-1:-1:-1;;;;41707:1121:0:o;44154:109::-;18103:12;:10;:12::i;:::-;-1:-1:-1;;;;;18092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;18092:23:0;;18084:68;;;;-1:-1:-1;;;18084:68:0;;;;;;;:::i;:::-;44228:18:::1;:27:::0;44154:109::o;22235:43::-;;;:::o;18523:103::-;18103:12;:10;:12::i;:::-;-1:-1:-1;;;;;18092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;18092:23:0;;18084:68;;;;-1:-1:-1;;;18084:68:0;;;;;;;:::i;:::-;18588:30:::1;18615:1;18588:18;:30::i;35587:552::-:0;35682:27;35710:10;35682:39;;;;;;-1:-1:-1;;;35682:39:0;;;;;;;;;;;;;;;;;;;;;;:45;;;35674:65;;;;-1:-1:-1;;;35674:65:0;;;;;;;:::i;:::-;35818:15;35805:9;35752:27;35780:10;35752:39;;;;;;-1:-1:-1;;;35752:39:0;;;;;;;;;;;;;;;;;;;:49;;;:63;;;;:::i;:::-;:81;35744:121;;;;-1:-1:-1;;;35744:121:0;;;;;;;:::i;:::-;35924:63;35955:10;35967:7;:5;:7::i;:::-;-1:-1:-1;;;;;35931:5:0;35924:30;;:63;35976:10;35924:30;:63::i;:::-;36059:10;35994:27;36022:10;35994:39;;;;;;-1:-1:-1;;;35994:39:0;;;;;;;;;;;;;;;;;;;:62;;;:75;;;;;;;:::i;:::-;;;;-1:-1:-1;;36081:53:0;;36105:10;;-1:-1:-1;;;;;;;;;;;36081:53:0;;;36090:1;;36093:10;;36117;;36090:1;;36081:53;:::i;:::-;;;;;;;;35587:552;;:::o;17872:87::-;17918:7;17945:6;-1:-1:-1;;;;;17945:6:0;17872:87;;:::o;28053:574::-;28123:22;28146:10;28123:34;;;;;;-1:-1:-1;;;28123:34:0;;;;;;;;;;;;;;;;;;;;;;:40;;;:48;;:40;:48;28115:77;;;;-1:-1:-1;;;28115:77:0;;;;;;;:::i;:::-;28306:15;28262:22;28285:10;28262:34;;;;;;-1:-1:-1;;;28262:34:0;;;;;;;;;;;;;;;;;;;:40;;;28206:22;28229:10;28206:34;;;;;;-1:-1:-1;;;28206:34:0;;;;;;;;;;;;;;;;;;;:53;;;:96;;;;:::i;:::-;:115;;28198:141;;;;-1:-1:-1;;;28198:141:0;;;;;;;:::i;:::-;28412:22;28435:10;28412:34;;;;;;-1:-1:-1;;;28412:34:0;;;;;;;;;;;;;;;;;;;:57;;;28352:22;28375:10;28352:34;;;;;;-1:-1:-1;;;28352:34:0;;;;;;;;;;;;;;;;;;;:57;;;:117;28344:146;;;;-1:-1:-1;;;28344:146:0;;;;;;;:::i;:::-;28544:5;28501:22;28524:10;28501:34;;;;;;-1:-1:-1;;;28501:34:0;;;;;;;;;;;;;;;;;;;;;;:48;;-1:-1:-1;;28501:48:0;;;;;;;;;;;28570:49;;28601:10;;-1:-1:-1;;;;;;;;;;;28570:49:0;;;28501:34;28589:10;;28501:34;;28570:49;:::i;44269:110::-;18103:12;:10;:12::i;:::-;-1:-1:-1;;;;;18092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;18092:23:0;;18084:68;;;;-1:-1:-1;;;18084:68:0;;;;;;;:::i;:::-;44345:16:::1;:26:::0;44269:110::o;22102:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22102:62:0;;;;;;;;;:::o;23388:48::-;;;;:::o;22362:78::-;;;:::o;22784:39::-;;;;;;;;;:::o;23251:37::-;;;;;;:::o;23153:36::-;;;;:::o;22610:::-;;;;:::o;32268:1190::-;32384:1;32340:7;:5;:7::i;:::-;-1:-1:-1;;;;;32326:53:0;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;32318:112;;;;-1:-1:-1;;;32318:112:0;;;;;;;:::i;:::-;32465:7;:5;:7::i;:::-;-1:-1:-1;;;;;32451:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32449:52;32441:81;;;;-1:-1:-1;;;32441:81:0;;;;;;;:::i;:::-;32527:13;32557:7;:5;:7::i;:::-;-1:-1:-1;;;;;32543:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32527:58;;32600:21;32624:16;:14;:16::i;:::-;32600:40;-1:-1:-1;32663:11:0;32805:8;32801:234;;32825:9;32821:209;32858:7;:5;:7::i;:::-;-1:-1:-1;;;;;32844:53:0;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32840:1;:59;32821:209;;;32941:6;32923:15;:7;32933:5;32923:15;:::i;:::-;:24;;;;:::i;:::-;32913:34;-1:-1:-1;32901:3:0;;;;:::i;:::-;;;;32821:209;;;;32801:234;33150:21;33200:6;33174:23;33190:7;33174:13;:23;:::i;:::-;:32;;;;:::i;:::-;33150:56;;33222:22;33323:5;33294:7;:5;:7::i;:::-;-1:-1:-1;;;;;33280:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33264:56;;:13;:56;:::i;:::-;:64;;;;:::i;:::-;33247:82;;:13;:82;:::i;:::-;33222:107;;33354:7;:5;:7::i;:::-;-1:-1:-1;;;;;33340:35:0;;33376:14;33340:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33416:34;33435:14;33416:34;;;;;;:::i;:::-;;;;;;;;32268:1190;;;;;:::o;36142:635::-;36254:27;36282:10;36254:39;;;;;;-1:-1:-1;;;36254:39:0;;;;;;;;;;;;;;;;;;;;;;:45;;;36246:65;;;;-1:-1:-1;;;36246:65:0;;;;;;;:::i;:::-;36390:15;36377:9;36324:27;36352:10;36324:39;;;;;;-1:-1:-1;;;36324:39:0;;;;;;;;;;;;;;;;;;;:49;;;:63;;;;:::i;:::-;:81;36316:121;;;;-1:-1:-1;;;36316:121:0;;;;;;;:::i;:::-;36496:63;36527:10;36539:7;:5;:7::i;36496:63::-;36631:10;36566:27;36594:10;36566:39;;;;;;-1:-1:-1;;;36566:39:0;;;;;;;;;;;;;;;;;;;:62;;;:75;;;;;;;:::i;:::-;;;;-1:-1:-1;;36646:61:0;;;;36663:41;36693:10;36663:29;:41::i;:::-;36742:10;-1:-1:-1;;;;;36718:54:0;-1:-1:-1;;;;;;;;;;;36727:1:0;36730:10;36754;36766:5;36718:54;;;;;;;;;:::i;31593:389::-;31684:7;:5;:7::i;:::-;-1:-1:-1;;;;;31670:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31662:91;;;;-1:-1:-1;;;31662:91:0;;;;;;;:::i;:::-;31774:22;31797:10;31774:34;;;;;;-1:-1:-1;;;31774:34:0;;;;;;;;;;;;;;;;;;;;;;:40;;;31766:80;;;;-1:-1:-1;;;31766:80:0;;;;;;;:::i;:::-;31910:5;31867:22;31890:10;31867:34;;;;;;-1:-1:-1;;;31867:34:0;;;;;;;;;;;;;;;;;;;;;;:48;;-1:-1:-1;;31867:48:0;;;;;;;;;;31931:43;;31963:10;;31931:43;;;;31951:10;;31931:43;:::i;34538:1046::-;34687:26;;;;:58;;;;-1:-1:-1;34718:27:0;;;;;;;34717:28;34687:58;34679:67;;;;;;34782:7;:5;:7::i;:::-;-1:-1:-1;;;;;34768:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34759:5;:52;;34751:106;;;;-1:-1:-1;;;34751:106:0;;;;;;;:::i;:::-;34907:7;:5;:7::i;:::-;-1:-1:-1;;;;;34893:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34873:16;:55;;34865:99;;;;-1:-1:-1;;;34865:99:0;;;;;;;:::i;:::-;34969:20;34992:16;:14;:16::i;:::-;34969:39;-1:-1:-1;35062:4:0;35040:19;34969:39;35055:4;35040:19;:::i;:::-;:26;;;;:::i;:::-;35024:11;:43;;:86;;;;-1:-1:-1;35087:22:0;:12;35102:7;35087:22;:::i;:::-;35071:11;:39;;35024:86;35016:95;;;;;;35193:7;:5;:7::i;:::-;-1:-1:-1;;;;;35179:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35139:23;35157:5;35139:15;:23;:::i;:::-;:37;;35166:9;35139:37;:::i;:::-;:83;;;;:::i;:::-;35127:9;:95;35119:104;;;;;;35245:69;35276:10;35288:7;:5;:7::i;:::-;-1:-1:-1;;;;;35252:5:0;35245:30;;:69;35297:16;35245:30;:69::i;:::-;35366:100;;;;;;;;35392:4;35366:100;;;;;;;;;35409:15;35366:100;;;;;;;;;;;;-1:-1:-1;35366:100:0;;;;;;;;;;;;;;;;;;35322:27;:156;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35322:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35519:34;35559:10;;-1:-1:-1;;;;;;;;;;;35500:76:0;35519:38;;35392:4;;35519:38;:::i;:::-;35571:4;35500:76;;;;;;;;:::i;22042:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22042:53:0;;;;;;;;;;;:::o;26837:567::-;26927:22;26950:10;26927:34;;;;;;-1:-1:-1;;;26927:34:0;;;;;;;;;;;;;;;;;;;;;;:40;;;26919:60;;;;-1:-1:-1;;;26919:60:0;;;;;;;:::i;:::-;27137:15;27105:7;:5;:7::i;:::-;-1:-1:-1;;;;;27091:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27048:22;27071:10;27048:34;;;;;;-1:-1:-1;;;27048:34:0;;;;;;;;;;;;;;;;;;;:40;;;26992:22;27015:10;26992:34;;;;;;-1:-1:-1;;;26992:34:0;;;;;;;;;;;;;;;;;;;:53;;;:96;;;;:::i;:::-;:142;;;;:::i;:::-;:160;26984:200;;;;-1:-1:-1;;;26984:200:0;;;;;;;:::i;:::-;27194:63;27225:10;27237:7;:5;:7::i;27194:63::-;27324:10;27264:22;27287:10;27264:34;;;;;;-1:-1:-1;;;27264:34:0;;;;;;;;;;;;;;;;;;;:57;;;:70;;;;;;;:::i;:::-;;;;-1:-1:-1;;27346:53:0;;27370:10;;-1:-1:-1;;;;;;;;;;;27346:53:0;;;27355:1;;27358:10;;27382;;27394:4;;27346:53;:::i;23538:45::-;;;;:::o;42834:808::-;42907:14;;;;:43;;;;-1:-1:-1;42925:25:0;;;;42907:43;42899:52;;;;;;42999:1;42987:11;;:13;;;;:::i;:::-;42970:12;:31;;42962:40;;;;;;43017:20;43040:16;:14;:16::i;:::-;43017:39;-1:-1:-1;43061:21:0;43116:6;43086:26;43101:11;43017:39;43086:26;:::i;:::-;43085:37;;;;:::i;:::-;43061:61;;43186:20;43286:5;43257:7;:5;:7::i;:::-;-1:-1:-1;;;;;43243:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43227:56;;:13;:56;:::i;:::-;:64;;;;:::i;:::-;43210:82;;:13;:82;:::i;:::-;43186:106;;43322:7;:5;:7::i;:::-;-1:-1:-1;;;;;43308:35:0;;43344:12;43308:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43368:14:0;:22;;-1:-1:-1;;43368:22:0;;;-1:-1:-1;43493:7:0;;-1:-1:-1;43493:5:0;:7::i;:::-;-1:-1:-1;;;;;43479:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;43517:2;43479:40;:::i;:::-;43450:5;-1:-1:-1;;;;;43443:23:0;;43467:7;:5;:7::i;:::-;43443:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;43440:195;;43527:102;43558:7;:5;:7::i;:::-;43575:10;43602:7;:5;:7::i;:::-;-1:-1:-1;;;;;43588:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;43626:2;43588:40;:::i;43527:102::-;42834:808;;;:::o;43649:95::-;43721:5;-1:-1:-1;;;;;43701:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43688:10;:48;;-1:-1:-1;;;;;;43688:48:0;-1:-1:-1;;;;;43688:48:0;;;;;;;;;;43649:95::o;43890:101::-;43930:53;43964:5;-1:-1:-1;;;;;43949:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43930:18;:53::i;18781:201::-;18103:12;:10;:12::i;:::-;-1:-1:-1;;;;;18092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;18092:23:0;;18084:68;;;;-1:-1:-1;;;18084:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18870:22:0;::::1;18862:73;;;;-1:-1:-1::0;;;18862:73:0::1;;;;;;;:::i;:::-;18946:28;18965:8;18946:18;:28::i;:::-;18781:201:::0;:::o;44840:313::-;44922:25;;44898:7;;44922:25;;44918:228;;45016:18;:11;45030:4;45016:18;:::i;:::-;44985:7;:5;:7::i;:::-;-1:-1:-1;;;;;44971:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;;;:::i;:::-;44964:70;;;;44918:228;45127:6;45088:7;:5;:7::i;:::-;-1:-1:-1;;;;;45074:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;45119:5;45074:50;:::i;:::-;:59;;;;:::i;28707:1615::-;28795:7;:5;:7::i;:::-;-1:-1:-1;;;;;28781:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28779:44;28771:79;;;;-1:-1:-1;;;28771:79:0;;;;;;;:::i;:::-;28933:7;:5;:7::i;:::-;-1:-1:-1;;;;;28919:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28890:5;-1:-1:-1;;;;;28883:23:0;;28907:7;:5;:7::i;:::-;28883:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:83;;28861:146;;;;-1:-1:-1;;;28861:146:0;;;;;;;:::i;:::-;29023:22;29046:10;29023:34;;;;;;-1:-1:-1;;;29023:34:0;;;;;;;;;;;;;;;;;;;;;;:40;;;:48;;:40;:48;29015:77;;;;-1:-1:-1;;;29015:77:0;;;;;;;:::i;:::-;29127:22;29150:10;29127:34;;;;;;-1:-1:-1;;;29127:34:0;;;;;;;;;;;;;;;;;;;:44;;;29108:15;:63;;29100:99;;;;-1:-1:-1;;;29100:99:0;;;;;;;:::i;:::-;29231:7;:5;:7::i;:::-;-1:-1:-1;;;;;29217:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29215:52;29207:79;;;;-1:-1:-1;;;29207:79:0;;;;;;;:::i;:::-;29300:27;;;;;;;29299:28;;:78;;-1:-1:-1;29332:25:0;;;;:44;;;;-1:-1:-1;29362:14:0;;;;29361:15;29332:44;29291:133;;;;-1:-1:-1;;;29291:133:0;;;;;;;:::i;:::-;29503:22;29526:10;29503:34;;;;;;-1:-1:-1;;;29503:34:0;;;;;;;;;;;;;;;;;;;:57;;;29442:22;29465:10;29442:34;;;;;;-1:-1:-1;;;29442:34:0;;;;;;;;;;;;;;;;;;;:57;;;:118;29439:876;;29695:7;:5;:7::i;:::-;-1:-1:-1;;;;;29681:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29665:13;:63;29734:69;29765:7;:5;:7::i;:::-;29789:13;;-1:-1:-1;;;;;29741:5:0;29734:30;;:69;29782:4;;29734:30;:69::i;:::-;29829:7;:5;:7::i;:::-;-1:-1:-1;;;;;29815:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29920:7;:5;:7::i;:::-;-1:-1:-1;;;;;29906:35:0;;29942:22;29965:10;29942:34;;;;;;-1:-1:-1;;;29942:34:0;;;;;;;;;;;;;;;;;;;:49;;;29906:86;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30046:5;30003:22;30026:10;30003:34;;;;;;-1:-1:-1;;;30003:34:0;;;;;;;;;;;;;;;;;;;;;;:48;;-1:-1:-1;;30003:48:0;;;;;;;;;;30057:21;:34;;;30127:12;30097:27;:42;30159:7;:5;:7::i;:::-;-1:-1:-1;;;;;30145:47:0;;30193:4;30145:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30245:10;-1:-1:-1;;;;;30214:48:0;-1:-1:-1;;;;;;;;;;;30230:1:0;30233:10;30257:4;30214:48;;;;;;;;:::i;:::-;;;;;;;;29439:876;;;30280:29;30298:10;30280:17;:29::i;22572:25::-;;;-1:-1:-1;;;;;22572:25:0;;:::o;22313:29::-;;;:::o;44391:198::-;44537:42;;-1:-1:-1;;;44537:42:0;;44439:7;;-1:-1:-1;;;;;44544:8:0;44537:26;;;;:42;;44572:5;;44537:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44511:8;-1:-1:-1;;;;;44504:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;;;:::i;:::-;44496:84;;:4;:84;:::i;:::-;44468:5;-1:-1:-1;;;;;44468:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:112;;;;:::i;:::-;44460:121;;44391:198;:::o;12840:248::-;12984:96;13004:5;13034:27;;;13063:4;13069:2;13073:5;13011:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;13011:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13011:68:0;-1:-1:-1;;;;;;13011:68:0;;;;;;;;;;12984:19;:96::i;:::-;12840:248;;;;:::o;16596:98::-;16676:10;16596:98;:::o;19142:191::-;19216:16;19235:6;;-1:-1:-1;;;;;19252:17:0;;;-1:-1:-1;;;;;;19252:17:0;;;;;;19285:40;;19235:6;;;;;;;19285:40;;19216:16;19285:40;19142:191;;:::o;15194:716::-;15618:23;15644:69;15672:4;15644:69;;;;;;;;;;;;;;;;;15652:5;-1:-1:-1;;;;;15644:27:0;;;:69;;;;;:::i;:::-;15728:17;;15618:95;;-1:-1:-1;15728:21:0;15724:179;;15825:10;15814:30;;;;;;;;;;;;:::i;:::-;15806:85;;;;-1:-1:-1;;;15806:85:0;;;;;;;:::i;3916:229::-;4053:12;4085:52;4107:6;4115:4;4121:1;4124:12;4085:21;:52::i;:::-;4078:59;;3916:229;;;;;;:::o;5036:510::-;5206:12;5264:5;5239:21;:30;;5231:81;;;;-1:-1:-1;;;5231:81:0;;;;;;;:::i;:::-;5331:18;5342:6;5331:10;:18::i;:::-;5323:60;;;;-1:-1:-1;;;5323:60:0;;;;;;;:::i;:::-;5397:12;5411:23;5438:6;-1:-1:-1;;;;;5438:11:0;5457:5;5464:4;5438:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5396:73;;;;5487:51;5504:7;5513:10;5525:12;5487:16;:51::i;:::-;5480:58;5036:510;-1:-1:-1;;;;;;;5036:510:0:o;1171:326::-;1231:4;1488:1;1466:7;-1:-1:-1;;;;;1466:12:0;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;;1171:326;-1:-1:-1;;1171:326:0:o;7722:712::-;7872:12;7901:7;7897:530;;;-1:-1:-1;7932:10:0;7925:17;;7897:530;8046:17;;:21;8042:374;;8244:10;8238:17;8305:15;8292:10;8288:2;8284:19;8277:44;8192:148;8387:12;8380:20;;-1:-1:-1;;;8380:20:0;;;;;;;;:::i;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:257::-;;666:2;654:9;645:7;641:23;637:32;634:2;;;687:6;679;672:22;634:2;724:9;718:16;743:30;767:5;743:30;:::i;808:190::-;;920:2;908:9;899:7;895:23;891:32;888:2;;;941:6;933;926:22;888:2;-1:-1:-1;969:23:1;;878:120;-1:-1:-1;878:120:1:o;1003:194::-;;1126:2;1114:9;1105:7;1101:23;1097:32;1094:2;;;1147:6;1139;1132:22;1094:2;-1:-1:-1;1175:16:1;;1084:113;-1:-1:-1;1084:113:1:o;1202:258::-;;;1331:2;1319:9;1310:7;1306:23;1302:32;1299:2;;;1352:6;1344;1337:22;1299:2;-1:-1:-1;;1380:23:1;;;1450:2;1435:18;;;1422:32;;-1:-1:-1;1289:171:1:o;1465:389::-;;;;1608:2;1596:9;1587:7;1583:23;1579:32;1576:2;;;1629:6;1621;1614:22;1576:2;1670:9;1657:23;1647:33;;1727:2;1716:9;1712:18;1699:32;1689:42;;1781:2;1770:9;1766:18;1753:32;1794:30;1818:5;1794:30;:::i;:::-;1843:5;1833:15;;;1566:288;;;;;:::o;1859:395::-;;;;;2022:3;2010:9;2001:7;1997:23;1993:33;1990:2;;;2044:6;2036;2029:22;1990:2;-1:-1:-1;;2072:23:1;;;2142:2;2127:18;;2114:32;;-1:-1:-1;2193:2:1;2178:18;;2165:32;;2244:2;2229:18;2216:32;;-1:-1:-1;1980:274:1;-1:-1:-1;1980:274:1:o;2259:464::-;;;;;;2439:3;2427:9;2418:7;2414:23;2410:33;2407:2;;;2461:6;2453;2446:22;2407:2;-1:-1:-1;;2489:23:1;;;2559:2;2544:18;;2531:32;;-1:-1:-1;2610:2:1;2595:18;;2582:32;;2661:2;2646:18;;2633:32;;-1:-1:-1;2712:3:1;2697:19;2684:33;;-1:-1:-1;2397:326:1;-1:-1:-1;2397:326:1:o;2728:274::-;;2895:6;2889:13;2911:53;2957:6;2952:3;2945:4;2937:6;2933:17;2911:53;:::i;:::-;2980:16;;;;;2865:137;-1:-1:-1;;2865:137:1:o;3007:203::-;-1:-1:-1;;;;;3171:32:1;;;;3153:51;;3141:2;3126:18;;3108:102::o;3215:375::-;-1:-1:-1;;;;;3473:15:1;;;3455:34;;3525:15;;;;3520:2;3505:18;;3498:43;3572:2;3557:18;;3550:34;;;;3405:2;3390:18;;3372:218::o;3595:187::-;3760:14;;3753:22;3735:41;;3723:2;3708:18;;3690:92::o;3787:617::-;4121:14;;4114:22;4096:41;;4168:2;4153:18;;4146:34;;;;4211:2;4196:18;;4189:34;;;;4254:2;4239:18;;4232:34;;;;4297:3;4282:19;;4275:35;4341:3;4326:19;;4319:35;4385:3;4370:19;;4363:35;4083:3;4068:19;;4050:354::o;4409:689::-;4771:14;;4764:22;4746:41;;4818:2;4803:18;;4796:34;;;;4861:2;4846:18;;4839:34;;;;4904:2;4889:18;;4882:34;;;;4947:3;4932:19;;4925:35;4991:3;4976:19;;4969:35;5035:3;5020:19;;5013:35;5079:3;5064:19;;5057:35;4733:3;4718:19;;4700:398::o;5325:185::-;5479:25;;;5467:2;5452:18;;5434:76::o;5515:337::-;5719:25;;;5775:2;5760:18;;5753:34;;;;5830:14;5823:22;5818:2;5803:18;;5796:50;5707:2;5692:18;;5674:178::o;5857:409::-;6090:25;;;6146:2;6131:18;;6124:34;;;;6189:2;6174:18;;6167:34;6244:14;6237:22;6232:2;6217:18;;6210:50;6077:3;6062:19;;6044:222::o;7027:383::-;;7176:2;7165:9;7158:21;7208:6;7202:13;7251:6;7246:2;7235:9;7231:18;7224:34;7267:66;7326:6;7321:2;7310:9;7306:18;7301:2;7293:6;7289:15;7267:66;:::i;:::-;7394:2;7373:15;-1:-1:-1;;7369:29:1;7354:45;;;;7401:2;7350:54;;7148:262;-1:-1:-1;;7148:262:1:o;7415:340::-;7617:2;7599:21;;;7656:2;7636:18;;;7629:30;-1:-1:-1;;;7690:2:1;7675:18;;7668:46;7746:2;7731:18;;7589:166::o;7760:346::-;7962:2;7944:21;;;8001:2;7981:18;;;7974:30;-1:-1:-1;;;8035:2:1;8020:18;;8013:52;8097:2;8082:18;;7934:172::o;8111:339::-;8313:2;8295:21;;;8352:2;8332:18;;;8325:30;-1:-1:-1;;;8386:2:1;8371:18;;8364:45;8441:2;8426:18;;8285:165::o;8455:349::-;8657:2;8639:21;;;8696:2;8676:18;;;8669:30;8735:27;8730:2;8715:18;;8708:55;8795:2;8780:18;;8629:175::o;8809:409::-;9011:2;8993:21;;;9050:2;9030:18;;;9023:30;9089:34;9084:2;9069:18;;9062:62;-1:-1:-1;;;9155:2:1;9140:18;;9133:43;9208:3;9193:19;;8983:235::o;9223:406::-;9425:2;9407:21;;;9464:2;9444:18;;;9437:30;9503:34;9498:2;9483:18;;9476:62;-1:-1:-1;;;9569:2:1;9554:18;;9547:40;9619:3;9604:19;;9397:232::o;9634:338::-;9836:2;9818:21;;;9875:2;9855:18;;;9848:30;-1:-1:-1;;;9909:2:1;9894:18;;9887:44;9963:2;9948:18;;9808:164::o;9977:404::-;10179:2;10161:21;;;10218:2;10198:18;;;10191:30;10257:34;10252:2;10237:18;;10230:62;-1:-1:-1;;;10323:2:1;10308:18;;10301:38;10371:3;10356:19;;10151:230::o;10386:402::-;10588:2;10570:21;;;10627:2;10607:18;;;10600:30;10666:34;10661:2;10646:18;;10639:62;-1:-1:-1;;;10732:2:1;10717:18;;10710:36;10778:3;10763:19;;10560:228::o;10793:337::-;10995:2;10977:21;;;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11068:2:1;11053:18;;11046:43;11121:2;11106:18;;10967:163::o;11135:347::-;11337:2;11319:21;;;11376:2;11356:18;;;11349:30;11415:25;11410:2;11395:18;;11388:53;11473:2;11458:18;;11309:173::o;11487:350::-;11689:2;11671:21;;;11728:2;11708:18;;;11701:30;11767:28;11762:2;11747:18;;11740:56;11828:2;11813:18;;11661:176::o;11842:347::-;12044:2;12026:21;;;12083:2;12063:18;;;12056:30;12122:25;12117:2;12102:18;;12095:53;12180:2;12165:18;;12016:173::o;12194:404::-;12396:2;12378:21;;;12435:2;12415:18;;;12408:30;12474:34;12469:2;12454:18;;12447:62;-1:-1:-1;;;12540:2:1;12525:18;;12518:38;12588:3;12573:19;;12368:230::o;12603:426::-;12805:2;12787:21;;;12844:2;12824:18;;;12817:30;12883:34;12878:2;12863:18;;12856:62;12954:32;12949:2;12934:18;;12927:60;13019:3;13004:19;;12777:252::o;13034:351::-;13236:2;13218:21;;;13275:2;13255:18;;;13248:30;13314:29;13309:2;13294:18;;13287:57;13376:2;13361:18;;13208:177::o;13390:402::-;13592:2;13574:21;;;13631:2;13611:18;;;13604:30;13670:34;13665:2;13650:18;;13643:62;-1:-1:-1;;;13736:2:1;13721:18;;13714:36;13782:3;13767:19;;13564:228::o;13797:340::-;13999:2;13981:21;;;14038:2;14018:18;;;14011:30;-1:-1:-1;;;14072:2:1;14057:18;;14050:46;14128:2;14113:18;;13971:166::o;14142:339::-;14344:2;14326:21;;;14383:2;14363:18;;;14356:30;-1:-1:-1;;;14417:2:1;14402:18;;14395:45;14472:2;14457:18;;14316:165::o;14486:347::-;14688:2;14670:21;;;14727:2;14707:18;;;14700:30;14766:25;14761:2;14746:18;;14739:53;14824:2;14809:18;;14660:173::o;14838:398::-;15040:2;15022:21;;;15079:2;15059:18;;;15052:30;15118:34;15113:2;15098:18;;15091:62;-1:-1:-1;;;15184:2:1;15169:18;;15162:32;15226:3;15211:19;;15012:224::o;15241:353::-;15443:2;15425:21;;;15482:2;15462:18;;;15455:30;15521:31;15516:2;15501:18;;15494:59;15585:2;15570:18;;15415:179::o;15599:356::-;15801:2;15783:21;;;15820:18;;;15813:30;15879:34;15874:2;15859:18;;15852:62;15946:2;15931:18;;15773:182::o;15960:405::-;16162:2;16144:21;;;16201:2;16181:18;;;16174:30;16240:34;16235:2;16220:18;;16213:62;-1:-1:-1;;;16306:2:1;16291:18;;16284:39;16355:3;16340:19;;16134:231::o;16370:340::-;16572:2;16554:21;;;16611:2;16591:18;;;16584:30;-1:-1:-1;;;16645:2:1;16630:18;;16623:46;16701:2;16686:18;;16544:166::o;16715:351::-;16917:2;16899:21;;;16956:2;16936:18;;;16929:30;16995:29;16990:2;16975:18;;16968:57;17057:2;17042:18;;16889:177::o;17071:345::-;17273:2;17255:21;;;17312:2;17292:18;;;17285:30;-1:-1:-1;;;17346:2:1;17331:18;;17324:51;17407:2;17392:18;;17245:171::o;17421:338::-;17623:2;17605:21;;;17662:2;17642:18;;;17635:30;-1:-1:-1;;;17696:2:1;17681:18;;17674:44;17750:2;17735:18;;17595:164::o;17764:355::-;17966:2;17948:21;;;18005:2;17985:18;;;17978:30;18044:33;18039:2;18024:18;;18017:61;18110:2;18095:18;;17938:181::o;18124:352::-;18326:2;18308:21;;;18365:2;18345:18;;;18338:30;18404;18399:2;18384:18;;18377:58;18467:2;18452:18;;18298:178::o;18481:353::-;18683:2;18665:21;;;18722:2;18702:18;;;18695:30;18761:31;18756:2;18741:18;;18734:59;18825:2;18810:18;;18655:179::o;18839:337::-;19041:2;19023:21;;;19080:2;19060:18;;;19053:30;-1:-1:-1;;;19114:2:1;19099:18;;19092:43;19167:2;19152:18;;19013:163::o;19181:406::-;19383:2;19365:21;;;19422:2;19402:18;;;19395:30;19461:34;19456:2;19441:18;;19434:62;-1:-1:-1;;;19527:2:1;19512:18;;19505:40;19577:3;19562:19;;19355:232::o;19592:335::-;19794:2;19776:21;;;19833:2;19813:18;;;19806:30;-1:-1:-1;;;19867:2:1;19852:18;;19845:41;19918:2;19903:18;;19766:161::o;19932:339::-;20134:2;20116:21;;;20173:2;20153:18;;;20146:30;-1:-1:-1;;;20207:2:1;20192:18;;20185:45;20262:2;20247:18;;20106:165::o;20276:344::-;20478:2;20460:21;;;20517:2;20497:18;;;20490:30;-1:-1:-1;;;20551:2:1;20536:18;;20529:50;20611:2;20596:18;;20450:170::o;20625:340::-;20827:2;20809:21;;;20866:2;20846:18;;;20839:30;-1:-1:-1;;;20900:2:1;20885:18;;20878:46;20956:2;20941:18;;20799:166::o;20970:355::-;21172:2;21154:21;;;21211:2;21191:18;;;21184:30;21250:33;21245:2;21230:18;;21223:61;21316:2;21301:18;;21144:181::o;21330:352::-;21532:2;21514:21;;;21571:2;21551:18;;;21544:30;21610;21605:2;21590:18;;21583:58;21673:2;21658:18;;21504:178::o;21687:330::-;21889:2;21871:21;;;21928:1;21908:18;;;21901:29;-1:-1:-1;;;21961:2:1;21946:18;;21939:37;22008:2;21993:18;;21861:156::o;22204:535::-;22491:25;;;22547:2;22532:18;;22525:34;;;;22590:2;22575:18;;22568:34;;;;22633:2;22618:18;;22611:34;22676:3;22661:19;;22654:35;22720:3;22705:19;;22698:35;22478:3;22463:19;;22445:294::o;22744:128::-;;22815:1;22811:6;22808:1;22805:13;22802:2;;;22821:18;;:::i;:::-;-1:-1:-1;22857:9:1;;22792:80::o;22877:120::-;;22943:1;22933:2;;22948:18;;:::i;:::-;-1:-1:-1;22982:9:1;;22923:74::o;23002:168::-;;23108:1;23104;23100:6;23096:14;23093:1;23090:21;23085:1;23078:9;23071:17;23067:45;23064:2;;;23115:18;;:::i;:::-;-1:-1:-1;23155:9:1;;23054:116::o;23175:125::-;;23243:1;23240;23237:8;23234:2;;;23248:18;;:::i;:::-;-1:-1:-1;23285:9:1;;23224:76::o;23305:258::-;23377:1;23387:113;23401:6;23398:1;23395:13;23387:113;;;23477:11;;;23471:18;23458:11;;;23451:39;23423:2;23416:10;23387:113;;;23518:6;23515:1;23512:13;23509:2;;;-1:-1:-1;;23553:1:1;23535:16;;23528:27;23358:205::o;23568:135::-;;-1:-1:-1;;23628:17:1;;23625:2;;;23648:18;;:::i;:::-;-1:-1:-1;23695:1:1;23684:13;;23615:88::o;23708:112::-;;23766:1;23756:2;;23771:18;;:::i;:::-;-1:-1:-1;23805:9:1;;23746:74::o;23825:127::-;23886:10;23881:3;23877:20;23874:1;23867:31;23917:4;23914:1;23907:15;23941:4;23938:1;23931:15;23957:127;24018:10;24013:3;24009:20;24006:1;23999:31;24049:4;24046:1;24039:15;24073:4;24070:1;24063:15;24089:133;-1:-1:-1;;;;;24166:31:1;;24156:42;;24146:2;;24212:1;24209;24202:12;24227:120;24315:5;24308:13;24301:21;24294:5;24291:32;24281:2;;24337:1;24334;24327:12

Swarm Source

ipfs://1c3210d7ae808143c50704d91913582283390ec3829128fe742d81784d24fa49
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.