Contract 0xC4711d33853BCCa4Aed17A30f0aCaC4A037daf38 1

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x073a28d46ec558992a2314d464b2342cc52d022f6a518637fa8017843ed64c89Claim146260832022-01-23 20:45:043 days 21 hrs ago0xdbb3f882d6c83fe5ab4f334715ee638ac3683d9c IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0x536477b53b4811cc097982bde93501bc77dc037c8efd5c0beec8ae65ff38db22Claim145156652022-01-20 0:32:517 days 17 hrs ago0xd0e851b2338437dbebd49c0deeb609d0eb944e40 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0x70f9379fccea9c3781c4f7e0d7807d62815d807d443e2b569df584b6a806570dClaim144224942022-01-16 18:10:5211 days 11 mins ago0x75da1bf00d57c01bf3e817a2e5c7bdbf6b1e7766 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0x51a68084a46ee289f2620e4f71e51305d3392810e47e7771a2a0dbd83d3c655eClaim143579312022-01-14 12:12:4013 days 6 hrs ago0xef0bb4d98745a19ef7ef5269a00ba7e2dfa67035 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00035463
0xc405377fd25eea39d5503a209e1c0b6b3a6f6544e524b48f3db5eb1a990de252Claim142450822022-01-10 13:55:4217 days 4 hrs ago0x9458c54a975e7d61c9fb7103553692a590c28e08 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0x7eb18dd4a9ce175f713b8a5137ce36efa893ad92268684d24ff01ef2a5ba313bClaim141624232022-01-07 16:59:2420 days 1 hr ago0xa6c6a2e63c32e909f071fb5e879ce472f71ad114 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00035463
0xab25d8a986361bd95b1dd1aab1e3d87e413aac6828a8c05e040e3a32c910e1eeClaim141336682022-01-06 16:56:4821 days 1 hr ago0xfc3628072a4566a412ea93937169dec1ac4d64de IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0xa44d2416ba90bbe47fbbe99ef0ac5420d27d7c68ffd2f849916ed820959ff709Claim141184902022-01-06 4:16:2221 days 14 hrs ago0x75da1bf00d57c01bf3e817a2e5c7bdbf6b1e7766 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0xf1a69814d8948054cda449ee3bccdf98620a26e2fe29a67c7a70d5a7a1cb8ab9Claim139321232021-12-30 16:41:3328 days 1 hr ago0xef0bb4d98745a19ef7ef5269a00ba7e2dfa67035 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00177315
0x6d9c7c596378deb2dc0231bd3d5b64d55ce58069332d15b9e1f9d5d2f2892996Claim137427202021-12-24 2:39:5534 days 15 hrs ago0x75da1bf00d57c01bf3e817a2e5c7bdbf6b1e7766 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0x5359945df9743c27a63e8e86bdee36566fcbe16bef05943eae6d0c2c906dcf92Claim137340552021-12-23 19:26:4034 days 22 hrs ago0xd0e851b2338437dbebd49c0deeb609d0eb944e40 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0xd54fb1cb118298c20719e9ac92f2ed120f641d701e0d331576e9814ae7a10398Claim136196312021-12-19 19:23:0738 days 22 hrs ago0x8d16c866e86057e471bae86dcc6251277e99dc41 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00037563
0xf2ad0e3d7389082d80f945a078cd535388ac2f4aca0d4b1c20952e99258457f4Claim135468752021-12-17 6:37:0141 days 11 hrs ago0x9458c54a975e7d61c9fb7103553692a590c28e08 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00035463
0x4fbb55127c077a327c6c10592b973e161eb1a3be66c2c2791d71bc4a32299a51Claim134106492021-12-12 12:32:2246 days 5 hrs ago0x75da1bf00d57c01bf3e817a2e5c7bdbf6b1e7766 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0xf959277961b240618881aef68c8c3b8bbfacbb67bd5c00c0a7d92929449f2461Claim132804682021-12-07 20:40:3950 days 21 hrs ago0x75da1bf00d57c01bf3e817a2e5c7bdbf6b1e7766 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00035463
0xd487ad0a737270bd1c4dd3eecc464acc2ffbc27d8994431a9f24fea184c72bdaClaim132804232021-12-07 20:38:0450 days 21 hrs ago0xef0bb4d98745a19ef7ef5269a00ba7e2dfa67035 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00035463
0x8238989cd2fd0ea7a56785c7499e918ca2e80938670c8591b742abbcb76d65eeClaim132443972021-12-06 12:59:0952 days 5 hrs ago0x36b964cb65ad90df1dd76d4a6f2b9c39c9348094 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0xa4498be108aca65840bad61dd8e1f9821afb91ffdd74248002259f9ad342b09eClaim132199752021-12-05 16:09:4153 days 2 hrs ago0x75da1bf00d57c01bf3e817a2e5c7bdbf6b1e7766 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0x4c4d9c6c110f8a0d970b8900a228261031dd67ce88652de01356bbd7d3226c1dStake131358842021-12-02 17:02:4956 days 1 hr ago0x5953d009299f31fac1d7b08176cc7a7a571405cb IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.001038145
0xabb109f3a2c34ec05f60c41ffe1643c30ab6883504b01720fa8274031d0ddbcfUnstake131358752021-12-02 17:02:2156 days 1 hr ago0x5953d009299f31fac1d7b08176cc7a7a571405cb IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00118749
0x37388abcca32bd4c8e07d8a6560879c46e210916f39d480d32488800de75d653Claim131345262021-12-02 15:53:3256 days 2 hrs ago0x75da1bf00d57c01bf3e817a2e5c7bdbf6b1e7766 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0x3635fbd598580dc0703e634023aa080555b1c8ab73b585ff594c8cef4d2ccabdClaim131081292021-12-01 16:59:5657 days 1 hr ago0xdbb3f882d6c83fe5ab4f334715ee638ac3683d9c IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00042963
0x9a002877eea0c15b4c662989f931ccb9060d6fd2a18da8f64577a9408afe30ccClaim130996832021-12-01 8:56:4457 days 9 hrs ago0xe55f6182e2d632d47724e63f1fdf6d98ef34b694 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00035463
0x2056c56bfa97f6c1f605c22edbd80ffc41d4fd9c63b8d9dec8fa636d74dcf86cClaim130892232021-11-30 23:33:4957 days 18 hrs ago0x005103734019b472056c6bea076dc3e565fa3dd9 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00035463
0x4318bf60307d8d8001c9efb22e5e3d7afbd27b40c5b6a7739a268ad3bd7fb0afClaim130611962021-11-29 22:45:3058 days 19 hrs ago0xef0bb4d98745a19ef7ef5269a00ba7e2dfa67035 IN  0xc4711d33853bcca4aed17a30f0acac4a037daf380 BNB0.00035463
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x01Cc6006F226D55835AfA13d30d54D7948651Bf3

Contract Name:
CondorStakingNFT

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-07-22
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.7.6 <0.8.0;

library EnumerableSet {

    struct Set {
        bytes32[] _values;

        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1;

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }
    
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }
    
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

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

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

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

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

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    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);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeMath {

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

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

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

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Math {
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

interface IERC900 {
    event Staked(address indexed user, uint256 amount, uint256 total, bytes data);
    event Unstaked(address indexed user, uint256 amount, uint256 total, bytes data);

    function stake(uint256 amount, bytes memory data) external;
    function unstake(uint256 amount, bytes memory data) external;
    function totalStakedFor(address addr) external view returns (uint256);
    function totalStaked() external view returns (uint256);
    function token() external view returns (address);
    function supportsHistory() external pure returns (bool);

    // optional
    function lastStakedFor(address addr) external view returns (uint256);
    function totalStakedForAt(address addr, uint256 blockNumber) external view returns (uint256);
    function totalStakedAt(uint256 blockNumber) external view returns (uint256);
}

interface IERC2917 {

    event InterestRatePerBlockChanged (uint256 oldValue, uint256 newValue);

    function interestsPerBlock() external view returns (uint256);
    function changeInterestRatePerBlock(uint value) external returns (bool);
    function getProductivity(address user) external view returns (uint256, uint256);
    function take() external view returns (uint256);
    function takeWithBlock() external view returns (uint256, uint256);
}

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;

        _;
        
        _status = _NOT_ENTERED;
    }
}

