Contract 0x97d60e13127a2341763fb82948b9c78d6e205075

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xbc2ad2f904e876d369f1e631e33465ba5127a02378c98cdbccf71f9436d4b3e9Set Token279800542022-01-14 23:34:43215 days 7 hrs ago0xdcedd1900d8407447d624b4106a253c9a5f7d831 IN  0x97d60e13127a2341763fb82948b9c78d6e2050750 FTM0.017944397744
0x5ac11bfb5e6fecdf71e2b358f6452b7a35538a954289ea45d326c62bc38ed5f60x60806040279800282022-01-14 23:34:24215 days 7 hrs ago0xdcedd1900d8407447d624b4106a253c9a5f7d831 IN  Create: NODERewardManagement0 FTM1.125538210992
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x5ac11bfb5e6fecdf71e2b358f6452b7a35538a954289ea45d326c62bc38ed5f6279800282022-01-14 23:34:24215 days 7 hrs ago 0xdcedd1900d8407447d624b4106a253c9a5f7d831  Contract Creation0 FTM
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
NODERewardManagement

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2022-01-15
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is TKNaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouTKNd) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouTKNd) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouTKNd) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouTKNd) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint256) values;
        mapping(address => uint256) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint256) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key)
    public
    view
    returns (int256)
    {
        if (!map.inserted[key]) {
            return -1;
        }
        return int256(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint256 index)
    public
    view
    returns (address)
    {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint256) {
        return map.keys.length;
    }

    function set(
        Map storage map,
        address key,
        uint256 val
    ) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint256 index = map.indexOf[key];
        uint256 lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

contract NODERewardManagement {
    using SafeMath for uint256;
    using IterableMapping for IterableMapping.Map;

    struct NodeEntity {
        string name;
        uint256 creationTime;
        uint256 lastClaimTime;
        uint256 rewardAvailable;
        uint256 cashoutFee;
    }

    IterableMapping.Map private nodeOwners;
    mapping(address => NodeEntity[]) private _nodesOfUser;

    uint256 public nodePrice;
    uint256 public rewardPerNode;
    uint256 public rewardPerNodeAfterBreakEven;
    uint256 public claimTime;
    uint256[] public nodePricesArray;
    uint256[] public rewardPricesArray;

    address public gateKeeper;
    address public token;

    bool public autoDistri = false;
    bool public distribution = false;

    uint256 public gasForDistribution = 300000;
    uint256 public lastDistributionCount = 0;
    uint256 public lastIndexProcessed = 0;

    uint256 public totalNodesCreated = 0;
    uint256 public totalRewardStaked = 0;

    uint256 public firstStageCashoutFee;
    uint256 public secondStageCashoutFee;
    uint256 public thirdStageCashoutFee;

    constructor(
        uint256 _nodePrice,
        uint256 _rewardPerNode,
        uint256 _claimTime,
        uint256 _firstStageCashoutFee,
        uint256 _secondStageCashoutFee,
        uint256 _thirdStageCashoutFee,
        uint256 _rewardPerNodeAfterBreakEven
    ) {
        nodePrice = _nodePrice;
        rewardPerNode = _rewardPerNode; // whatever we pass here will be like reward per day
        claimTime = _claimTime;
        gateKeeper = msg.sender;
        firstStageCashoutFee = _firstStageCashoutFee;
        secondStageCashoutFee = _secondStageCashoutFee;
        thirdStageCashoutFee = _thirdStageCashoutFee;
        rewardPerNodeAfterBreakEven = _rewardPerNodeAfterBreakEven;
    }

    modifier onlySentry() {
        require(msg.sender == token || msg.sender == gateKeeper, "Fuck off");
        _;
    }

    function setToken (address token_) external onlySentry {
        token = token_;
    }

    function distributeRewards(uint256 gas, uint256 rewardNode)
    private
    returns (
        uint256,
        uint256,
        uint256
    )
    {
        distribution = true;
        uint256 numberOfnodeOwners = nodeOwners.keys.length;
        require(numberOfnodeOwners > 0, "DISTRI REWARDS: NO NODE OWNERS");
        if (numberOfnodeOwners == 0) {
            return (0, 0, lastIndexProcessed);
        }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 newGasLeft;
        uint256 localLastIndex = lastIndexProcessed;
        
        uint256 iterations = 0;
        uint256 newClaimTime = block.timestamp;
        uint256 nodesCount;
        uint256 claims = 0;
        NodeEntity[] storage nodes;
        NodeEntity storage _node;

        while (gasUsed < gas && iterations < numberOfnodeOwners) {
            localLastIndex++;
            if (localLastIndex >= nodeOwners.keys.length) {
                localLastIndex = 0;
            }
            nodes = _nodesOfUser[nodeOwners.keys[localLastIndex]];
            nodesCount = nodes.length;
            for (uint256 i = 0; i < nodesCount; i++) {
                _node = nodes[i];
                if (claimable(_node)) {
                    _node.rewardAvailable += rewardNode;
                    _node.lastClaimTime = newClaimTime;
                    totalRewardStaked += rewardNode;
                    claims++;
                }
            }
            iterations++;

            newGasLeft = gasleft();

            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }

            gasLeft = newGasLeft;
        }
        lastIndexProcessed = localLastIndex;
        
        distribution = false;
        return (iterations, claims, lastIndexProcessed);
    }

    function createNode(address account, string memory nodeName) external onlySentry {
        require(
            isNameAvailable(account, nodeName),
            "CREATE NODE: Name not available"
        );
        _nodesOfUser[account].push(
            NodeEntity({
                name: nodeName,
                creationTime: block.timestamp,
                lastClaimTime: block.timestamp,
                // rewardAvailable: rewardPerNode,
                rewardAvailable: 0,
                cashoutFee: firstStageCashoutFee
            })
        );
        nodeOwners.set(account, _nodesOfUser[account].length);
        totalNodesCreated++;
        if (autoDistri && !distribution) {
            distributeRewards(gasForDistribution, rewardPerNode);
        }
    }

    function isNameAvailable(address account, string memory nodeName)
    private
    view
    returns (bool)
    {
        NodeEntity[] memory nodes = _nodesOfUser[account];
        for (uint256 i = 0; i < nodes.length; i++) { 
            if (keccak256(bytes(nodes[i].name)) == keccak256(bytes(nodeName))) {
                return false;
            }
        }
        return true;
    }

    function _burn(uint256 index) internal {
        require(index < nodeOwners.size());
        nodeOwners.remove(nodeOwners.getKeyAtIndex(index));
    }

    function _getNodeWithCreatime(
        NodeEntity[] storage nodes,
        uint256 _creationTime
    ) private view returns (NodeEntity storage) {
        uint256 numberOfNodes = nodes.length;
        require(
            numberOfNodes > 0,
            "CASHOUT ERROR: You don't have nodes to cash-out"
        );
        bool found = false;
        int256 index = binary_search(nodes, 0, numberOfNodes, _creationTime);
        uint256 validIndex;
        if (index >= 0) {
            found = true;
            validIndex = uint256(index);
        }
        require(found, "NODE SEARCH: No NODE Found with this blocktime");
        return nodes[validIndex];
    }

    function binary_search(
        NodeEntity[] memory arr,
        uint256 low,
        uint256 high,
        uint256 x
    ) private view returns (int256) {
        if (high >= low) {
            uint256 mid = (high + low).div(2);
            if (arr[mid].creationTime == x) {
                return int256(mid);
            } else if (arr[mid].creationTime > x) {
                return binary_search(arr, low, mid - 1, x);
            } else {
                return binary_search(arr, mid + 1, high, x);
            }
        } else {
            return -1;
        }
    }

    function _cashoutNodeReward(address account, uint256 _creationTime)
    external onlySentry
    returns (uint256)
    {
        require(_creationTime > 0, "NODE: CREATIME must be higher than zero");
        NodeEntity[] storage nodes = _nodesOfUser[account];
        uint256 numberOfNodes = nodes.length;
        require(
            numberOfNodes > 0,
            "CASHOUT ERROR: You don't have nodes to cash-out"
        );
        NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime);
        uint256 rewardNode = node.rewardAvailable;
        node.rewardAvailable = 0;
        node.lastClaimTime = block.timestamp;
        return rewardNode;
    }

    function _cashoutAllNodesReward(address account)
    external onlySentry
    returns (uint256)
    {
        NodeEntity[] storage nodes = _nodesOfUser[account];
        uint256 nodesCount = nodes.length;
        require(nodesCount > 0, "NODE: CREATIME must be higher than zero");
        NodeEntity storage _node;
        uint256 rewardsTotal = 0;
        for (uint256 i = 0; i < nodesCount; i++) {
            _node = nodes[i];
            rewardsTotal += _node.rewardAvailable;
            _node.rewardAvailable = 0;
            _node.lastClaimTime = block.timestamp;
        }
        return rewardsTotal;
    }

    function claimable(NodeEntity memory node) private view returns (bool) {
        return node.lastClaimTime + claimTime <= block.timestamp;
    }

   function _updateRealTimeReward(address account, uint256 _creationTime) internal onlySentry returns (uint256, uint256){
        require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER");
        require(_creationTime > 0, "NODE: CREATIME must be higher than zero");
        NodeEntity[] storage nodes = _nodesOfUser[account];
        NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime);
        uint256 currTime = block.timestamp;
        uint256 tempReward = 0;
        // algo :
        // (reward/(24*60*60)) * (curretime - lastClaimTime)
        // now we add algo here.. like
        uint daysToBreakEven = nodePrice/rewardPerNode;
        if ((currTime - node.creationTime)/(24*60*60) >= daysToBreakEven/2 ) {            
            node.cashoutFee = secondStageCashoutFee;
        }
        if ((currTime - node.creationTime)/(24*60*60) >= daysToBreakEven ) {
            node.cashoutFee = thirdStageCashoutFee;
            if (node.lastClaimTime <= (node.creationTime + daysToBreakEven * (24*60*60))) {                
                tempReward += rewardPerNode * (node.creationTime + daysToBreakEven * (24*60*60) - node.lastClaimTime);
                tempReward += rewardPerNodeAfterBreakEven * ( currTime -  node.creationTime - daysToBreakEven * (24*60*60) );
                tempReward = tempReward/(24*60*60);
            }
            if (node.lastClaimTime > (node.creationTime + daysToBreakEven * (24*60*60))) {                
                tempReward += rewardPerNodeAfterBreakEven * (currTime - node.lastClaimTime);                
                tempReward =  tempReward/(24*60*60);
            }
            
        }
        if ((currTime - node.creationTime)/(24*60*60) < daysToBreakEven) {
            tempReward = ((rewardPerNode * ( currTime - node.lastClaimTime ) )/ (24*60*60));
        }
        // tempReward = ((rewardPerNode * ( currTime - node.lastClaimTime ) )/ (24*60*60));
        node.rewardAvailable += tempReward;
        node.lastClaimTime = currTime;
        return (node.rewardAvailable, node.cashoutFee);
    }

    function _updateRealTimeRewardForAllNodes(address account) internal onlySentry returns (uint256[] memory, uint256[] memory){
        require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER");
        // require(_creationTime > 0, "NODE: CREATIME must be higher than zero");
        NodeEntity[] storage nodes = _nodesOfUser[account];
        uint256 numberOfNodes = nodes.length;
        require(
            numberOfNodes > 0,
            "CASHOUT ERROR: You don't have nodes to cash-out"
        );
        // uint256 rewardCount = 0;
        uint256 tr; 
        uint256 fee;
        uint256[] memory fees = new uint256[](numberOfNodes);
        uint256[] memory rewards = new uint256[](numberOfNodes);
        for (uint256 i = 0; i < numberOfNodes; i++) {
            (tr, fee) = _updateRealTimeReward(account, nodes[i].creationTime);
            // rewardCount += nodes[i].rewardAvailable;
            fees[i] = fee;
            rewards[i] = tr;
        }
        return (rewards, fees);
    }

    function reduceRewardAmout(address account, uint256 totalReductionTODO) external onlySentry returns (bool) {
        // require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER");
        NodeEntity[] storage nodes = _nodesOfUser[account];
        uint256 numberOfNodes = nodes.length;
        NodeEntity storage _node;
        uint256 currTime = block.timestamp;
        for (uint i =0; i< numberOfNodes; i++) {
            _node = nodes[i];
            if (totalReductionTODO == 0) {
                break;
            }
            if (_node.rewardAvailable >= totalReductionTODO) {
                _node.rewardAvailable -= totalReductionTODO;
                _node.lastClaimTime = currTime;
                totalReductionTODO = 0;
            }
            else if (_node.rewardAvailable < totalReductionTODO) {
                totalReductionTODO -= _node.rewardAvailable;
                _node.rewardAvailable = 0;
                _node.lastClaimTime = currTime;
            }
        }
        return true;
    }

    function _updateRealTimeRewardForAllNodesA(address account) external onlySentry returns (uint256[] memory, uint256[] memory){
        return _updateRealTimeRewardForAllNodes(account);
    }

    function _updateRealTimeRewardA(address account, uint256 _creationTime) external onlySentry returns (uint256, uint256) {
        return _updateRealTimeReward(account, _creationTime);
    }

    function _getRewardAmountOf(address account)
    external
    view
    returns (uint256)
    {
        require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER");
        uint256 nodesCount;
        uint256 rewardCount = 0;

        NodeEntity[] storage nodes = _nodesOfUser[account];
        nodesCount = nodes.length;

        for (uint256 i = 0; i < nodesCount; i++) {
            rewardCount += nodes[i].rewardAvailable;
        }

        return rewardCount;
    }

    function _getRewardAmountOf(address account, uint256 _creationTime)
    external
    view
    returns (uint256)
    {
        require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER");

        require(_creationTime > 0, "NODE: CREATIME must be higher than zero");
        NodeEntity[] storage nodes = _nodesOfUser[account];
        uint256 numberOfNodes = nodes.length;
        require(
            numberOfNodes > 0,
            "CASHOUT ERROR: You don't have nodes to cash-out"
        );
        NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime);
        uint256 rewardNode = node.rewardAvailable;
        return rewardNode;
    }

    function _getNodeRewardAmountOf(address account, uint256 creationTime)
    external
    view
    returns (uint256)
    {
        return
        _getNodeWithCreatime(_nodesOfUser[account], creationTime)
        .rewardAvailable;
    }

    function _getNodesNames(address account)
    external
    view
    returns (string memory)
    {
        require(isNodeOwner(account), "GET NAMES: NO NODE OWNER");
        NodeEntity[] memory nodes = _nodesOfUser[account];
        uint256 nodesCount = nodes.length;
        NodeEntity memory _node;
        string memory names = nodes[0].name;
        string memory separator = "#";
        for (uint256 i = 1; i < nodesCount; i++) {
            _node = nodes[i];
            names = string(abi.encodePacked(names, separator, _node.name));
        }
        return names;
    }

    function _getNodesCreationTime(address account)
    external
    view
    returns (string memory)
    {
        require(isNodeOwner(account), "GET CREATIME: NO NODE OWNER");
        NodeEntity[] memory nodes = _nodesOfUser[account];
        uint256 nodesCount = nodes.length;
        NodeEntity memory _node;
        string memory _creationTimes = uint2str(nodes[0].creationTime);
        string memory separator = "#";

        for (uint256 i = 1; i < nodesCount; i++) {
            _node = nodes[i];

            _creationTimes = string(
                abi.encodePacked(
                    _creationTimes,
                    separator,
                    uint2str(_node.creationTime)
                )
            );
        }
        return _creationTimes;
    }

    function _getNodesRewardAvailable(address account)
    external
    view
    returns (string memory)
    {
        require(isNodeOwner(account), "GET REWARD: NO NODE OWNER");
        NodeEntity[] memory nodes = _nodesOfUser[account];
        uint256 nodesCount = nodes.length;
        NodeEntity memory _node;
        string memory _rewardsAvailable = uint2str(nodes[0].rewardAvailable);
        string memory separator = "#";

        for (uint256 i = 1; i < nodesCount; i++) {
            _node = nodes[i];

            _rewardsAvailable = string(
                abi.encodePacked(
                    _rewardsAvailable,
                    separator,
                    uint2str(_node.rewardAvailable)
                )
            );
        }
        return _rewardsAvailable;
    }

    function _getNodesLastClaimTime(address account)
    external
    view
    returns (string memory)
    {
        require(isNodeOwner(account), "LAST CLAIME TIME: NO NODE OWNER");
        NodeEntity[] memory nodes = _nodesOfUser[account];
        uint256 nodesCount = nodes.length;
        NodeEntity memory _node;
        string memory _lastClaimTimes = uint2str(nodes[0].lastClaimTime);
        string memory separator = "#";

        for (uint256 i = 1; i < nodesCount; i++) {
            _node = nodes[i];

            _lastClaimTimes = string(
                abi.encodePacked(
                    _lastClaimTimes,
                    separator,
                    uint2str(_node.lastClaimTime)
                )
            );
        }
        return _lastClaimTimes;
    }

    function uint2str(uint256 _i)
    internal
    pure
    returns (string memory _uintAsString)
    {
        if (_i == 0) {
            return "0";
        }
        uint256 j = _i;
        uint256 len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint256 k = len;
        while (_i != 0) {
            k = k - 1;
            uint8 temp = (48 + uint8(_i - (_i / 10) * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }
        return string(bstr);
    }

    function _changeNodePrice(uint256 newNodePrice) external onlySentry {
        nodePrice = newNodePrice;
    }

    function _changeRewardPerNode(uint256 newPrice) external onlySentry {
        rewardPerNode = newPrice;
    }

    function _changeFirstStageCahoutFee(uint256 newFee) external onlySentry {
        firstStageCashoutFee = newFee;
    }

    function _changeSecondStageCashoutFee(uint256 newFee) external onlySentry {
        secondStageCashoutFee = newFee;
    }

    function _changeThirdStageCashoutFee(uint256 newFee) external onlySentry {
        thirdStageCashoutFee = newFee;
    }

    function _changeRewardPerNodeAfterBreakEven(uint256 _rewardPerNodeAfterBreakEven) external onlySentry {
        rewardPerNodeAfterBreakEven = _rewardPerNodeAfterBreakEven;
    }

    function _changeClaimTime(uint256 newTime) external onlySentry {
        claimTime = newTime;
    }

    function _changeAutoDistri(bool newMode) external onlySentry {
        autoDistri = newMode;
    }

    function _changeGasDistri(uint256 newGasDistri) external onlySentry {
        gasForDistribution = newGasDistri;
    }

    function _getNodeNumberOf(address account) public view returns (uint256) {
        return nodeOwners.get(account);
    }

    function isNodeOwner(address account) private view returns (bool) {
        return nodeOwners.get(account) > 0;
    }

    function _isNodeOwner(address account) external view returns (bool) {
        return isNodeOwner(account);
    }

    function _distributeRewards()
    external  onlySentry
    returns (
        uint256,
        uint256,
        uint256
    )
    {
        return distributeRewards(gasForDistribution, rewardPerNode);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_nodePrice","type":"uint256"},{"internalType":"uint256","name":"_rewardPerNode","type":"uint256"},{"internalType":"uint256","name":"_claimTime","type":"uint256"},{"internalType":"uint256","name":"_firstStageCashoutFee","type":"uint256"},{"internalType":"uint256","name":"_secondStageCashoutFee","type":"uint256"},{"internalType":"uint256","name":"_thirdStageCashoutFee","type":"uint256"},{"internalType":"uint256","name":"_rewardPerNodeAfterBreakEven","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_cashoutAllNodesReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"_creationTime","type":"uint256"}],"name":"_cashoutNodeReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newMode","type":"bool"}],"name":"_changeAutoDistri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTime","type":"uint256"}],"name":"_changeClaimTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"_changeFirstStageCahoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGasDistri","type":"uint256"}],"name":"_changeGasDistri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNodePrice","type":"uint256"}],"name":"_changeNodePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"_changeRewardPerNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerNodeAfterBreakEven","type":"uint256"}],"name":"_changeRewardPerNodeAfterBreakEven","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"_changeSecondStageCashoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"_changeThirdStageCashoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_distributeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_getNodeNumberOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"creationTime","type":"uint256"}],"name":"_getNodeRewardAmountOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_getNodesCreationTime","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_getNodesLastClaimTime","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_getNodesNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_getNodesRewardAvailable","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_getRewardAmountOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"_creationTime","type":"uint256"}],"name":"_getRewardAmountOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_isNodeOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"_creationTime","type":"uint256"}],"name":"_updateRealTimeRewardA","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_updateRealTimeRewardForAllNodesA","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoDistri","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"string","name":"nodeName","type":"string"}],"name":"createNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstStageCashoutFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gateKeeper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDistributionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastIndexProcessed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nodePricesArray","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"totalReductionTODO","type":"uint256"}],"name":"reduceRewardAmout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerNode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerNodeAfterBreakEven","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardPricesArray","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondStageCashoutFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thirdStageCashoutFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNodesCreated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052600c805461ffff60a01b19169055620493e0600d556000600e819055600f81905560108190556011553480156200003a57600080fd5b5060405162002ef038038062002ef08339810160408190526200005d9162000093565b600596909655600694909455600892909255600b80546001600160a01b03191633179055601255601355601455600755620000e8565b600080600080600080600060e0888a031215620000af57600080fd5b5050855160208701516040880151606089015160808a015160a08b015160c0909b0151949c939b50919990985090965094509092509050565b612df880620000f86000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c806365afc2bf11610151578063c92819ce116100c3578063dab0882a11610087578063dab0882a14610570578063dec1472614610583578063ef9bb9881461058c578063f1fec2b81461059f578063fb10d6fb146105a8578063fc0c546a146105b157600080fd5b8063c92819ce14610511578063cc512bd414610524578063cece91eb14610537578063d08f08c21461054a578063d1871a891461055d57600080fd5b80638a327eaa116101155780638a327eaa146104bd5780638e76b055146104c657806399d65b9b146104cf578063a6e15cc4146104e2578063b8527aef146104f5578063c6faedc8146104fe57600080fd5b806365afc2bf146104425780636edb70021461046a578063724765771461047d57806385c44d9d1461048657806388fe65531461049a57600080fd5b80634491a7e4116101ea5780635c298b1c116101ae5780635c298b1c146103d95780635ee58efc146103ec578063613ff46f14610400578063619a635e1461040957806363ea41b81461041c5780636590c6911461042f57600080fd5b80634491a7e41461035457806345d61ded146103675780634a389fae1461039257806355a42398146103a55780635759fb02146103c657600080fd5b80631fcb16e31161023c5780631fcb16e3146102cf5780632508de48146102e257806327b3bf11146102f5578063334de3a2146102fe5780633830af431461031e57806341ac82b01461033157600080fd5b806307144c3c146102795780631023777a1461029557806312b8603f1461029e578063144fa6d7146102b35780631df49b02146102c6575b600080fd5b61028260135481565b6040519081526020015b60405180910390f35b61028260145481565b6102b16102ac366004612960565b6105c4565b005b6102b16102c1366004612945565b6107d7565b61028260125481565b6102b16102dd366004612a6e565b610838565b6102b16102f0366004612a6e565b61087c565b61028260085481565b61031161030c366004612945565b6108c0565b60405161028c9190612b43565b61028261032c366004612a6e565b610b02565b61034461033f366004612945565b610b23565b604051901515815260200161028c565b610282610362366004612945565b610b34565b600b5461037a906001600160a01b031681565b6040516001600160a01b03909116815260200161028c565b6103116103a0366004612945565b610bc9565b6103b86103b3366004612945565b610e06565b60405161028c929190612b1e565b6103116103d4366004612945565b610e5c565b6102826103e7366004612945565b611099565b600c5461034490600160a81b900460ff1681565b61028260065481565b610282610417366004612945565b61117e565b61034461042a366004612a22565b611218565b61028261043d366004612a22565b611331565b610455610450366004612a22565b61135e565b6040805192835260208301919091520161028c565b610282610478366004612a22565b6113b7565b610282600f5481565b600c5461034490600160a01b900460ff1681565b6104a261147b565b6040805193845260208401929092529082015260600161028c565b61028260115481565b61028260075481565b6102b16104dd366004612a6e565b6114da565b6102826104f0366004612a22565b61151e565b61028260105481565b6102b161050c366004612a6e565b6115b6565b61031161051f366004612945565b6115fa565b610282610532366004612a6e565b611837565b6102b1610545366004612a6e565b611847565b6102b1610558366004612a6e565b61188b565b6102b161056b366004612a6e565b6118cf565b6102b161057e366004612a4c565b611913565b610282600d5481565b6102b161059a366004612a6e565b611970565b61028260055481565b610282600e5481565b600c5461037a906001600160a01b031681565b600c546001600160a01b03163314806105e75750600b546001600160a01b031633145b61060c5760405162461bcd60e51b815260040161060390612c43565b60405180910390fd5b61061682826119b4565b6106625760405162461bcd60e51b815260206004820152601f60248201527f435245415445204e4f44453a204e616d65206e6f7420617661696c61626c65006044820152606401610603565b6001600160a01b0382166000908152600460209081526040808320815160a0810183528581524281850181905292810192909252606082018490526012546080830152805460018101825590845292829020815180519294600502909101926106d092849290910190612866565b5060208281015160018301556040808401516002840155606084015160038401556080909301516004928301556001600160a01b038516600081815291839052838220549351632f0ad01760e21b81529283019190915260248201526044810191909152736157d2df38515a05fed1b7001becdc5b220ed6f99063bc2b405c9060640160006040518083038186803b15801561076b57600080fd5b505af415801561077f573d6000803e3d6000fd5b50506010805492509050600061079483612d65565b9091555050600c54600160a01b900460ff1680156107bc5750600c54600160a81b900460ff16155b156107d3576107cf600d54600654611b40565b5050505b5050565b600c546001600160a01b03163314806107fa5750600b546001600160a01b031633145b6108165760405162461bcd60e51b815260040161060390612c43565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633148061085b5750600b546001600160a01b031633145b6108775760405162461bcd60e51b815260040161060390612c43565b601355565b600c546001600160a01b031633148061089f5750600b546001600160a01b031633145b6108bb5760405162461bcd60e51b815260040161060390612c43565b601455565b60606108cb82611e02565b6109175760405162461bcd60e51b815260206004820152601860248201527f474554204e414d45533a204e4f204e4f4445204f574e455200000000000000006044820152606401610603565b6001600160a01b038216600090815260046020908152604080832080548251818502810185019093528083529192909190849084015b82821015610a3957838290600052602060002090600502016040518060a001604052908160008201805461098090612d2a565b80601f01602080910402602001604051908101604052809291908181526020018280546109ac90612d2a565b80156109f95780601f106109ce576101008083540402835291602001916109f9565b820191906000526020600020905b8154815290600101906020018083116109dc57829003601f168201915b505050505081526020016001820154815260200160028201548152602001600382015481526020016004820154815250508152602001906001019061094d565b505050509050600081519050610a4d6128ea565b600083600081518110610a6257610a62612d96565b60200260200101516000015190506000604051806040016040528060018152602001602360f81b81525090506000600190505b84811015610af657858181518110610aaf57610aaf612d96565b6020026020010151935082828560000151604051602001610ad293929190612adb565b60405160208183030381529060405292508080610aee90612d65565b915050610a95565b50909695505050505050565b600a8181548110610b1257600080fd5b600091825260209091200154905081565b6000610b2e82611e02565b92915050565b60405163732a2ccf60e01b81526000600482018190526001600160a01b038316602483015290736157d2df38515a05fed1b7001becdc5b220ed6f99063732a2ccf9060440160206040518083038186803b158015610b9157600080fd5b505af4158015610ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190612a87565b6060610bd482611e02565b610c205760405162461bcd60e51b815260206004820152601960248201527f474554205245574152443a204e4f204e4f4445204f574e4552000000000000006044820152606401610603565b6001600160a01b038216600090815260046020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d4257838290600052602060002090600502016040518060a0016040529081600082018054610c8990612d2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb590612d2a565b8015610d025780601f10610cd757610100808354040283529160200191610d02565b820191906000526020600020905b815481529060010190602001808311610ce557829003601f168201915b5050505050815260200160018201548152602001600282015481526020016003820154815260200160048201548152505081526020019060010190610c56565b505050509050600081519050610d566128ea565b6000610d7f84600081518110610d6e57610d6e612d96565b602002602001015160600151611ea0565b604080518082019091526001808252602360f81b6020830152919250905b84811015610af657858181518110610db757610db7612d96565b602002602001015193508282610dd08660600151611ea0565b604051602001610de293929190612adb565b60405160208183030381529060405292508080610dfe90612d65565b915050610d9d565b600c5460609081906001600160a01b0316331480610e2e5750600b546001600160a01b031633145b610e4a5760405162461bcd60e51b815260040161060390612c43565b610e5383611fc9565b91509150915091565b6060610e6782611e02565b610eb35760405162461bcd60e51b815260206004820152601f60248201527f4c41535420434c41494d452054494d453a204e4f204e4f4445204f574e4552006044820152606401610603565b6001600160a01b038216600090815260046020908152604080832080548251818502810185019093528083529192909190849084015b82821015610fd557838290600052602060002090600502016040518060a0016040529081600082018054610f1c90612d2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4890612d2a565b8015610f955780601f10610f6a57610100808354040283529160200191610f95565b820191906000526020600020905b815481529060010190602001808311610f7857829003601f168201915b5050505050815260200160018201548152602001600282015481526020016003820154815260200160048201548152505081526020019060010190610ee9565b505050509050600081519050610fe96128ea565b60006110128460008151811061100157611001612d96565b602002602001015160400151611ea0565b604080518082019091526001808252602360f81b6020830152919250905b84811015610af65785818151811061104a5761104a612d96565b6020026020010151935082826110638660400151611ea0565b60405160200161107593929190612adb565b6040516020818303038152906040529250808061109190612d65565b915050611030565b600c546000906001600160a01b03163314806110bf5750600b546001600160a01b031633145b6110db5760405162461bcd60e51b815260040161060390612c43565b6001600160a01b03821660009081526004602052604090208054806111125760405162461bcd60e51b815260040161060390612b76565b600080805b838110156111725784818154811061113157611131612d96565b906000526020600020906005020192508260030154826111519190612c65565b6000600385015542600285015591508061116a81612d65565b915050611117565b5093505050505b919050565b600061118982611e02565b6111a55760405162461bcd60e51b815260040161060390612bbd565b6001600160a01b038216600090815260046020526040812080549190815b8381101561120e578181815481106111dd576111dd612d96565b906000526020600020906005020160030154836111fa9190612c65565b92508061120681612d65565b9150506111c3565b5090949350505050565b600c546000906001600160a01b031633148061123e5750600b546001600160a01b031633145b61125a5760405162461bcd60e51b815260040161060390612c43565b6001600160a01b03831660009081526004602052604081208054909142815b838110156113235784818154811061129357611293612d96565b9060005260206000209060050201925086600014156112b157611323565b868360030154106112e557868360030160008282546112d09190612ce3565b90915550506002830182905560009650611311565b86836003015410156113115760038301546113009088612ce3565b600060038501556002840183905596505b8061131b81612d65565b915050611279565b506001979650505050505050565b6001600160a01b03821660009081526004602052604081206113539083612197565b600301549392505050565b600c5460009081906001600160a01b03163314806113865750600b546001600160a01b031633145b6113a25760405162461bcd60e51b815260040161060390612c43565b6113ac848461237b565b915091509250929050565b600c546000906001600160a01b03163314806113dd5750600b546001600160a01b031633145b6113f95760405162461bcd60e51b815260040161060390612c43565b600082116114195760405162461bcd60e51b815260040161060390612b76565b6001600160a01b03831660009081526004602052604090208054806114505760405162461bcd60e51b815260040161060390612bf4565b600061145c8386612197565b6003810180546000909155426002909201919091559695505050505050565b600c54600090819081906001600160a01b03163314806114a55750600b546001600160a01b031633145b6114c15760405162461bcd60e51b815260040161060390612c43565b6114cf600d54600654611b40565b925092509250909192565b600c546001600160a01b03163314806114fd5750600b546001600160a01b031633145b6115195760405162461bcd60e51b815260040161060390612c43565b601255565b600061152983611e02565b6115455760405162461bcd60e51b815260040161060390612bbd565b600082116115655760405162461bcd60e51b815260040161060390612b76565b6001600160a01b038316600090815260046020526040902080548061159c5760405162461bcd60e51b815260040161060390612bf4565b60006115a88386612197565b600301549695505050505050565b600c546001600160a01b03163314806115d95750600b546001600160a01b031633145b6115f55760405162461bcd60e51b815260040161060390612c43565b600655565b606061160582611e02565b6116515760405162461bcd60e51b815260206004820152601b60248201527f474554204352454154494d453a204e4f204e4f4445204f574e455200000000006044820152606401610603565b6001600160a01b038216600090815260046020908152604080832080548251818502810185019093528083529192909190849084015b8282101561177357838290600052602060002090600502016040518060a00160405290816000820180546116ba90612d2a565b80601f01602080910402602001604051908101604052809291908181526020018280546116e690612d2a565b80156117335780601f1061170857610100808354040283529160200191611733565b820191906000526020600020905b81548152906001019060200180831161171657829003601f168201915b5050505050815260200160018201548152602001600282015481526020016003820154815260200160048201548152505081526020019060010190611687565b5050505090506000815190506117876128ea565b60006117b08460008151811061179f5761179f612d96565b602002602001015160200151611ea0565b604080518082019091526001808252602360f81b6020830152919250905b84811015610af6578581815181106117e8576117e8612d96565b6020026020010151935082826118018660200151611ea0565b60405160200161181393929190612adb565b6040516020818303038152906040529250808061182f90612d65565b9150506117ce565b60098181548110610b1257600080fd5b600c546001600160a01b031633148061186a5750600b546001600160a01b031633145b6118865760405162461bcd60e51b815260040161060390612c43565b600555565b600c546001600160a01b03163314806118ae5750600b546001600160a01b031633145b6118ca5760405162461bcd60e51b815260040161060390612c43565b600755565b600c546001600160a01b03163314806118f25750600b546001600160a01b031633145b61190e5760405162461bcd60e51b815260040161060390612c43565b600855565b600c546001600160a01b03163314806119365750600b546001600160a01b031633145b6119525760405162461bcd60e51b815260040161060390612c43565b600c8054911515600160a01b0260ff60a01b19909216919091179055565b600c546001600160a01b03163314806119935750600b546001600160a01b031633145b6119af5760405162461bcd60e51b815260040161060390612c43565b600d55565b6001600160a01b038216600090815260046020908152604080832080548251818502810185019093528083528493849084015b82821015611ad357838290600052602060002090600502016040518060a0016040529081600082018054611a1a90612d2a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4690612d2a565b8015611a935780601f10611a6857610100808354040283529160200191611a93565b820191906000526020600020905b815481529060010190602001808311611a7657829003601f168201915b50505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481525050815260200190600101906119e7565b50505050905060005b8151811015611b35578380519060200120828281518110611aff57611aff612d96565b602002602001015160000151805190602001201415611b2357600092505050610b2e565b80611b2d81612d65565b915050611adc565b506001949350505050565b600c805460ff60a81b1916600160a81b179055600080548190819080611ba85760405162461bcd60e51b815260206004820152601e60248201527f44495354524920524557415244533a204e4f204e4f4445204f574e45525300006044820152606401610603565b80611bbe575050600f5460009250829150611dfb565b6000805a600f549091506000908142818080805b8f8a108015611be057508a86105b15611dd75786611bef81612d65565b60005490985088109050611c0257600096505b60046000806000018981548110611c1b57611c1b612d96565b60009182526020808320909101546001600160a01b0316835282019290925260400181208054955092505b84811015611d9f57828181548110611c6057611c60612d96565b90600052602060002090600502019150611d3e826040518060a0016040529081600082018054611c8f90612d2a565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbb90612d2a565b8015611d085780601f10611cdd57610100808354040283529160200191611d08565b820191906000526020600020905b815481529060010190602001808311611ceb57829003601f168201915b50505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481525050612648565b15611d8d578f826003016000828254611d579190612c65565b925050819055508582600201819055508f60116000828254611d799190612c65565b90915550849050611d8981612d65565b9450505b80611d9781612d65565b915050611c46565b5085611daa81612d65565b9650505a975087891115611dcf57611dcc611dc58a8a612665565b8b906126ae565b99505b879850611bd2565b5050600f859055600c805460ff60a81b19169055929a509198509196505050505050505b9250925092565b60405163732a2ccf60e01b81526000600482018190526001600160a01b0383166024830152908190736157d2df38515a05fed1b7001becdc5b220ed6f99063732a2ccf9060440160206040518083038186803b158015611e6157600080fd5b505af4158015611e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e999190612a87565b1192915050565b606081611ec45750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611eee5780611ed881612d65565b9150611ee79050600a83612ca2565b9150611ec8565b60008167ffffffffffffffff811115611f0957611f09612dac565b6040519080825280601f01601f191660200182016040528015611f33576020820181803683370190505b509050815b8515611fc057611f49600182612ce3565b90506000611f58600a88612ca2565b611f6390600a612cc4565b611f6d9088612ce3565b611f78906030612c7d565b905060008160f81b905080848481518110611f9557611f95612d96565b60200101906001600160f81b031916908160001a905350611fb7600a89612ca2565b97505050611f38565b50949350505050565b600c5460609081906001600160a01b0316331480611ff15750600b546001600160a01b031633145b61200d5760405162461bcd60e51b815260040161060390612c43565b61201683611e02565b6120325760405162461bcd60e51b815260040161060390612bbd565b6001600160a01b03831660009081526004602052604090208054806120695760405162461bcd60e51b815260040161060390612bf4565b60008060008367ffffffffffffffff81111561208757612087612dac565b6040519080825280602002602001820160405280156120b0578160200160208202803683370190505b50905060008467ffffffffffffffff8111156120ce576120ce612dac565b6040519080825280602002602001820160405280156120f7578160200160208202803683370190505b50905060005b85811015612189576121328a88838154811061211b5761211b612d96565b90600052602060002090600502016001015461237b565b80955081965050508383828151811061214d5761214d612d96565b6020026020010181815250508482828151811061216c5761216c612d96565b60209081029190910101528061218181612d65565b9150506120fd565b509650945050505050915091565b8154600090806121b95760405162461bcd60e51b815260040161060390612bf4565b6000806122d986805480602002602001604051908101604052809291908181526020016000905b828210156122cc57838290600052602060002090600502016040518060a001604052908160008201805461221390612d2a565b80601f016020809104026020016040519081016040528092919081815260200182805461223f90612d2a565b801561228c5780601f106122615761010080835404028352916020019161228c565b820191906000526020600020905b81548152906001019060200180831161226f57829003601f168201915b50505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481525050815260200190600101906121e0565b505050506000858861270d565b905060008082126122eb575060019150805b8261234f5760405162461bcd60e51b815260206004820152602e60248201527f4e4f4445205345415243483a204e6f204e4f444520466f756e6420776974682060448201526d7468697320626c6f636b74696d6560901b6064820152608401610603565b86818154811061236157612361612d96565b906000526020600020906005020194505050505092915050565b600c5460009081906001600160a01b03163314806123a35750600b546001600160a01b031633145b6123bf5760405162461bcd60e51b815260040161060390612c43565b6123c884611e02565b6123e45760405162461bcd60e51b815260040161060390612bbd565b600083116124045760405162461bcd60e51b815260040161060390612b76565b6001600160a01b0384166000908152600460205260408120906124278286612197565b905060004290506000806006546005546124419190612ca2565b905061244e600282612ca2565b620151808560010154856124629190612ce3565b61246c9190612ca2565b1061247a5760135460048501555b806201518085600101548561248f9190612ce3565b6124999190612ca2565b106125be5760145460048501556124b38162015180612cc4565b84600101546124c29190612c65565b84600201541161255f5760028401546124de8262015180612cc4565b85600101546124ed9190612c65565b6124f79190612ce3565b6006546125049190612cc4565b61250e9083612c65565b915061251d8162015180612cc4565b600185015461252c9085612ce3565b6125369190612ce3565b6007546125439190612cc4565b61254d9083612c65565b915061255c6201518083612ca2565b91505b61256c8162015180612cc4565b846001015461257b9190612c65565b846002015411156125be5760028401546125959084612ce3565b6007546125a29190612cc4565b6125ac9083612c65565b91506125bb6201518083612ca2565b91505b80620151808560010154856125d39190612ce3565b6125dd9190612ca2565b101561261157620151808460020154846125f79190612ce3565b6006546126049190612cc4565b61260e9190612ca2565b91505b818460030160008282546126259190612c65565b909155505050506002820155600381015460049091015490969095509350505050565b600042600854836040015161265d9190612c65565b111592915050565b60006126a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127c1565b9392505050565b6000806126bb8385612c65565b9050838110156126a75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610603565b60008383106127b457600061272d60026127278787612c65565b906127fb565b90508286828151811061274257612742612d96565b602002602001015160200151141561275b5790506127b9565b8286828151811061276e5761276e612d96565b602002602001015160200151111561279e576127968686612790600185612ce3565b8661270d565b9150506127b9565b612796866127ad836001612c65565b868661270d565b506000195b949350505050565b600081848411156127e55760405162461bcd60e51b81526004016106039190612b43565b5060006127f28486612ce3565b95945050505050565b60006126a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836128595760405162461bcd60e51b81526004016106039190612b43565b5060006127f28486612ca2565b82805461287290612d2a565b90600052602060002090601f01602090048101928261289457600085556128da565b82601f106128ad57805160ff19168380011785556128da565b828001600101855582156128da579182015b828111156128da5782518255916020019190600101906128bf565b506128e6929150612919565b5090565b6040518060a0016040528060608152602001600081526020016000815260200160008152602001600081525090565b5b808211156128e6576000815560010161291a565b80356001600160a01b038116811461117957600080fd5b60006020828403121561295757600080fd5b6126a78261292e565b6000806040838503121561297357600080fd5b61297c8361292e565b9150602083013567ffffffffffffffff8082111561299957600080fd5b818501915085601f8301126129ad57600080fd5b8135818111156129bf576129bf612dac565b604051601f8201601f19908116603f011681019083821181831017156129e7576129e7612dac565b81604052828152886020848701011115612a0057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008060408385031215612a3557600080fd5b612a3e8361292e565b946020939093013593505050565b600060208284031215612a5e57600080fd5b813580151581146126a757600080fd5b600060208284031215612a8057600080fd5b5035919050565b600060208284031215612a9957600080fd5b5051919050565b600081518084526020808501945080840160005b83811015612ad057815187529582019590820190600101612ab4565b509495945050505050565b60008451612aed818460208901612cfa565b845190830190612b01818360208901612cfa565b8451910190612b14818360208801612cfa565b0195945050505050565b604081526000612b316040830185612aa0565b82810360208401526127f28185612aa0565b6020815260008251806020840152612b62816040850160208701612cfa565b601f01601f19169190910160400192915050565b60208082526027908201527f4e4f44453a204352454154494d45206d75737420626520686967686572207468604082015266616e207a65726f60c81b606082015260800190565b6020808252601c908201527f47455420524557415244204f463a204e4f204e4f4445204f574e455200000000604082015260600190565b6020808252602f908201527f434153484f5554204552524f523a20596f7520646f6e27742068617665206e6f60408201526e19195cc81d1bc818d85cda0b5bdd5d608a1b606082015260800190565b602080825260089082015267233ab1b59037b33360c11b604082015260600190565b60008219821115612c7857612c78612d80565b500190565b600060ff821660ff84168060ff03821115612c9a57612c9a612d80565b019392505050565b600082612cbf57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612cde57612cde612d80565b500290565b600082821015612cf557612cf5612d80565b500390565b60005b83811015612d15578181015183820152602001612cfd565b83811115612d24576000848401525b50505050565b600181811c90821680612d3e57607f821691505b60208210811415612d5f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d7957612d79612d80565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea264697066735822122024529df78f47fc87969c0a623c4b27c70c995afd9f1610b1b0c4352a5ad0f7dc64736f6c634300080700330000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000016345785d8a0000

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