abstract contract AccessControl is Context {
    using EnumerableSet for EnumerableSet.AddressSet;
    using Address for address;

    struct RoleData {
        EnumerableSet.AddressSet members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function hasRole(bytes32 role, address account) public view returns (bool) {
        return _roles[role].members.contains(account);
    }

    function getRoleMemberCount(bytes32 role) public view returns (uint256) {
        return _roles[role].members.length();
    }

    function getRoleMember(bytes32 role, uint256 index) public view returns (address) {
        return _roles[role].members.at(index);
    }

    function getRoleAdmin(bytes32 role) public view returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, _roles[role].adminRole, adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (_roles[role].members.add(account)) {
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (_roles[role].members.remove(account)) {
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

abstract contract Pausable is Context {
    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    constructor () {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
}

contract ERC1155Holder is ERC1155Receiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] memory,
        uint256[] memory,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155BatchReceived.selector;
    }
}

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

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

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

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

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

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

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

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

    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

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

contract CondorWrappedERC20 is ERC20, AccessControl {
    
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    
    constructor() ERC20("Condor Token", "CONDOR") {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());
    }
    
    function mint(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "must have minter role to mint");
        _mint(to, amount);
    }
    
    function burn(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "must have minter role to mint");
        _burn(to, amount);
    }
}

contract CondorStakingNFT is IERC900, IERC2917, ERC1155Holder, AccessControl, ReentrancyGuard, Pausable {
    
    using SafeMath for uint256;
    
    struct SporeStakerInfo {
        uint256 totalAmountStaked;
        uint256 rewardPending;
        uint256 rewardDebt;
    }
    
    struct Checkpoint {
        uint256 at;
        uint256 amount;
    }
    
    CondorWrappedERC20 public CONDOR;
    IERC20 public powSPORE;
    IERC1155 public NFT;
    Checkpoint[] public stakeHistory;
    
    uint256 private _totalStaked;
    uint256 private _blockReward;
    
    uint256 public lastRewardBlock;
    uint256 public accAmountPerShare;
    
    uint256 public _poolKEY;
    uint256 public _exchangeRelationRatio;
    
    mapping(address => SporeStakerInfo) public stakers;
    mapping (address => Checkpoint[]) public stakesFor;
    
    event RewardsClaimed(address staker, uint256 amount);
    event KeyTokenChanged(uint256 oldID, uint256 newID);
    
    modifier update() {
        if(block.number > lastRewardBlock && block.number.sub(lastRewardBlock) > 0){
            if(_totalStaked == 0){
                lastRewardBlock = block.number;
            }
            else {
                uint256 multiplier = block.number.sub(lastRewardBlock);
                uint256 reward = multiplier.mul(_blockReward);
                
                accAmountPerShare = accAmountPerShare.add(reward.mul(1e18).div(_totalStaked));
                lastRewardBlock = block.number;
            }
        }
        _;
    }
    
    constructor(CondorWrappedERC20 _CONDOR, IERC20 _powSPORE, IERC1155 _NFT, uint256 _key, uint256 _reward, uint256 _relationRatio) {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        
        CONDOR = _CONDOR;
        powSPORE = _powSPORE;
        NFT = _NFT;
        
        _poolKEY = _key;
        _blockReward = _reward;
        _exchangeRelationRatio = _relationRatio;
    }
    
    function getPoolKeyToken() public view returns (uint256) {
        return _poolKEY;
    }
    
    function changePoolKeyToken(uint256 id) external returns (bool) {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        
        uint256 old = _poolKEY;
        _poolKEY = id;

        emit KeyTokenChanged(old, id);
        return true;
    }
    
    function _getUpdatedAccAmountPerShare() internal view virtual returns (uint256 _accAmountPerShare) {
        _accAmountPerShare = accAmountPerShare;
        
        if (block.number > lastRewardBlock && _totalStaked != 0) {
            uint256 multiplier = block.number.sub(lastRewardBlock);
            uint256 reward = multiplier.mul(_blockReward);
            _accAmountPerShare = _accAmountPerShare.add(reward.mul(1e18).div(_totalStaked));
        }
        
        return _accAmountPerShare;
    }
    
    function getUserAvailableStaking(address addr) public view returns (uint256) {
        uint256 availableBalance = 0;
        
        if(powSPORE.balanceOf(addr) > 0){
            availableBalance = powSPORE.balanceOf(addr).div(_exchangeRelationRatio);
            
            if(stakers[addr].totalAmountStaked > 0) {
                availableBalance = availableBalance.sub(stakers[addr].totalAmountStaked);
            }
        }
        
        return availableBalance;
    }
    
    function stake(uint256 amount, bytes memory data) public override nonReentrant whenNotPaused update {
        require(amount > 0, "Cannot stake 0");
        require(getUserAvailableStaking(_msgSender()) >= amount, "You cannot stake that amount, more spore power needed.");
        
        updateCheckpointAtNow(stakesFor[_msgSender()], amount, false);
        updateCheckpointAtNow(stakeHistory, amount, false);
        
        SporeStakerInfo storage staker = stakers[_msgSender()];
        if (staker.totalAmountStaked > 0) {
            uint256 pending = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18).sub(staker.rewardDebt);
            staker.rewardPending = staker.rewardPending.add(pending);
        }
        
        staker.totalAmountStaked = staker.totalAmountStaked.add(amount);
        staker.rewardDebt = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18);
        _totalStaked = _totalStaked.add(amount);
        
        NFT.safeTransferFrom(_msgSender(), address(this), _poolKEY, amount, data);
        
        emit Staked(_msgSender(), amount, staker.totalAmountStaked, data);
    }
    
    
    function unstake(uint256 amount, bytes memory data) public override nonReentrant whenNotPaused update {
        require(_msgSender() != address(0), "transfer from the zero address");
        require(stakers[_msgSender()].totalAmountStaked >= amount, "amount exceeds your total staked balance");
        
        updateCheckpointAtNow(stakesFor[_msgSender()], amount, true);
        updateCheckpointAtNow(stakeHistory, amount, true);
        
        SporeStakerInfo storage staker = stakers[_msgSender()];
       
        uint256 pending = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18).sub(staker.rewardDebt);
        staker.rewardPending = staker.rewardPending.add(pending);
        
        staker.totalAmountStaked = staker.totalAmountStaked.sub(amount);
        staker.rewardDebt = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18);
        _totalStaked = _totalStaked.sub(amount);
        
        NFT.safeTransferFrom(address(this), _msgSender(), _poolKEY, amount, data);
        
        emit Unstaked(_msgSender(), amount, staker.totalAmountStaked, data);
    }

    function totalStakedFor(address addr) public view override returns (uint256) {
        return stakers[addr].totalAmountStaked;
    }

    function totalStaked() public view override returns (uint256) {
        return _totalStaked;
    }
    
    function supportsHistory() public pure override returns (bool) {
        return true;
    }
    
    function lastStakedFor(address addr) public view override returns (uint256) {
        Checkpoint[] storage stakes = stakesFor[addr];

        if (stakes.length == 0) {
            return 0;
        }

        return stakes[stakes.length-1].at;
    }

    function totalStakedForAt(address addr, uint256 blockNumber) public view override returns (uint256) {
        return stakedAt(stakesFor[addr], blockNumber);
    }

    function totalStakedAt(uint256 blockNumber) public view override returns (uint256) {
        return stakedAt(stakeHistory, blockNumber);
    }
    
    function token() public view override returns (address) {
        return address(powSPORE);
    }

    function updateCheckpointAtNow(Checkpoint[] storage history, uint256 amount, bool isUnstake) internal {

        uint256 length = history.length;
        if (length == 0) {
            history.push(Checkpoint({at: block.number, amount: amount}));
            return;
        }

        if (history[length-1].at < block.number) {
            history.push(Checkpoint({at: block.number, amount: history[length-1].amount}));
        }

        Checkpoint storage checkpoint = history[length];

        if (isUnstake) {
            checkpoint.amount = checkpoint.amount.sub(amount);
        } else {
            checkpoint.amount = checkpoint.amount.add(amount);
        }
    }

    function stakedAt(Checkpoint[] storage history, uint256 blockNumber) internal view returns (uint256) {
        uint256 length = history.length;

        if (length == 0 || blockNumber < history[0].at) {
            return 0;
        }

        if (blockNumber >= history[length-1].at) {
            return history[length-1].amount;
        }

        uint min = 0;
        uint max = length-1;
        while (max > min) {
            uint mid = (max + min + 1) / 2;
            if (history[mid].at <= blockNumber) {
                min = mid;
            } else {
                max = mid-1;
            }
        }

        return history[min].amount;
    }
    
    function changeInterestRatePerBlock(uint value) external override returns (bool) {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        require(value != _blockReward, 'amounts are the same');
        
        uint256 old = _blockReward;
        _blockReward = value;

        emit InterestRatePerBlockChanged(old, value);
        return true;
    }
    
    function getProductivity(address user) external override view returns (uint256, uint256) {
        return (stakers[user].totalAmountStaked, _totalStaked);
    }

    function interestsPerBlock() external override view returns (uint256) {
        return accAmountPerShare;
    }
    
    function rewardPerBlock() public view returns (uint256) {
        return _blockReward;
    }
    
    function stakerShare(address user) public view returns (uint256) {
        return stakers[user].totalAmountStaked.mul(accAmountPerShare).div(1e18);
    }

    function take() external override view returns (uint256) {
        SporeStakerInfo storage staker = stakers[_msgSender()];
        uint256 _accAmountPerShare = _getUpdatedAccAmountPerShare();
        
        return staker.totalAmountStaked.mul(_accAmountPerShare).div(1e18).add(staker.rewardPending).sub(staker.rewardDebt);
    }

    function takeWithAddress(address user) external view returns (uint256) {
        SporeStakerInfo storage staker = stakers[user];
        uint256 _accAmountPerShare = _getUpdatedAccAmountPerShare();
        
        return staker.totalAmountStaked.mul(_accAmountPerShare).div(1e18).add(staker.rewardPending).sub(staker.rewardDebt);
    }

    function takeWithBlock() external override view returns (uint256, uint256) {
        SporeStakerInfo storage staker = stakers[_msgSender()];
        uint256 _accAmountPerShare = _getUpdatedAccAmountPerShare();

        return (staker.totalAmountStaked.mul(_accAmountPerShare).div(1e18).add(staker.rewardPending).sub(staker.rewardDebt), block.number);
    }
    
    function claim() public nonReentrant whenNotPaused update {
        
        SporeStakerInfo storage staker = stakers[_msgSender()];
        
        uint256 _amount = staker.totalAmountStaked.mul(accAmountPerShare).div(1e18);
        uint256 _pending = _amount.add(staker.rewardPending).sub(staker.rewardDebt);
        
        if(_pending > 0) {
            
            CONDOR.mint(_msgSender(), _pending);
            staker.rewardDebt = _amount;
            staker.rewardPending = 0;
            
            emit RewardsClaimed(_msgSender(), _pending);
        }
    }
    
    function pause() public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        _pause();
    }

    function unpause() public virtual {
        require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "must have admin role");
        _unpause();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract CondorWrappedERC20","name":"_CONDOR","type":"address"},{"internalType":"contract IERC20","name":"_powSPORE","type":"address"},{"internalType":"contract IERC1155","name":"_NFT","type":"address"},{"internalType":"uint256","name":"_key","type":"uint256"},{"internalType":"uint256","name":"_reward","type":"uint256"},{"internalType":"uint256","name":"_relationRatio","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"InterestRatePerBlockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newID","type":"uint256"}],"name":"KeyTokenChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"CONDOR","outputs":[{"internalType":"contract CondorWrappedERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_exchangeRelationRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_poolKEY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accAmountPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"changeInterestRatePerBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"changePoolKeyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPoolKeyToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getProductivity","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getUserAvailableStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interestsPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"lastStakedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"powSPORE","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeHistory","outputs":[{"internalType":"uint256","name":"at","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"stakerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"uint256","name":"totalAmountStaked","type":"uint256"},{"internalType":"uint256","name":"rewardPending","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakesFor","outputs":[{"internalType":"uint256","name":"at","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supportsHistory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"take","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"takeWithAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeWithBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"totalStakedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"totalStakedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"totalStakedForAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200419f3803806200419f833981810160405260c08110156200003757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600180819055506000600260006101000a81548160ff021916908315150217905550620000c06000801b620000b4620001a460201b60201c565b620001ac60201b60201c565b85600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a819055508160078190555080600b819055505050505050506200033a565b600033905090565b620001be8282620001c260201b60201c565b5050565b620001f0816000808581526020019081526020016000206000016200026560201b620030571790919060201c565b15620002615762000206620001a460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000295836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200029d60201b60201c565b905092915050565b6000620002b183836200031760201b60201c565b6200030c57826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000311565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b613e55806200034a6000396000f3fe608060405234801561001057600080fd5b506004361061027e5760003560e01c80637c0b8de21161015c578063bc197c81116100ce578063d547741f11610087578063d547741f14610e2f578063e0c7f6c214610e7d578063ede3842114610ee6578063f23a6e6114610f48578063fc0c546a1461108a578063ff68dd60146110be5761027e565b8063bc197c8114610a54578063bfc8b20814610caa578063c8fd6ed014610cc8578063c9c5323214610d8d578063ca15c87314610dcf578063d0124c7614610e115761027e565b80639010d07c116101205780639010d07c146108ce5780639168ae721461093057806391d1485414610996578063a217fddf146109fa578063a9f8d18114610a18578063aaae5c0014610a365761027e565b80637c0b8de214610820578063817b1cd2146108545780638456cb59146108725780638ae39cac1461087c5780638bf4aa751461089a5761027e565b80633f4ba83a116101f55780635c975abb116101b95780635c975abb146106ce5780635fc5b1b1146106ee5780636622c8381461070c5780637033e4a61461076457806371271cf7146107845780637b381b35146107dc5761027e565b80633f4ba83a146105d55780634a945daf146105df5780634b341aed146106235780634e71d92d1461067b5780635c5b1105146106855761027e565b8063233b745111610247578063233b745114610422578063248a9ca31461047a57806328e964e9146104bc5780632f2ff15d1461051b57806336568abe146105695780633a608032146105b75761027e565b8062b536fc1461028357806301ffc9a7146102b75780630e0b6eb51461031a5780630e89439b1461033f578063159090bd14610404575b600080fd5b61028b611116565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610302600480360360208110156102cd57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061113c565b60405180821515815260200191505060405180910390f35b6103226111b6565b604051808381526020018281526020019250505060405180910390f35b6104026004803603604081101561035557600080fd5b81019080803590602001909291908035906020019064010000000081111561037c57600080fd5b82018360208201111561038e57600080fd5b803590602001918460018302840111640100000000831117156103b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611277565b005b61040c6118d1565b6040518082815260200191505060405180910390f35b6104646004803603602081101561043857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061198c565b6040518082815260200191505060405180910390f35b6104a66004803603602081101561049057600080fd5b8101908080359060200190929190505050611a15565b6040518082815260200191505060405180910390f35b6104fe600480360360208110156104d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a34565b604051808381526020018281526020019250505060405180910390f35b6105676004803603604081101561053157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a86565b005b6105b56004803603604081101561057f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b0f565b005b6105bf611ba8565b6040518082815260200191505060405180910390f35b6105dd611bae565b005b61060b600480360360208110156105f557600080fd5b8101908080359060200190929190505050611c3e565b60405180821515815260200191505060405180910390f35b6106656004803603602081101561063957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d1d565b6040518082815260200191505060405180910390f35b610683611d69565b005b6106b16004803603602081101561069b57600080fd5b8101908080359060200190929190505050612115565b604051808381526020018281526020019250505060405180910390f35b6106d6612149565b60405180821515815260200191505060405180910390f35b6106f6612160565b6040518082815260200191505060405180910390f35b61074e6004803603602081101561072257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612166565b6040518082815260200191505060405180910390f35b61076c61221c565b60405180821515815260200191505060405180910390f35b6107c66004803603602081101561079a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612225565b6040518082815260200191505060405180910390f35b610808600480360360208110156107f257600080fd5b810190808035906020019092919050505061247f565b60405180821515815260200191505060405180910390f35b6108286125d6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61085c6125fc565b6040518082815260200191505060405180910390f35b61087a612606565b005b610884612696565b6040518082815260200191505060405180910390f35b6108a26126a0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610904600480360360408110156108e457600080fd5b8101908080359060200190929190803590602001909291905050506126c6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109726004803603602081101561094657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126f7565b60405180848152602001838152602001828152602001935050505060405180910390f35b6109e2600480360360408110156109ac57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612721565b60405180821515815260200191505060405180910390f35b610a02612752565b6040518082815260200191505060405180910390f35b610a20612759565b6040518082815260200191505060405180910390f35b610a3e61275f565b6040518082815260200191505060405180910390f35b610c75600480360360a0811015610a6a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ac757600080fd5b820183602082011115610ad957600080fd5b80359060200191846020830284011164010000000083111715610afb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b5b57600080fd5b820183602082011115610b6d57600080fd5b80359060200191846020830284011164010000000083111715610b8f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610bef57600080fd5b820183602082011115610c0157600080fd5b80359060200191846001830284011164010000000083111715610c2357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612769565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b610cb261277e565b6040518082815260200191505060405180910390f35b610d8b60048036036040811015610cde57600080fd5b810190808035906020019092919080359060200190640100000000811115610d0557600080fd5b820183602082011115610d1757600080fd5b80359060200191846001830284011164010000000083111715610d3957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612788565b005b610db960048036036020811015610da357600080fd5b8101908080359060200190929190505050612e42565b6040518082815260200191505060405180910390f35b610dfb60048036036020811015610de557600080fd5b8101908080359060200190929190505050612e56565b6040518082815260200191505060405180910390f35b610e19612e7c565b6040518082815260200191505060405180910390f35b610e7b60048036036040811015610e4557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e82565b005b610ec960048036036040811015610e9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f0b565b604051808381526020018281526020019250505060405180910390f35b610f3260048036036040811015610efc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f4c565b6040518082815260200191505060405180910390f35b611055600480360360a0811015610f5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610fcf57600080fd5b820183602082011115610fe157600080fd5b8035906020019184600183028401116401000000008311171561100357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612f9e565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b611092612fb3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611100600480360360208110156110d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fdd565b6040518082815260200191505060405180910390f35b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806111af57506111ae82613087565b5b9050919050565b6000806000600c60006111c76130f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061120d6130f9565b905061126c826002015461125e8460010154611250670de0b6b3a764000061124287896000015461319490919063ffffffff16565b61321a90919063ffffffff16565b61326490919063ffffffff16565b6132ec90919063ffffffff16565b439350935050509091565b600260015414156112f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550611300612149565b15611373576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6008544311801561139857506000611396600854436132ec90919063ffffffff16565b115b1561143a57600060065414156113b45743600881905550611439565b60006113cb600854436132ec90919063ffffffff16565b905060006113e46007548361319490919063ffffffff16565b905061142961141860065461140a670de0b6b3a76400008561319490919063ffffffff16565b61321a90919063ffffffff16565b60095461326490919063ffffffff16565b6009819055504360088190555050505b5b600082116114b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b816114c16114bc6130f1565b612225565b1015611518576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613d426036913960400191505060405180910390fd5b611569600d60006115276130f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836000613336565b6115766005836000613336565b6000600c60006115846130f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154111561163b576000611618826002015461160a670de0b6b3a76400006115fc600954876000015461319490919063ffffffff16565b61321a90919063ffffffff16565b6132ec90919063ffffffff16565b905061163181836001015461326490919063ffffffff16565b8260010181905550505b61165283826000015461326490919063ffffffff16565b816000018190555061168d670de0b6b3a764000061167f600954846000015461319490919063ffffffff16565b61321a90919063ffffffff16565b81600201819055506116aa8360065461326490919063ffffffff16565b600681905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a6116f66130f1565b30600a5487876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561178f578082015181840152602081019050611774565b50505050905090810190601f1680156117bc5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b1580156117df57600080fd5b505af11580156117f3573d6000803e3d6000fd5b505050506117ff6130f1565b73ffffffffffffffffffffffffffffffffffffffff167fc65e53b88159e7d2c0fc12a0600072e28ae53ff73b4c1715369c30f160935142848360000154856040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561188957808201518184015260208101905061186e565b50505050905090810190601f1680156118b65780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a250600180819055505050565b600080600c60006118e06130f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006119266130f9565b905061198582600201546119778460010154611969670de0b6b3a764000061195b87896000015461319490919063ffffffff16565b61321a90919063ffffffff16565b61326490919063ffffffff16565b6132ec90919063ffffffff16565b9250505090565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000818054905014156119e7576000915050611a10565b806001828054905003815481106119fa57fe5b9060005260206000209060020201600001549150505b919050565b6000806000838152602001908152602001600020600201549050919050565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460065491509150915091565b611aac60008084815260200190815260200160002060020154611aa76130f1565b612721565b611b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613d13602f913960400191505060405180910390fd5b611b0b82826134b1565b5050565b611b176130f1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613df1602f913960400191505060405180910390fd5b611ba48282613544565b5050565b60095481565b611bc26000801b611bbd6130f1565b612721565b611c34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6d75737420686176652061646d696e20726f6c6500000000000000000000000081525060200191505060405180910390fd5b611c3c6135d7565b565b6000611c546000801b611c4f6130f1565b612721565b611cc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6d75737420686176652061646d696e20726f6c6500000000000000000000000081525060200191505060405180910390fd5b6000600a54905082600a819055507f16790834b2f0464f7284e258491a72b6b00dc8b24fc30785b254c9cf5cd387488184604051808381526020018281526020019250505060405180910390a16001915050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60026001541415611de2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550611df2612149565b15611e65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60085443118015611e8a57506000611e88600854436132ec90919063ffffffff16565b115b15611f2c5760006006541415611ea65743600881905550611f2b565b6000611ebd600854436132ec90919063ffffffff16565b90506000611ed66007548361319490919063ffffffff16565b9050611f1b611f0a600654611efc670de0b6b3a76400008561319490919063ffffffff16565b61321a90919063ffffffff16565b60095461326490919063ffffffff16565b6009819055504360088190555050505b5b6000600c6000611f3a6130f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611fab670de0b6b3a7640000611f9d600954856000015461319490919063ffffffff16565b61321a90919063ffffffff16565b90506000611fdc8360020154611fce85600101548561326490919063ffffffff16565b6132ec90919063ffffffff16565b9050600081111561210957600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1961202d6130f1565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561208157600080fd5b505af1158015612095573d6000803e3d6000fd5b50505050818360020181905550600083600101819055507ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe6120d56130f1565b82604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b50505060018081905550565b6005818154811061212557600080fd5b90600052602060002090600202016000915090508060000154908060010154905082565b6000600260009054906101000a900460ff16905090565b600a5481565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006121b46130f9565b9050612213826002015461220584600101546121f7670de0b6b3a76400006121e987896000015461319490919063ffffffff16565b61321a90919063ffffffff16565b61326490919063ffffffff16565b6132ec90919063ffffffff16565b92505050919050565b60006001905090565b600080600090506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122b757600080fd5b505afa1580156122cb573d6000803e3d6000fd5b505050506040513d60208110156122e157600080fd5b81019080805190602001909291905050501115612476576123d0600b54600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561238757600080fd5b505afa15801561239b573d6000803e3d6000fd5b505050506040513d60208110156123b157600080fd5b810190808051906020019092919050505061321a90919063ffffffff16565b90506000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154111561247557612472600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154826132ec90919063ffffffff16565b90505b5b80915050919050565b60006124956000801b6124906130f1565b612721565b612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6d75737420686176652061646d696e20726f6c6500000000000000000000000081525060200191505060405180910390fd5b60075482141561257f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616d6f756e747320617265207468652073616d6500000000000000000000000081525060200191505060405180910390fd5b60006007549050826007819055507fc44c80d7c6ac73ee13b2c62e50522dadb6c646b4509ca93e52a45abb38a78e338184604051808381526020018281526020019250505060405180910390a16001915050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b61261a6000801b6126156130f1565b612721565b61268c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6d75737420686176652061646d696e20726f6c6500000000000000000000000081525060200191505060405180910390fd5b6126946136c2565b565b6000600754905090565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126ef826000808681526020019081526020016000206000016137ae90919063ffffffff16565b905092915050565b600c6020528060005260406000206000915090508060000154908060010154908060020154905083565b600061274a826000808681526020019081526020016000206000016137c890919063ffffffff16565b905092915050565b6000801b81565b60085481565b6000600a54905090565b600063bc197c8160e01b905095945050505050565b6000600954905090565b60026001541415612801576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550612811612149565b15612884576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b600854431180156128a9575060006128a7600854436132ec90919063ffffffff16565b115b1561294b57600060065414156128c5574360088190555061294a565b60006128dc600854436132ec90919063ffffffff16565b905060006128f56007548361319490919063ffffffff16565b905061293a61292960065461291b670de0b6b3a76400008561319490919063ffffffff16565b61321a90919063ffffffff16565b60095461326490919063ffffffff16565b6009819055504360088190555050505b5b600073ffffffffffffffffffffffffffffffffffffffff1661296b6130f1565b73ffffffffffffffffffffffffffffffffffffffff1614156129f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f7472616e736665722066726f6d20746865207a65726f2061646472657373000081525060200191505060405180910390fd5b81600c6000612a026130f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541015612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613d786028913960400191505060405180910390fd5b612ae8600d6000612aa66130f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836001613336565b612af56005836001613336565b6000600c6000612b036130f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000612b8a8260020154612b7c670de0b6b3a7640000612b6e600954876000015461319490919063ffffffff16565b61321a90919063ffffffff16565b6132ec90919063ffffffff16565b9050612ba381836001015461326490919063ffffffff16565b8260010181905550612bc28483600001546132ec90919063ffffffff16565b8260000181905550612bfd670de0b6b3a7640000612bef600954856000015461319490919063ffffffff16565b61321a90919063ffffffff16565b8260020181905550612c1a846006546132ec90919063ffffffff16565b600681905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30612c676130f1565b600a5488886040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612cff578082015181840152602081019050612ce4565b50505050905090810190601f168015612d2c5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015612d4f57600080fd5b505af1158015612d63573d6000803e3d6000fd5b50505050612d6f6130f1565b73ffffffffffffffffffffffffffffffffffffffff167faf01bfc8475df280aca00b578c4a948e6d95700f0db8c13365240f7f973c8754858460000154866040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612df9578082015181840152602081019050612dde565b50505050905090810190601f168015612e265780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a25050600180819055505050565b6000612e4f6005836137f8565b9050919050565b6000612e75600080848152602001908152602001600020600001613916565b9050919050565b600b5481565b612ea860008084815260200190815260200160002060020154612ea36130f1565b612721565b612efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180613da06030913960400191505060405180910390fd5b612f078282613544565b5050565b600d6020528160005260406000208181548110612f2757600080fd5b9060005260206000209060020201600091509150508060000154908060010154905082565b6000612f96600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836137f8565b905092915050565b600063f23a6e6160e01b905095945050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613050670de0b6b3a7640000613042600954600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461319490919063ffffffff16565b61321a90919063ffffffff16565b9050919050565b600061307f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61392b565b905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60006009549050600854431180156131145750600060065414155b15613191576000613130600854436132ec90919063ffffffff16565b905060006131496007548361319490919063ffffffff16565b905061318c61317d60065461316f670de0b6b3a76400008561319490919063ffffffff16565b61321a90919063ffffffff16565b8461326490919063ffffffff16565b925050505b90565b6000808314156131a75760009050613214565b60008284029050828482816131b857fe5b041461320f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613dd06021913960400191505060405180910390fd5b809150505b92915050565b600061325c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061399b565b905092915050565b6000808284019050838110156132e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061332e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a61565b905092915050565b60008380549050905060008114156133a35783604051806040016040528043815260200185815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000155602082015181600101555050506134ac565b438460018303815481106133b357fe5b9060005260206000209060020201600001541015613441578360405180604001604052804381526020018660018503815481106133ec57fe5b9060005260206000209060020201600101548152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550505b600084828154811061344f57fe5b9060005260206000209060020201905082156134895761347c8482600101546132ec90919063ffffffff16565b81600101819055506134a9565b6134a084826001015461326490919063ffffffff16565b81600101819055505b50505b505050565b6134d88160008085815260200190815260200160002060000161305790919063ffffffff16565b15613540576134e56130f1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61356b81600080858152602001908152602001600020600001613b2190919063ffffffff16565b156135d3576135786130f1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6135df612149565b613651576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6136956130f1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6136ca612149565b1561373d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586137816130f1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006137bd8360000183613b51565b60001c905092915050565b60006137f0836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613bd4565b905092915050565b60008083805490509050600081148061382e57508360008154811061381957fe5b90600052602060002090600202016000015483105b1561383d576000915050613910565b83600182038154811061384c57fe5b906000526020600020906002020160000154831061388d5783600182038154811061387357fe5b906000526020600020906002020160010154915050613910565b6000806001830390505b818111156138ec5760006002600184840101816138b057fe5b049050858782815481106138c057fe5b906000526020600020906002020160000154116138df578092506138e6565b6001810391505b50613897565b8582815481106138f857fe5b90600052602060002090600202016001015493505050505b92915050565b600061392482600001613bf7565b9050919050565b60006139378383613bd4565b613990578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613995565b600090505b92915050565b60008083118290613a47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a0c5780820151818401526020810190506139f1565b50505050905090810190601f168015613a395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a5357fe5b049050809150509392505050565b6000838311158290613b0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ad3578082015181840152602081019050613ab8565b50505050905090810190601f168015613b005780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000613b49836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613c08565b905092915050565b600081836000018054905011613bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613cf16022913960400191505060405180910390fd5b826000018281548110613bc157fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b60008083600101600084815260200190815260200160002054905060008114613ce45760006001820390506000600186600001805490500390506000866000018281548110613c5357fe5b9060005260206000200154905080876000018481548110613c7057fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480613ca857fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050613cea565b60009150505b9291505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74596f752063616e6e6f74207374616b65207468617420616d6f756e742c206d6f72652073706f726520706f776572206e65656465642e616d6f756e74206578636565647320796f757220746f74616c207374616b65642062616c616e6365416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220f371bcd9de0fbd7aa5dab3fad7c61956a295af8428ff7946148baf9437b3ee9264736f6c63430007060033000000000000000000000000878b87ce0d7d877855a65492eb6a4ca50849ac97000000000000000000000000b00c1382e91cfb6573879c586f8b1c2f90c0e801000000000000000000000000379103ae932c7eed64913e53a0121a0495f30d3600000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000001ff973cafa80000000000000000000000000000000000000000000000000004563918244f40000