0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000016345785d8a0000

-----Decoded View---------------
Arg [0] : _nodePrice (uint256): 1000000000000000000
Arg [1] : _rewardPerNode (uint256): 2000000000000000000
Arg [2] : _claimTime (uint256): 1
Arg [3] : _firstStageCashoutFee (uint256): 20
Arg [4] : _secondStageCashoutFee (uint256): 10
Arg [5] : _thirdStageCashoutFee (uint256): 1
Arg [6] : _rewardPerNodeAfterBreakEven (uint256): 100000000000000000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [1] : 0000000000000000000000000000000000000000000000001bc16d674ec80000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 000000000000000000000000000000000000000000000000016345785d8a0000


Library Used

IterableMapping : 0x6157d2df38515a05fed1b7001becdc5b220ed6f9

Deployed ByteCode Sourcemap

6623:19542:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7675:36;;;;;;;;;9925:25:1;;;9913:2;9898:18;7675:36:0;;;;;;;;7718:35;;;;;;10592:791;;;;;;:::i;:::-;;:::i;:::-;;8615:88;;;;;;:::i;:::-;;:::i;7633:35::-;;;;;;24777:123;;;;;;:::i;:::-;;:::i;24908:121::-;;;;;;:::i;:::-;;:::i;7151:24::-;;;;;;20760:593;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7221:34::-;;;;;;:::i;:::-;;:::i;25826:114::-;;;;;;:::i;:::-;;:::i;:::-;;;4247:14:1;;4240:22;4222:41;;4210:2;4195:18;25826:114:0;4082:187:1;25569:122:0;;;;;;:::i;:::-;;:::i;7264:25::-;;;;;-1:-1:-1;;;;;7264:25:0;;;;;;-1:-1:-1;;;;;3568:32:1;;;3550:51;;3538:2;3523:18;7264:25:0;3404:203:1;22162:812:0;;;;;;:::i;:::-;;:::i;18935:191::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;22982:804::-;;;;;;:::i;:::-;;:::i;13940:630::-;;;;;;:::i;:::-;;:::i;7362:32::-;;;;;-1:-1:-1;;;7362:32:0;;;;;;7067:28;;;;;;19332:489;;;;;;:::i;:::-;;:::i;17883:1044::-;;;;;;:::i;:::-;;:::i;20511:241::-;;;;;;:::i;:::-;;:::i;19134:190::-;;;;;;:::i;:::-;;:::i;:::-;;;;10135:25:1;;;10191:2;10176:18;;10169:34;;;;10108:18;19134:190:0;9961:248:1;13249:683:0;;;;;;:::i;:::-;;:::i;7499:37::-;;;;;;7325:30;;;;;-1:-1:-1;;;7325:30:0;;;;;;25948:214;;;:::i;:::-;;;;10416:25:1;;;10472:2;10457:18;;10450:34;;;;10500:18;;;10493:34;10404:2;10389:18;25948:214:0;10214:319:1;7588:36:0;;;;;;7102:42;;;;;;24649:120;;;;;;:::i;:::-;;:::i;19829:674::-;;;;;;:::i;:::-;;:::i;7545:36::-;;;;;;24530:111;;;;;;:::i;:::-;;:::i;21361:793::-;;;;;;:::i;:::-;;:::i;7182:32::-;;;;;;:::i;:::-;;:::i;24411:111::-;;;;;;:::i;:::-;;:::i;25037:179::-;;;;;;:::i;:::-;;:::i;25224:101::-;;;;;;:::i;:::-;;:::i;25333:100::-;;;;;;:::i;:::-;;:::i;7403:42::-;;;;;;25441:120;;;;;;:::i;:::-;;:::i;7036:24::-;;;;;;7452:40;;;;;;7296:20;;;;;-1:-1:-1;;;;;7296:20:0;;;10592:791;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;;;;;;;;;10706:34:::1;10722:7;10731:8;10706:15;:34::i;:::-;10684:115;;;::::0;-1:-1:-1;;;10684:115:0;;5628:2:1;10684:115:0::1;::::0;::::1;5610:21:1::0;5667:2;5647:18;;;5640:30;5706:33;5686:18;;;5679:61;5757:18;;10684:115:0::1;5426:355:1::0;10684:115:0::1;-1:-1:-1::0;;;;;10810:21:0;::::1;;::::0;;;:12:::1;:21;::::0;;;;;;;10851:297;;::::1;::::0;::::1;::::0;;;;;10928:15:::1;10851:297:::0;;::::1;::::0;;;;;;;;;;;;;;;;11112:20:::1;::::0;10851:297;;;;10810:349;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;10851:297;;10810:349:::1;;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10810:349:0::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;11194:21:0;::::1;-1:-1:-1::0;11194:21:0;;;;;;;;;;:28;11170:53;;-1:-1:-1;;;11170:53:0;;;;::::1;9631:25:1::0;;;;9672:18;;;9665:60;9741:18;;;9734:34;;;;11170:14:0::1;::::0;::::1;::::0;9604:18:1;;11170:53:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11234:17:0::1;:19:::0;;;-1:-1:-1;11234:17:0;-1:-1:-1;11234:17:0::1;:19;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;11268:10:0::1;::::0;-1:-1:-1;;;11268:10:0;::::1;;;:27:::0;::::1;;;-1:-1:-1::0;11283:12:0::1;::::0;-1:-1:-1;;;11283:12:0;::::1;;;11282:13;11268:27;11264:112;;;11312:52;11330:18;;11350:13;;11312:17;:52::i;:::-;;;;11264:112;10592:791:::0;;:::o;8615:88::-;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;8681:5:::1;:14:::0;;-1:-1:-1;;;;;;8681:14:0::1;-1:-1:-1::0;;;;;8681:14:0;;;::::1;::::0;;;::::1;::::0;;8615:88::o;24777:123::-;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;24862:21:::1;:30:::0;24777:123::o;24908:121::-;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;24992:20:::1;:29:::0;24908:121::o;20760:593::-;20839:13;20878:20;20890:7;20878:11;:20::i;:::-;20870:57;;;;-1:-1:-1;;;20870:57:0;;8189:2:1;20870:57:0;;;8171:21:1;8228:2;8208:18;;;8201:30;8267:26;8247:18;;;8240:54;8311:18;;20870:57:0;7987:348:1;20870:57:0;-1:-1:-1;;;;;20966:21:0;;20938:25;20966:21;;;:12;:21;;;;;;;;20938:49;;;;;;;;;;;;;;;;;;;20966:21;;20938:49;:25;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20998:18;21019:5;:12;20998:33;;21042:23;;:::i;:::-;21076:19;21098:5;21104:1;21098:8;;;;;;;;:::i;:::-;;;;;;;:13;;;21076:35;;21122:23;:29;;;;;;;;;;;;;-1:-1:-1;;;21122:29:0;;;;;21167:9;21179:1;21167:13;;21162:161;21186:10;21182:1;:14;21162:161;;;21226:5;21232:1;21226:8;;;;;;;;:::i;:::-;;;;;;;21218:16;;21281:5;21288:9;21299:5;:10;;;21264:46;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21249:62;;21198:3;;;;;:::i;:::-;;;;21162:161;;;-1:-1:-1;21340:5:0;;20760:593;-1:-1:-1;;;;;;20760:593:0:o;7221:34::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7221:34:0;:::o;25826:114::-;25888:4;25912:20;25924:7;25912:11;:20::i;:::-;25905:27;25826:114;-1:-1:-1;;25826:114:0:o;25569:122::-;25660:23;;-1:-1:-1;;;25660:23:0;;25633:7;25660:23;;;9295:25:1;;;-1:-1:-1;;;;;9356:32:1;;9336:18;;;9329:60;25633:7:0;25660:14;;;;9268:18:1;;25660:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22162:812::-;22251:13;22290:20;22302:7;22290:11;:20::i;:::-;22282:58;;;;-1:-1:-1;;;22282:58:0;;6707:2:1;22282:58:0;;;6689:21:1;6746:2;6726:18;;;6719:30;6785:27;6765:18;;;6758:55;6830:18;;22282:58:0;6505:349:1;22282:58:0;-1:-1:-1;;;;;22379:21:0;;22351:25;22379:21;;;:12;:21;;;;;;;;22351:49;;;;;;;;;;;;;;;;;;;22379:21;;22351:49;:25;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22411:18;22432:5;:12;22411:33;;22455:23;;:::i;:::-;22489:31;22523:34;22532:5;22538:1;22532:8;;;;;;;;:::i;:::-;;;;;;;:24;;;22523:8;:34::i;:::-;22568:29;;;;;;;;;;;;;-1:-1:-1;;;22568:29:0;;;;22489:68;;-1:-1:-1;22568:29:0;22610:322;22634:10;22630:1;:14;22610:322;;;22674:5;22680:1;22674:8;;;;;;;;:::i;:::-;;;;;;;22666:16;;22783:17;22823:9;22855:31;22864:5;:21;;;22855:8;:31::i;:::-;22744:161;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22699:221;;22646:3;;;;;:::i;:::-;;;;22610:322;;18935:191;8541:5;;19024:16;;;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;19077:41:::1;19110:7;19077:32;:41::i;:::-;19070:48;;;;18935:191:::0;;;:::o;22982:804::-;23069:13;23108:20;23120:7;23108:11;:20::i;:::-;23100:64;;;;-1:-1:-1;;;23100:64:0;;5988:2:1;23100:64:0;;;5970:21:1;6027:2;6007:18;;;6000:30;6066:33;6046:18;;;6039:61;6117:18;;23100:64:0;5786:355:1;23100:64:0;-1:-1:-1;;;;;23203:21:0;;23175:25;23203:21;;;:12;:21;;;;;;;;23175:49;;;;;;;;;;;;;;;;;;;23203:21;;23175:49;:25;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23235:18;23256:5;:12;23235:33;;23279:23;;:::i;:::-;23313:29;23345:32;23354:5;23360:1;23354:8;;;;;;;;:::i;:::-;;;;;;;:22;;;23345:8;:32::i;:::-;23388:29;;;;;;;;;;;;;-1:-1:-1;;;23388:29:0;;;;23313:64;;-1:-1:-1;23388:29:0;23430:316;23454:10;23450:1;:14;23430:316;;;23494:5;23500:1;23494:8;;;;;;;;:::i;:::-;;;;;;;23486:16;;23601:15;23639:9;23671:29;23680:5;:19;;;23671:8;:29::i;:::-;23562:157;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23519:215;;23466:3;;;;;:::i;:::-;;;;23430:316;;13940:630;8541:5;;14028:7;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14082:21:0;::::1;14053:26;14082:21:::0;;;:12:::1;:21;::::0;;;;14135:12;;14166:14;14158:66:::1;;;;-1:-1:-1::0;;;14158:66:0::1;;;;;;;:::i;:::-;14235:24;::::0;;14305:228:::1;14329:10;14325:1;:14;14305:228;;;14369:5;14375:1;14369:8;;;;;;;;:::i;:::-;;;;;;;;;;;14361:16;;14408:5;:21;;;14392:37;;;;;:::i;:::-;14468:1;14444:21;::::0;::::1;:25:::0;14506:15:::1;14484:19;::::0;::::1;:37:::0;14392;-1:-1:-1;14341:3:0;::::1;::::0;::::1;:::i;:::-;;;;14305:228;;;-1:-1:-1::0;14550:12:0;-1:-1:-1;;;;8598:1:0::1;13940:630:::0;;;:::o;19332:489::-;19415:7;19448:20;19460:7;19448:11;:20::i;:::-;19440:61;;;;-1:-1:-1;;;19440:61:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19606:21:0;;19512:18;19606:21;;;:12;:21;;;;;19651:12;;;19512:18;;19676:107;19700:10;19696:1;:14;19676:107;;;19747:5;19753:1;19747:8;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;;19732:39;;;;;:::i;:::-;;-1:-1:-1;19712:3:0;;;;:::i;:::-;;;;19676:107;;;-1:-1:-1;19802:11:0;;19332:489;-1:-1:-1;;;;19332:489:0:o;17883:1044::-;8541:5;;17984:4;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18105:21:0;::::1;18076:26;18105:21:::0;;;:12:::1;:21;::::0;;;;18161:12;;18105:21;;18238:15:::1;18076:26:::0;18264:634:::1;18283:13;18280:1;:16;18264:634;;;18326:5;18332:1;18326:8;;;;;;;;:::i;:::-;;;;;;;;;;;18318:16;;18353:18;18375:1;18353:23;18349:69;;;18397:5;;18349:69;18461:18;18436:5;:21;;;:43;18432:455;;18525:18;18500:5;:21;;;:43;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;18562:19:0::1;::::0;::::1;:30:::0;;;18632:1:::1;::::0;-1:-1:-1;18432:455:0::1;;;18696:18;18672:5;:21;;;:42;18668:219;;;18757:21;::::0;::::1;::::0;18735:43:::1;::::0;;::::1;:::i;:::-;18821:1;18797:21;::::0;::::1;:25:::0;18841:19:::1;::::0;::::1;:30:::0;;;18735:43;-1:-1:-1;18668:219:0::1;18298:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18264:634;;;-1:-1:-1::0;18915:4:0::1;::::0;17883:1044;-1:-1:-1;;;;;;;17883:1044:0:o;20511:241::-;-1:-1:-1;;;;;20682:21:0;;20620:7;20682:21;;;:12;:21;;;;;20661:57;;20705:12;20661:20;:57::i;:::-;:83;;;;20511:241;-1:-1:-1;;;20511:241:0:o;19134:190::-;8541:5;;19235:7;;;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;19271:45:::1;19293:7;19302:13;19271:21;:45::i;:::-;19264:52;;;;19134:190:::0;;;;;:::o;13249:683::-;8541:5;;13356:7;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;13405:1:::1;13389:13;:17;13381:69;;;;-1:-1:-1::0;;;13381:69:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13490:21:0;::::1;13461:26;13490:21:::0;;;:12:::1;:21;::::0;;;;13546:12;;13591:17;13569:114:::1;;;;-1:-1:-1::0;;;13569:114:0::1;;;;;;;:::i;:::-;13694:23;13720:42;13741:5;13748:13;13720:20;:42::i;:::-;13794:20;::::0;::::1;::::0;;13773:18:::1;13825:24:::0;;;13881:15:::1;13860:18;::::0;;::::1;:36:::0;;;;13794:20;13249:683;-1:-1:-1;;;;;;13249:683:0:o;25948:214::-;8541:5;;26028:7;;;;;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;26102:52:::1;26120:18;;26140:13;;26102:17;:52::i;:::-;26095:59;;;;;;25948:214:::0;;;:::o;24649:120::-;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;24732:20:::1;:29:::0;24649:120::o;19829:674::-;19935:7;19968:20;19980:7;19968:11;:20::i;:::-;19960:61;;;;-1:-1:-1;;;19960:61:0;;;;;;;:::i;:::-;20058:1;20042:13;:17;20034:69;;;;-1:-1:-1;;;20034:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20143:21:0;;20114:26;20143:21;;;:12;:21;;;;;20199:12;;20244:17;20222:114;;;;-1:-1:-1;;;20222:114:0;;;;;;;:::i;:::-;20347:23;20373:42;20394:5;20401:13;20373:20;:42::i;:::-;20447:20;;;;19829:674;-1:-1:-1;;;;;;19829:674:0:o;24530:111::-;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;24609:13:::1;:24:::0;24530:111::o;21361:793::-;21447:13;21486:20;21498:7;21486:11;:20::i;:::-;21478:60;;;;-1:-1:-1;;;21478:60:0;;7061:2:1;21478:60:0;;;7043:21:1;7100:2;7080:18;;;7073:30;7139:29;7119:18;;;7112:57;7186:18;;21478:60:0;6859:351:1;21478:60:0;-1:-1:-1;;;;;21577:21:0;;21549:25;21577:21;;;:12;:21;;;;;;;;21549:49;;;;;;;;;;;;;;;;;;;21577:21;;21549:49;:25;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21609:18;21630:5;:12;21609:33;;21653:23;;:::i;:::-;21687:28;21718:31;21727:5;21733:1;21727:8;;;;;;;;:::i;:::-;;;;;;;:21;;;21718:8;:31::i;:::-;21760:29;;;;;;;;;;;;;-1:-1:-1;;;21760:29:0;;;;21687:62;;-1:-1:-1;21760:29:0;21802:313;21826:10;21822:1;:14;21802:313;;;21866:5;21872:1;21866:8;;;;;;;;:::i;:::-;;;;;;;21858:16;;21972:14;22009:9;22041:28;22050:5;:18;;;22041:8;:28::i;:::-;21933:155;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21891:212;;21838:3;;;;;:::i;:::-;;;;21802:313;;7182:32;;;;;;;;;;;;24411:111;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;24490:9:::1;:24:::0;24411:111::o;25037:179::-;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;25150:27:::1;:58:::0;25037:179::o;25224:101::-;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;25298:9:::1;:19:::0;25224:101::o;25333:100::-;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;25405:10:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;25405:20:0::1;-1:-1:-1::0;;;;25405:20:0;;::::1;::::0;;;::::1;::::0;;25333:100::o;25441:120::-;8541:5;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;25520:18:::1;:33:::0;25441:120::o;11391:398::-;-1:-1:-1;;;;;11544:21:0;;11494:4;11544:21;;;:12;:21;;;;;;;;11516:49;;;;;;;;;;;;;;;;;11494:4;;;;11516:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11581:9;11576:184;11600:5;:12;11596:1;:16;11576:184;;;11690:8;11674:26;;;;;;11655:5;11661:1;11655:8;;;;;;;;:::i;:::-;;;;;;;:13;;;11639:31;;;;;;:61;11635:114;;;11728:5;11721:12;;;;;;11635:114;11614:3;;;;:::i;:::-;;;;11576:184;;;-1:-1:-1;11777:4:0;;11391:398;-1:-1:-1;;;;11391:398:0:o;8711:1873::-;8875:12;:19;;-1:-1:-1;;;;8875:19:0;-1:-1:-1;;;8875:19:0;;;8808:7;8934:22;;8808:7;;;;8975:22;8967:65;;;;-1:-1:-1;;;8967:65:0;;6348:2:1;8967:65:0;;;6330:21:1;6387:2;6367:18;;;6360:30;6426:32;6406:18;;;6399:60;6476:18;;8967:65:0;6146:354:1;8967:65:0;9047:23;9043:89;;-1:-1:-1;;9101:18:0;;9095:1;;-1:-1:-1;9095:1:0;;-1:-1:-1;9087:33:0;;9043:89;9144:15;9174;9192:9;9266:18;;9174:27;;-1:-1:-1;9212:18:0;;;9361:15;9212:18;;;;9519:913;9536:3;9526:7;:13;:48;;;;;9556:18;9543:10;:31;9526:48;9519:913;;;9591:16;;;;:::i;:::-;9644:10;:22;9591:16;;-1:-1:-1;9626:40:0;;;-1:-1:-1;9622:99:0;;9704:1;9687:18;;9622:99;9743:12;:45;9756:10;:15;;9772:14;9756:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;9756:31:0;9743:45;;;;;;;;;;;;9816:12;;;-1:-1:-1;9743:45:0;-1:-1:-1;9843:352:0;9867:10;9863:1;:14;9843:352;;;9911:5;9917:1;9911:8;;;;;;;;:::i;:::-;;;;;;;;;;;9903:16;;9942;9952:5;9942:16;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:16::i;:::-;9938:242;;;10008:10;9983:5;:21;;;:35;;;;;;;:::i;:::-;;;;;;;;10063:12;10041:5;:19;;:34;;;;10119:10;10098:17;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;10152:8:0;;-1:-1:-1;10152:8:0;;;:::i;:::-;;;;9938:242;9879:3;;;;:::i;:::-;;;;9843:352;;;-1:-1:-1;10209:12:0;;;;:::i;:::-;;;;10251:9;10238:22;;10291:10;10281:7;:20;10277:107;;;10332:36;10344:23;:7;10356:10;10344:11;:23::i;:::-;10332:7;;:11;:36::i;:::-;10322:46;;10277:107;10410:10;10400:20;;9519:913;;;-1:-1:-1;;10442:18:0;:35;;;10498:12;:20;;-1:-1:-1;;;;10498:20:0;;;10537:10;;-1:-1:-1;10549:6:0;;-1:-1:-1;10463:14:0;;-1:-1:-1;;;;;;;8711:1873:0;;;;;;:::o;25699:119::-;25783:23;;-1:-1:-1;;;25783:23:0;;25759:4;25783:23;;;9295:25:1;;;-1:-1:-1;;;;;9356:32:1;;9336:18;;;9329:60;25759:4:0;;;25783:14;;;;9268:18:1;;25783:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:27;;25699:119;-1:-1:-1;;25699:119:0:o;23794:609::-;23862:27;23911:7;23907:50;;-1:-1:-1;;23935:10:0;;;;;;;;;;;;-1:-1:-1;;;23935:10:0;;;;;23794:609::o;23907:50::-;23979:2;23967:9;24014:69;24021:6;;24014:69;;24044:5;;;;:::i;:::-;;-1:-1:-1;24064:7:0;;-1:-1:-1;24069:2:0;24064:7;;:::i;:::-;;;24014:69;;;24093:17;24123:3;24113:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24113:14:0;-1:-1:-1;24093:34:0;-1:-1:-1;24150:3:0;24164:202;24171:7;;24164:202;;24199:5;24203:1;24199;:5;:::i;:::-;24195:9;-1:-1:-1;24219:10:0;24250:7;24255:2;24250;:7;:::i;:::-;24249:14;;24261:2;24249:14;:::i;:::-;24244:19;;:2;:19;:::i;:::-;24233:31;;:2;:31;:::i;:::-;24219:46;;24280:9;24299:4;24292:12;;24280:24;;24329:2;24319:4;24324:1;24319:7;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;24319:12:0;;;;;;;;-1:-1:-1;24346:8:0;24352:2;24346:8;;:::i;:::-;;;24180:186;;24164:202;;;-1:-1:-1;24390:4:0;23794:609;-1:-1:-1;;;;23794:609:0:o;16852:1023::-;8541:5;;16940:16;;;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;16994:20:::1;17006:7;16994:11;:20::i;:::-;16986:61;;;;-1:-1:-1::0;;;16986:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17170:21:0;::::1;17141:26;17170:21:::0;;;:12:::1;:21;::::0;;;;17226:12;;17271:17;17249:114:::1;;;;-1:-1:-1::0;;;17249:114:0::1;;;;;;;:::i;:::-;17411:10;17433:11:::0;17455:21:::1;17493:13;17479:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;17479:28:0::1;;17455:52;;17518:24;17559:13;17545:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;17545:28:0::1;;17518:55;;17589:9;17584:251;17608:13;17604:1;:17;17584:251;;;17655:53;17677:7;17686:5;17692:1;17686:8;;;;;;;;:::i;:::-;;;;;;;;;;;:21;;;17655;:53::i;:::-;17643:65;;;;;;;;17790:3;17780:4;17785:1;17780:7;;;;;;;;:::i;:::-;;;;;;:13;;;::::0;::::1;17821:2;17808:7;17816:1;17808:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:15;17623:3;::::1;::::0;::::1;:::i;:::-;;;;17584:251;;;-1:-1:-1::0;17853:7:0;-1:-1:-1;17862:4:0;-1:-1:-1;;;;;16852:1023:0;;;:::o;11958:682::-;12141:12;;12086:18;;12186:17;12164:114;;;;-1:-1:-1;;;12164:114:0;;;;;;;:::i;:::-;12289:10;12318:12;12333:53;12347:5;12333:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12354:1;12357:13;12372;12333;:53::i;:::-;12318:68;;12397:18;12439:1;12430:5;:10;12426:97;;-1:-1:-1;12465:4:0;;-1:-1:-1;12505:5:0;12426:97;12541:5;12533:64;;;;-1:-1:-1;;;12533:64:0;;7417:2:1;12533:64:0;;;7399:21:1;7456:2;7436:18;;;7429:30;7495:34;7475:18;;;7468:62;-1:-1:-1;;;7546:18:1;;;7539:44;7600:19;;12533:64:0;7215:410:1;12533:64:0;12615:5;12621:10;12615:17;;;;;;;;:::i;:::-;;;;;;;;;;;12608:24;;;;;;11958:682;;;;:::o;14731:2113::-;8541:5;;14831:7;;;;-1:-1:-1;;;;;8541:5:0;8527:10;:19;;:47;;-1:-1:-1;8564:10:0;;-1:-1:-1;;;;;8564:10:0;8550;:24;8527:47;8519:68;;;;-1:-1:-1;;;8519:68:0;;;;;;;:::i;:::-;14867:20:::1;14879:7;14867:11;:20::i;:::-;14859:61;;;;-1:-1:-1::0;;;14859:61:0::1;;;;;;;:::i;:::-;14955:1;14939:13;:17;14931:69;;;;-1:-1:-1::0;;;14931:69:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15040:21:0;::::1;15011:26;15040:21:::0;;;:12:::1;:21;::::0;;;;;15098:42:::1;15040:21:::0;15126:13;15098:20:::1;:42::i;:::-;15072:68;;15151:16;15170:15;15151:34;;15196:18;15350:20:::0;15383:13:::1;;15373:9;;:23;;;;:::i;:::-;15350:46:::0;-1:-1:-1;15456:17:0::1;15472:1;15350:46:::0;15456:17:::1;:::i;:::-;15443:8;15423:4;:17;;;15412:8;:28;;;;:::i;:::-;15411:41;;;;:::i;:::-;:62;15407:147;;15521:21;::::0;15503:15:::1;::::0;::::1;:39:::0;15407:147:::1;15613:15;15600:8;15580:4;:17;;;15569:8;:28;;;;:::i;:::-;15568:41;;;;:::i;:::-;:60;15564:857;;15664:20;::::0;15646:15:::1;::::0;::::1;:38:::0;15746:28:::1;:15:::0;15765:8:::1;15746:28;:::i;:::-;15726:4;:17;;;:48;;;;:::i;:::-;15703:4;:18;;;:72;15699:410;;15894:18;::::0;::::1;::::0;15863:28:::1;:15:::0;15882:8:::1;15863:28;:::i;:::-;15843:4;:17;;;:48;;;;:::i;:::-;:69;;;;:::i;:::-;15826:13;;:87;;;;:::i;:::-;15812:101;::::0;;::::1;:::i;:::-;::::0;-1:-1:-1;16010:28:0::1;:15:::0;16029:8:::1;16010:28;:::i;:::-;15990:17;::::0;::::1;::::0;15978:29:::1;::::0;:8;:29:::1;:::i;:::-;:60;;;;:::i;:::-;15946:27;;:94;;;;:::i;:::-;15932:108;::::0;;::::1;:::i;:::-;::::0;-1:-1:-1;16072:21:0::1;16084:8;15932:108:::0;16072:21:::1;:::i;:::-;16059:34;;15699:410;16169:28;:15:::0;16188:8:::1;16169:28;:::i;:::-;16149:4;:17;;;:48;;;;:::i;:::-;16127:4;:18;;;:71;16123:273;;;16291:18;::::0;::::1;::::0;16280:29:::1;::::0;:8;:29:::1;:::i;:::-;16249:27;;:61;;;;:::i;:::-;16235:75;::::0;;::::1;:::i;:::-;::::0;-1:-1:-1;16359:21:0::1;16371:8;16235:75:::0;16359:21:::1;:::i;:::-;16345:35;;16123:273;16479:15;16467:8;16447:4;:17;;;16436:8;:28;;;;:::i;:::-;16435:41;;;;:::i;:::-;:59;16431:171;;;16580:8;16555:4;:18;;;16544:8;:29;;;;:::i;:::-;16526:13;;:49;;;;:::i;:::-;16525:64;;;;:::i;:::-;16511:79;;16431:171;16729:10;16705:4;:20;;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;16750:18:0::1;::::0;::::1;:29:::0;16798:20:::1;::::0;::::1;::::0;16820:15:::1;::::0;;::::1;::::0;16798:20;;16820:15;;-1:-1:-1;14731:2113:0;-1:-1:-1;;;;14731:2113:0:o;14578:146::-;14643:4;14701:15;14688:9;;14667:4;:18;;;:30;;;;:::i;:::-;:49;;;14578:146;-1:-1:-1;;14578:146:0:o;789:136::-;847:7;874:43;878:1;881;874:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;867:50;789:136;-1:-1:-1;;;789:136:0:o;325:181::-;383:7;;415:5;419:1;415;:5;:::i;:::-;403:17;;444:1;439;:6;;431:46;;;;-1:-1:-1;;;431:46:0;;4864:2:1;431:46:0;;;4846:21:1;4903:2;4883:18;;;4876:30;4942:29;4922:18;;;4915:57;4989:18;;431:46:0;4662:351:1;12648:593:0;12799:6;12830:3;12822:4;:11;12818:416;;12850:11;12864:19;12881:1;12865:10;12872:3;12865:4;:10;:::i;:::-;12864:16;;:19::i;:::-;12850:33;;12927:1;12902:3;12906;12902:8;;;;;;;;:::i;:::-;;;;;;;:21;;;:26;12898:283;;;12963:3;-1:-1:-1;12949:18:0;;12898:283;13017:1;12993:3;12997;12993:8;;;;;;;;:::i;:::-;;;;;;;:21;;;:25;12989:192;;;13046:35;13060:3;13065;13070:7;13076:1;13070:3;:7;:::i;:::-;13079:1;13046:13;:35::i;:::-;13039:42;;;;;12989:192;13129:36;13143:3;13148:7;:3;13154:1;13148:7;:::i;:::-;13157:4;13163:1;13129:13;:36::i;12818:416::-;-1:-1:-1;;;12818:416:0;12648:593;;;;;;:::o;1228:226::-;1348:7;1384:12;1376:6;;;;1368:29;;;;-1:-1:-1;;;1368:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1408:9:0;1420:5;1424:1;1420;:5;:::i;:::-;1408:17;1228:226;-1:-1:-1;;;;;1228:226:0:o;2660:132::-;2718:7;2745:39;2749:1;2752;2745:39;;;;;;;;;;;;;;;;;3408:7;3443:12;3436:5;3428:28;;;;-1:-1:-1;;;3428:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3467:9:0;3479:5;3483:1;3479;:5;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;192:186;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:996::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:52;;;538:1;535;528:12;490:52;561:29;580:9;561:29;:::i;:::-;551:39;;641:2;630:9;626:18;613:32;664:18;705:2;697:6;694:14;691:34;;;721:1;718;711:12;691:34;759:6;748:9;744:22;734:32;;804:7;797:4;793:2;789:13;785:27;775:55;;826:1;823;816:12;775:55;862:2;849:16;884:2;880;877:10;874:36;;;890:18;;:::i;:::-;965:2;959:9;933:2;1019:13;;-1:-1:-1;;1015:22:1;;;1039:2;1011:31;1007:40;995:53;;;1063:18;;;1083:22;;;1060:46;1057:72;;;1109:18;;:::i;:::-;1149:10;1145:2;1138:22;1184:2;1176:6;1169:18;1224:7;1219:2;1214;1210;1206:11;1202:20;1199:33;1196:53;;;1245:1;1242;1235:12;1196:53;1301:2;1296;1292;1288:11;1283:2;1275:6;1271:15;1258:46;1346:1;1341:2;1336;1328:6;1324:15;1320:24;1313:35;1367:6;1357:16;;;;;;;383:996;;;;;:::o;1384:254::-;1452:6;1460;1513:2;1501:9;1492:7;1488:23;1484:32;1481:52;;;1529:1;1526;1519:12;1481:52;1552:29;1571:9;1552:29;:::i;:::-;1542:39;1628:2;1613:18;;;;1600:32;;-1:-1:-1;;;1384:254:1:o;1643:273::-;1699:6;1752:2;1740:9;1731:7;1727:23;1723:32;1720:52;;;1768:1;1765;1758:12;1720:52;1807:9;1794:23;1860:5;1853:13;1846:21;1839:5;1836:32;1826:60;;1882:1;1879;1872:12;1921:180;1980:6;2033:2;2021:9;2012:7;2008:23;2004:32;2001:52;;;2049:1;2046;2039:12;2001:52;-1:-1:-1;2072:23:1;;1921:180;-1:-1:-1;1921:180:1:o;2106:184::-;2176:6;2229:2;2217:9;2208:7;2204:23;2200:32;2197:52;;;2245:1;2242;2235:12;2197:52;-1:-1:-1;2268:16:1;;2106:184;-1:-1:-1;2106:184:1:o;2295:435::-;2348:3;2386:5;2380:12;2413:6;2408:3;2401:19;2439:4;2468:2;2463:3;2459:12;2452:19;;2505:2;2498:5;2494:14;2526:1;2536:169;2550:6;2547:1;2544:13;2536:169;;;2611:13;;2599:26;;2645:12;;;;2680:15;;;;2572:1;2565:9;2536:169;;;-1:-1:-1;2721:3:1;;2295:435;-1:-1:-1;;;;;2295:435:1:o;2735:664::-;2962:3;3000:6;2994:13;3016:53;3062:6;3057:3;3050:4;3042:6;3038:17;3016:53;:::i;:::-;3132:13;;3091:16;;;;3154:57;3132:13;3091:16;3188:4;3176:17;;3154:57;:::i;:::-;3278:13;;3233:20;;;3300:57;3278:13;3233:20;3334:4;3322:17;;3300:57;:::i;:::-;3373:20;;2735:664;-1:-1:-1;;;;;2735:664:1:o;3612:465::-;3869:2;3858:9;3851:21;3832:4;3895:56;3947:2;3936:9;3932:18;3924:6;3895:56;:::i;:::-;3999:9;3991:6;3987:22;3982:2;3971:9;3967:18;3960:50;4027:44;4064:6;4056;4027:44;:::i;4274:383::-;4423:2;4412:9;4405:21;4386:4;4455:6;4449:13;4498:6;4493:2;4482:9;4478:18;4471:34;4514:66;4573:6;4568:2;4557:9;4553:18;4548:2;4540:6;4536:15;4514:66;:::i;:::-;4641:2;4620:15;-1:-1:-1;;4616:29:1;4601:45;;;;4648:2;4597:54;;4274:383;-1:-1:-1;;4274:383:1:o;5018:403::-;5220:2;5202:21;;;5259:2;5239:18;;;5232:30;5298:34;5293:2;5278:18;;5271:62;-1:-1:-1;;;5364:2:1;5349:18;;5342:37;5411:3;5396:19;;5018:403::o;7630:352::-;7832:2;7814:21;;;7871:2;7851:18;;;7844:30;7910;7905:2;7890:18;;7883:58;7973:2;7958:18;;7630:352::o;8340:411::-;8542:2;8524:21;;;8581:2;8561:18;;;8554:30;8620:34;8615:2;8600:18;;8593:62;-1:-1:-1;;;8686:2:1;8671:18;;8664:45;8741:3;8726:19;;8340:411::o;8756:331::-;8958:2;8940:21;;;8997:1;8977:18;;;8970:29;-1:-1:-1;;;9030:2:1;9015:18;;9008:38;9078:2;9063:18;;8756:331::o;10538:128::-;10578:3;10609:1;10605:6;10602:1;10599:13;10596:39;;;10615:18;;:::i;:::-;-1:-1:-1;10651:9:1;;10538:128::o;10671:204::-;10709:3;10745:4;10742:1;10738:12;10777:4;10774:1;10770:12;10812:3;10806:4;10802:14;10797:3;10794:23;10791:49;;;10820:18;;:::i;:::-;10856:13;;10671:204;-1:-1:-1;;;10671:204:1:o;10880:217::-;10920:1;10946;10936:132;;10990:10;10985:3;10981:20;10978:1;10971:31;11025:4;11022:1;11015:15;11053:4;11050:1;11043:15;10936:132;-1:-1:-1;11082:9:1;;10880:217::o;11102:168::-;11142:7;11208:1;11204;11200:6;11196:14;11193:1;11190:21;11185:1;11178:9;11171:17;11167:45;11164:71;;;11215:18;;:::i;:::-;-1:-1:-1;11255:9:1;;11102:168::o;11275:125::-;11315:4;11343:1;11340;11337:8;11334:34;;;11348:18;;:::i;:::-;-1:-1:-1;11385:9:1;;11275:125::o;11405:258::-;11477:1;11487:113;11501:6;11498:1;11495:13;11487:113;;;11577:11;;;11571:18;11558:11;;;11551:39;11523:2;11516:10;11487:113;;;11618:6;11615:1;11612:13;11609:48;;;11653:1;11644:6;11639:3;11635:16;11628:27;11609:48;;11405:258;;;:::o;11668:380::-;11747:1;11743:12;;;;11790;;;11811:61;;11865:4;11857:6;11853:17;11843:27;;11811:61;11918:2;11910:6;11907:14;11887:18;11884:38;11881:161;;;11964:10;11959:3;11955:20;11952:1;11945:31;11999:4;11996:1;11989:15;12027:4;12024:1;12017:15;11881:161;;11668:380;;;:::o;12053:135::-;12092:3;-1:-1:-1;;12113:17:1;;12110:43;;;12133:18;;:::i;:::-;-1:-1:-1;12180:1:1;12169:13;;12053:135::o;12193:127::-;12254:10;12249:3;12245:20;12242:1;12235:31;12285:4;12282:1;12275:15;12309:4;12306:1;12299:15;12325:127;12386:10;12381:3;12377:20;12374:1;12367:31;12417:4;12414:1;12407:15;12441:4;12438:1;12431:15;12457:127;12518:10;12513:3;12509:20;12506:1;12499:31;12549:4;12546:1;12539:15;12573:4;12570:1;12563:15

Swarm Source

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

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

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