Deployed ByteCode Sourcemap

25719:11096:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26138:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19998:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35538:361;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;29146:1141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34846:335;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31780:257;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17430:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34282:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;17552:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18025:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26351:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36664:148;;;:::i;:::-;;27815:288;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31421:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35911:589;;;:::i;:::-;;26193:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;19171:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26396:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35189:341;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31675:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28641:493;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33874:396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26167:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31563:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36512:144;;;:::i;:::-;;34577:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26099:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17284:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26476:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17002:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16636:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26314:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27712:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20512:255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;34452:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30305:1108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32217:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17149:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26426:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17787:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26533:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;32045:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20277:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;32373:99;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34683:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26138:22;;;;;;;;;;;;;:::o;19998:223::-;20100:4;20139:34;20124:49;;;:11;:49;;;;:89;;;;20177:36;20201:11;20177:23;:36::i;:::-;20124:89;20117:96;;19998:223;;;:::o;35538:361::-;35595:7;35604;35624:30;35657:7;:21;35665:12;:10;:12::i;:::-;35657:21;;;;;;;;;;;;;;;35624:54;;35689:26;35718:30;:28;:30::i;:::-;35689:59;;35769:107;35858:6;:17;;;35769:84;35832:6;:20;;;35769:58;35822:4;35769:48;35798:18;35769:6;:24;;;:28;;:48;;;;:::i;:::-;:52;;:58;;;;:::i;:::-;:62;;:84;;;;:::i;:::-;:88;;:107;;;;:::i;:::-;35878:12;35761:130;;;;;;35538:361;;:::o;29146:1141::-;16034:1;16183:7;;:19;;16175:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16034:1;16251:7;:18;;;;19310:8:::1;:6;:8::i;:::-;19309:9;19301:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26766:15:::2;;26751:12;:30;:71;;;;;26821:1;26785:33;26802:15;;26785:12;:16;;:33;;;;:::i;:::-;:37;26751:71;26748:522;;;26857:1;26841:12;;:17;26838:421;;;26896:12;26878:15;:30;;;;26838:421;;;26962:18;26983:33;27000:15;;26983:12;:16;;:33;;;;:::i;:::-;26962:54;;27035:14;27052:28;27067:12;;27052:10;:14;;:28;;;;:::i;:::-;27035:45;;27137:57;27159:34;27180:12;;27159:16;27170:4;27159:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;27137:17;;:21;;:57;;;;:::i;:::-;27117:17;:77;;;;27231:12;27213:15;:30;;;;26838:421;;;26748:522;29274:1:::3;29265:6;:10;29257:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;29354:6;29313:37;29337:12;:10;:12::i;:::-;29313:23;:37::i;:::-;:47;;29305:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29440:61;29462:9;:23;29472:12;:10;:12::i;:::-;29462:23;;;;;;;;;;;;;;;29487:6;29495:5;29440:21;:61::i;:::-;29512:50;29534:12;29548:6;29556:5;29512:21;:50::i;:::-;29583:30;29616:7;:21;29624:12;:10;:12::i;:::-;29616:21;;;;;;;;;;;;;;;29583:54;;29679:1;29652:6;:24;;;:28;29648:230;;;29697:15;29715:80;29777:6;:17;;;29715:57;29767:4;29715:47;29744:17;;29715:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;:61;;:80;;;;:::i;:::-;29697:98;;29833:33;29858:7;29833:6;:20;;;:24;;:33;;;;:::i;:::-;29810:6;:20;;:56;;;;29648:230;;29925:36;29954:6;29925;:24;;;:28;;:36;;;;:::i;:::-;29898:6;:24;;:63;;;;29992:57;30044:4;29992:47;30021:17;;29992:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;29972:6;:17;;:77;;;;30075:24;30092:6;30075:12;;:16;;:24;;;;:::i;:::-;30060:12;:39;;;;30120:3;;;;;;;;;;;:20;;;30141:12;:10;:12::i;:::-;30163:4;30170:8;;30180:6;30188:4;30120:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;30226:12;:10;:12::i;:::-;30219:60;;;30240:6;30248;:24;;;30274:4;30219:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27280:1;15990::::0;16304:7;:22;;;;29146:1141;;:::o;34846:335::-;34894:7;34914:30;34947:7;:21;34955:12;:10;:12::i;:::-;34947:21;;;;;;;;;;;;;;;34914:54;;34979:26;35008:30;:28;:30::i;:::-;34979:59;;35066:107;35155:6;:17;;;35066:84;35129:6;:20;;;35066:58;35119:4;35066:48;35095:18;35066:6;:24;;;:28;;:48;;;;:::i;:::-;:52;;:58;;;;:::i;:::-;:62;;:84;;;;:::i;:::-;:88;;:107;;;;:::i;:::-;35059:114;;;;34846:335;:::o;31780:257::-;31847:7;31867:27;31897:9;:15;31907:4;31897:15;;;;;;;;;;;;;;;31867:45;;31946:1;31929:6;:13;;;;:18;31925:59;;;31971:1;31964:8;;;;;31925:59;32003:6;32024:1;32010:6;:13;;;;:15;32003:23;;;;;;;;;;;;;;;;;;:26;;;31996:33;;;31780:257;;;;:::o;17430:114::-;17487:7;17514:6;:12;17521:4;17514:12;;;;;;;;;;;:22;;;17507:29;;17430:114;;;:::o;34282:162::-;34353:7;34362;34390;:13;34398:4;34390:13;;;;;;;;;;;;;;;:31;;;34423:12;;34382:54;;;;34282:162;;;:::o;17552:227::-;17636:45;17644:6;:12;17651:4;17644:12;;;;;;;;;;;:22;;;17668:12;:10;:12::i;:::-;17636:7;:45::i;:::-;17628:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17746:25;17757:4;17763:7;17746:10;:25::i;:::-;17552:227;;:::o;18025:209::-;18123:12;:10;:12::i;:::-;18112:23;;:7;:23;;;18104:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18200:26;18212:4;18218:7;18200:11;:26::i;:::-;18025:209;;:::o;26351:32::-;;;;:::o;36664:148::-;36717:41;16681:4;36725:18;;36745:12;:10;:12::i;:::-;36717:7;:41::i;:::-;36709:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36794:10;:8;:10::i;:::-;36664:148::o;27815:288::-;27873:4;27898:41;16681:4;27906:18;;27926:12;:10;:12::i;:::-;27898:7;:41::i;:::-;27890:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27985:11;27999:8;;27985:22;;28029:2;28018:8;:13;;;;28049:24;28065:3;28070:2;28049:24;;;;;;;;;;;;;;;;;;;;;;;;28091:4;28084:11;;;27815:288;;;:::o;31421:134::-;31489:7;31516;:13;31524:4;31516:13;;;;;;;;;;;;;;;:31;;;31509:38;;31421:134;;;:::o;35911:589::-;16034:1;16183:7;;:19;;16175:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16034:1;16251:7;:18;;;;19310:8:::1;:6;:8::i;:::-;19309:9;19301:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26766:15:::2;;26751:12;:30;:71;;;;;26821:1;26785:33;26802:15;;26785:12;:16;;:33;;;;:::i;:::-;:37;26751:71;26748:522;;;26857:1;26841:12;;:17;26838:421;;;26896:12;26878:15;:30;;;;26838:421;;;26962:18;26983:33;27000:15;;26983:12;:16;;:33;;;;:::i;:::-;26962:54;;27035:14;27052:28;27067:12;;27052:10;:14;;:28;;;;:::i;:::-;27035:45;;27137:57;27159:34;27180:12;;27159:16;27170:4;27159:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;27137:17;;:21;;:57;;;;:::i;:::-;27117:17;:77;;;;27231:12;27213:15;:30;;;;26838:421;;;26748:522;35990:30:::3;36023:7;:21;36031:12;:10;:12::i;:::-;36023:21;;;;;;;;;;;;;;;35990:54;;36065:15;36083:57;36135:4;36083:47;36112:17;;36083:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;36065:75;;36151:16;36170:56;36208:6;:17;;;36170:33;36182:6;:20;;;36170:7;:11;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;36151:75;;36261:1;36250:8;:12;36247:246;;;36293:6;;;;;;;;;;;:11;;;36305:12;:10;:12::i;:::-;36319:8;36293:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;36363:7;36343:6;:17;;:27;;;;36408:1;36385:6;:20;;:24;;;;36443:38;36458:12;:10;:12::i;:::-;36472:8;36443:38;;;;;;;;;;;;;;;;;;;;;;;;;;36247:246;27280:1;;;15990::::0;16304:7;:22;;;;35911:589::o;26193:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19171:86::-;19218:4;19242:7;;;;;;;;;;;19235:14;;19171:86;:::o;26396:23::-;;;;:::o;35189:341::-;35251:7;35271:30;35304:7;:13;35312:4;35304:13;;;;;;;;;;;;;;;35271:46;;35328:26;35357:30;:28;:30::i;:::-;35328:59;;35415:107;35504:6;:17;;;35415:84;35478:6;:20;;;35415:58;35468:4;35415:48;35444:18;35415:6;:24;;;:28;;:48;;;;:::i;:::-;:52;;:58;;;;:::i;:::-;:62;;:84;;;;:::i;:::-;:88;;:107;;;;:::i;:::-;35408:114;;;;35189:341;;;:::o;31675:93::-;31732:4;31756;31749:11;;31675:93;:::o;28641:493::-;28709:7;28729:24;28756:1;28729:28;;28808:1;28781:8;;;;;;;;;;;:18;;;28800:4;28781:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:28;28778:305;;;28844:52;28873:22;;28844:8;;;;;;;;;;;:18;;;28863:4;28844:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:28;;:52;;;;:::i;:::-;28825:71;;28962:1;28928:7;:13;28936:4;28928:13;;;;;;;;;;;;;;;:31;;;:35;28925:147;;;29003:53;29024:7;:13;29032:4;29024:13;;;;;;;;;;;;;;;:31;;;29003:16;:20;;:53;;;;:::i;:::-;28984:72;;28925:147;28778:305;29110:16;29103:23;;;28641:493;;;:::o;33874:396::-;33949:4;33974:41;16681:4;33982:18;;34002:12;:10;:12::i;:::-;33974:7;:41::i;:::-;33966:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34068:12;;34059:5;:21;;34051:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34126:11;34140:12;;34126:26;;34178:5;34163:12;:20;;;;34201:39;34229:3;34234:5;34201:39;;;;;;;;;;;;;;;;;;;;;;;;34258:4;34251:11;;;33874:396;;;:::o;26167:19::-;;;;;;;;;;;;;:::o;31563:100::-;31616:7;31643:12;;31636:19;;31563:100;:::o;36512:144::-;36563:41;16681:4;36571:18;;36591:12;:10;:12::i;:::-;36563:7;:41::i;:::-;36555:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36640:8;:6;:8::i;:::-;36512:144::o;34577:94::-;34624:7;34651:12;;34644:19;;34577:94;:::o;26099:32::-;;;;;;;;;;;;;:::o;17284:138::-;17357:7;17384:30;17408:5;17384:6;:12;17391:4;17384:12;;;;;;;;;;;:20;;:23;;:30;;;;:::i;:::-;17377:37;;17284:138;;;;:::o;26476:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17002:139::-;17071:4;17095:38;17125:7;17095:6;:12;17102:4;17095:12;;;;;;;;;;;:20;;:29;;:38;;;;:::i;:::-;17088:45;;17002:139;;;;:::o;16636:49::-;16681:4;16636:49;;;:::o;26314:30::-;;;;:::o;27712:91::-;27760:7;27787:8;;27780:15;;27712:91;:::o;20512:255::-;20697:6;20723:36;;;20716:43;;20512:255;;;;;;;:::o;34452:113::-;34513:7;34540:17;;34533:24;;34452:113;:::o;30305:1108::-;16034:1;16183:7;;:19;;16175:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16034:1;16251:7;:18;;;;19310:8:::1;:6;:8::i;:::-;19309:9;19301:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26766:15:::2;;26751:12;:30;:71;;;;;26821:1;26785:33;26802:15;;26785:12;:16;;:33;;;;:::i;:::-;:37;26751:71;26748:522;;;26857:1;26841:12;;:17;26838:421;;;26896:12;26878:15;:30;;;;26838:421;;;26962:18;26983:33;27000:15;;26983:12;:16;;:33;;;;:::i;:::-;26962:54;;27035:14;27052:28;27067:12;;27052:10;:14;;:28;;;;:::i;:::-;27035:45;;27137:57;27159:34;27180:12;;27159:16;27170:4;27159:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;27137:17;;:21;;:57;;;;:::i;:::-;27117:17;:77;;;;27231:12;27213:15;:30;;;;26838:421;;;26748:522;30450:1:::3;30426:26;;:12;:10;:12::i;:::-;:26;;;;30418:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;30549:6;30506:7;:21;30514:12;:10;:12::i;:::-;30506:21;;;;;;;;;;;;;;;:39;;;:49;;30498:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30621:60;30643:9;:23;30653:12;:10;:12::i;:::-;30643:23;;;;;;;;;;;;;;;30668:6;30676:4;30621:21;:60::i;:::-;30692:49;30714:12;30728:6;30736:4;30692:21;:49::i;:::-;30762:30;30795:7;:21;30803:12;:10;:12::i;:::-;30795:21;;;;;;;;;;;;;;;30762:54;;30836:15;30854:80;30916:6;:17;;;30854:57;30906:4;30854:47;30883:17;;30854:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;:61;;:80;;;;:::i;:::-;30836:98;;30968:33;30993:7;30968:6;:20;;;:24;;:33;;;;:::i;:::-;30945:6;:20;;:56;;;;31049:36;31078:6;31049;:24;;;:28;;:36;;;;:::i;:::-;31022:6;:24;;:63;;;;31116:57;31168:4;31116:47;31145:17;;31116:6;:24;;;:28;;:47;;;;:::i;:::-;:51;;:57;;;;:::i;:::-;31096:6;:17;;:77;;;;31199:24;31216:6;31199:12;;:16;;:24;;;;:::i;:::-;31184:12;:39;;;;31244:3;;;;;;;;;;;:20;;;31273:4;31280:12;:10;:12::i;:::-;31294:8;;31304:6;31312:4;31244:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;31352:12;:10;:12::i;:::-;31343:62;;;31366:6;31374;:24;;;31400:4;31343:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27280:1;;15990::::0;16304:7;:22;;;;30305:1108;;:::o;32217:144::-;32291:7;32318:35;32327:12;32341:11;32318:8;:35::i;:::-;32311:42;;32217:144;;;:::o;17149:127::-;17212:7;17239:29;:6;:12;17246:4;17239:12;;;;;;;;;;;:20;;:27;:29::i;:::-;17232:36;;17149:127;;;:::o;26426:37::-;;;;:::o;17787:230::-;17872:45;17880:6;:12;17887:4;17880:12;;;;;;;;;;;:22;;;17904:12;:10;:12::i;:::-;17872:7;:45::i;:::-;17864:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17983:26;17995:4;18001:7;17983:11;:26::i;:::-;17787:230;;:::o;26533:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32045:164::-;32136:7;32163:38;32172:9;:15;32182:4;32172:15;;;;;;;;;;;;;;;32189:11;32163:8;:38::i;:::-;32156:45;;32045:164;;;;:::o;20277:227::-;20439:6;20465:31;;;20458:38;;20277:227;;;;;;;:::o;32373:99::-;32420:7;32455:8;;;;;;;;;;;32440:24;;32373:99;:::o;34683:155::-;34739:7;34766:64;34825:4;34766:54;34802:17;;34766:7;:13;34774:4;34766:13;;;;;;;;;;;;;;;:31;;;:35;;:54;;;;:::i;:::-;:58;;:64;;;;:::i;:::-;34759:71;;34683:155;;;:::o;2396:143::-;2466:4;2490:41;2495:3;:10;;2523:5;2515:14;;2507:23;;2490:4;:41::i;:::-;2483:48;;2396:143;;;;:::o;19765:157::-;19850:4;19889:25;19874:40;;;:11;:40;;;;19867:47;;19765:157;;;:::o;15555:106::-;15608:15;15643:10;15636:17;;15555:106;:::o;28115:514::-;28186:26;28246:17;;28225:38;;28303:15;;28288:12;:30;:51;;;;;28338:1;28322:12;;:17;;28288:51;28284:292;;;28356:18;28377:33;28394:15;;28377:12;:16;;:33;;;;:::i;:::-;28356:54;;28425:14;28442:28;28457:12;;28442:10;:14;;:28;;;;:::i;:::-;28425:45;;28506:58;28529:34;28550:12;;28529:16;28540:4;28529:6;:10;;:16;;;;:::i;:::-;:20;;:34;;;;:::i;:::-;28506:18;:22;;:58;;;;:::i;:::-;28485:79;;28284:292;;;28115:514;:::o;7899:250::-;7957:7;7986:1;7981;:6;7977:47;;;8011:1;8004:8;;;;7977:47;8036:9;8052:1;8048;:5;8036:17;;8081:1;8076;8072;:5;;;;;;:10;8064:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8140:1;8133:8;;;7899:250;;;;;:::o;8157:132::-;8215:7;8242:39;8246:1;8249;8242:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8235:46;;8157:132;;;;:::o;7366:181::-;7424:7;7444:9;7460:1;7456;:5;7444:17;;7485:1;7480;:6;;7472:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7538:1;7531:8;;;7366:181;;;;:::o;7555:136::-;7613:7;7640:43;7644:1;7647;7640:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7633:50;;7555:136;;;;:::o;32480:692::-;32595:14;32612:7;:14;;;;32595:31;;32651:1;32641:6;:11;32637:125;;;32669:7;32682:46;;;;;;;;32698:12;32682:46;;;;32720:6;32682:46;;;32669:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32744:7;;;32637:125;32801:12;32778:7;32793:1;32786:6;:8;32778:17;;;;;;;;;;;;;;;;;;:20;;;:35;32774:146;;;32830:7;32843:64;;;;;;;;32859:12;32843:64;;;;32881:7;32896:1;32889:6;:8;32881:17;;;;;;;;;;;;;;;;;;:24;;;32843:64;;;32830:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32774:146;32932:29;32964:7;32972:6;32964:15;;;;;;;;;;;;;;;;;;32932:47;;32996:9;32992:173;;;33042:29;33064:6;33042:10;:17;;;:21;;:29;;;;:::i;:::-;33022:10;:17;;:49;;;;32992:173;;;33124:29;33146:6;33124:10;:17;;;:21;;:29;;;;:::i;:::-;33104:10;:17;;:49;;;;32992:173;32480:692;;;;;;:::o;18569:188::-;18643:33;18668:7;18643:6;:12;18650:4;18643:12;;;;;;;;;;;:20;;:24;;:33;;;;:::i;:::-;18639:111;;;18725:12;:10;:12::i;:::-;18698:40;;18716:7;18698:40;;18710:4;18698:40;;;;;;;;;;18639:111;18569:188;;:::o;18765:192::-;18840:36;18868:7;18840:6;:12;18847:4;18840:12;;;;;;;;;;;:20;;:27;;:36;;;;:::i;:::-;18836:114;;;18925:12;:10;:12::i;:::-;18898:40;;18916:7;18898:40;;18910:4;18898:40;;;;;;;;;;18836:114;18765:192;;:::o;19595:120::-;19408:8;:6;:8::i;:::-;19400:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19664:5:::1;19654:7;;:15;;;;;;;;;;;;;;;;;;19685:22;19694:12;:10;:12::i;:::-;19685:22;;;;;;;;;;;;;;;;;;;;19595:120::o:0;19469:118::-;19310:8;:6;:8::i;:::-;19309:9;19301:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19539:4:::1;19529:7;;:14;;;;;;;;;;;;;;;;;;19559:20;19566:12;:10;:12::i;:::-;19559:20;;;;;;;;;;;;;;;;;;;;19469:118::o:0;2999:149::-;3073:7;3116:22;3120:3;:10;;3132:5;3116:3;:22::i;:::-;3108:31;;3093:47;;2999:149;;;;:::o;2708:158::-;2788:4;2812:46;2822:3;:10;;2850:5;2842:14;;2834:23;;2812:9;:46::i;:::-;2805:53;;2708:158;;;;:::o;33180:682::-;33272:7;33292:14;33309:7;:14;;;;33292:31;;33350:1;33340:6;:11;:42;;;;33369:7;33377:1;33369:10;;;;;;;;;;;;;;;;;;:13;;;33355:11;:27;33340:42;33336:83;;;33406:1;33399:8;;;;;33336:83;33450:7;33465:1;33458:6;:8;33450:17;;;;;;;;;;;;;;;;;;:20;;;33435:11;:35;33431:99;;33494:7;33509:1;33502:6;:8;33494:17;;;;;;;;;;;;;;;;;;:24;;;33487:31;;;;;33431:99;33542:8;33565;33583:1;33576:6;:8;33565:19;;33595:221;33608:3;33602;:9;33595:221;;;33628:8;33657:1;33652;33646:3;33640;:9;:13;33639:19;;;;;;33628:30;;33696:11;33677:7;33685:3;33677:12;;;;;;;;;;;;;;;;;;:15;;;:30;33673:132;;33734:3;33728:9;;33673:132;;;33788:1;33784:3;:5;33778:11;;33673:132;33595:221;;;;33835:7;33843:3;33835:12;;;;;;;;;;;;;;;;;;:19;;;33828:26;;;;;33180:682;;;;;:::o;2874:117::-;2937:7;2964:19;2972:3;:10;;2964:7;:19::i;:::-;2957:26;;2874:117;;;:::o;217:291::-;280:4;302:21;312:3;317:5;302:9;:21::i;:::-;297:204;;340:3;:11;;357:5;340:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;400:3;:11;;:18;;;;378:3;:12;;:19;391:5;378:19;;;;;;;;;;;:40;;;;440:4;433:11;;;;297:204;484:5;477:12;;217:291;;;;;:::o;8297:278::-;8383:7;8415:1;8411;:5;8418:12;8403:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8442:9;8458:1;8454;:5;;;;;;8442:17;;8566:1;8559:8;;;8297:278;;;;;:::o;7699:192::-;7785:7;7818:1;7813;:6;;7821:12;7805:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7845:9;7861:1;7857;:5;7845:17;;7882:1;7875:8;;;7699:192;;;;;:::o;2547:149::-;2620:4;2644:44;2652:3;:10;;2680:5;2672:14;;2664:23;;2644:7;:44::i;:::-;2637:51;;2547:149;;;;:::o;1390:204::-;1457:7;1506:5;1485:3;:11;;:18;;;;:26;1477:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1568:3;:11;;1580:5;1568:18;;;;;;;;;;;;;;;;1561:25;;1390:204;;;;:::o;1132:129::-;1205:4;1252:1;1229:3;:12;;:19;1242:5;1229:19;;;;;;;;;;;;:24;;1222:31;;1132:129;;;;:::o;1273:109::-;1329:7;1356:3;:11;;:18;;;;1349:25;;1273:109;;;:::o;516:608::-;582:4;599:18;620:3;:12;;:19;633:5;620:19;;;;;;;;;;;;599:40;;670:1;656:10;:15;652:465;;688:21;725:1;712:10;:14;688:38;;741:17;782:1;761:3;:11;;:18;;;;:22;741:42;;800:17;820:3;:11;;832:9;820:22;;;;;;;;;;;;;;;;800:42;;888:9;859:3;:11;;871:13;859:26;;;;;;;;;;;;;;;:38;;;;954:1;938:13;:17;912:3;:12;;:23;925:9;912:23;;;;;;;;;;;:43;;;;972:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;1013:3;:12;;:19;1026:5;1013:19;;;;;;;;;;;1006:26;;;1056:4;1049:11;;;;;;;;652:465;1100:5;1093:12;;;516:608;;;;;:::o

Swarm Source

ipfs://f371bcd9de0fbd7aa5dab3fad7c61956a295af8428ff7946148baf9437b3ee92
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.