Contract 0xff298a3169117606bda78ed6c04917224968f9b5

Contract Overview

Balance:
0 MATIC
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x10a8404d5d8cf710dd83de93c95a53c2fb0bbe323439fbc2a2a05e26d8608696Request Beacon U...267756252022-06-16 20:26:1714 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338785201 3.120000015
0x990be6a62264ee99a581dfb1a0d9ba1a2f3f2311b7fee387c52180ab62bcb30dRequest Beacon U...267756172022-06-16 20:25:3714 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.0003387852 3.120000009
0xdf11f5319894fc7ff930dd59eaee3267652be00e1102102e5451f721020f4b72Request Beacon U...267756172022-06-16 20:25:3714 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.00033882264 3.120000009
0x28a8b6f2c054fd5b70f1ce903bc85881f7d5b8f4d55ae2764739aa3884891e01Request Beacon U...267756172022-06-16 20:25:3714 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.0003387852 3.120000009
0x82da75d4f243dfb1aec2790e85b616aba33aa6c412e94df6cb07e605863c6ea5Request Beacon U...267756172022-06-16 20:25:3714 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.0003387852 3.120000009
0x654ef5a5e7a5334465dbdbba07551238ed0dfb6ac1cd4c235cbc51c7347b03a0Request Beacon U...267756172022-06-16 20:25:3714 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.00033886008 3.120000009
0x789d5a6bd3687b784ac08b2187d70038cecceef7061e0f40872ecc652c5c3145Request Beacon U...267756172022-06-16 20:25:3714 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.0003387852 3.120000009
0x9cfd6d79ce8c3bf89a09ec0976d95989e878b83ac3e7734d84964ee44a0aa184Request Beacon U...267756172022-06-16 20:25:3714 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.00033886008 3.120000009
0x55e13e9b1055a93a25a7710ced6bf2c5aad351c67b0ed0199d79e62b6cf8d514Request Beacon U...267756172022-06-16 20:25:3714 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.00033882264 3.120000009
0xa4221bbb93c00f71698d9170cbb09aa3b8ee373148552edccb728fae45b2ad3dRequest Beacon U...267756172022-06-16 20:25:3714 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.0003387852 3.120000009
0x1e5075f796311d6c015ce4f1b3fa5253e1b915a0ea9aab6524a6c0244d2bc6aeRequest Beacon U...267755422022-06-16 20:19:2014 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338785201 3.120000014
0x2fa2728406de3cb3cad3960b4b6a592553a6f8c25187822b7cf3e33e5eb453d7Request Beacon U...267755422022-06-16 20:19:2014 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338822641 3.120000014
0x4bfbd37b4e9c4111d161da353ae53ccaf9ccfffd9fbc255c20867331299cb151Request Beacon U...267755422022-06-16 20:19:2014 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000359049601 3.120000014
0xba3b67da4df340938e07c2246bd7c2fc0b00390cf55f758aa98ba59f24c7b27aRequest Beacon U...267755412022-06-16 20:19:1514 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000359049601 3.120000014
0xd6ef5547855f3c81f23e1dcd094f8571f9fedfdb7952c7371244243c38e79636Request Beacon U...267754462022-06-16 20:11:1914 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338822642 3.120000022
0x9de9d312c59e869b9874d66f3423b7f211d2b5fd313bba4cdcc9a8ed0f366b86Request Beacon U...267754342022-06-16 20:10:1914 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338747763 3.120000032
0xc6a870e8553de8cfa1e349e3741f9e5e843bc150186bec600f2a116a0fb723a7Request Beacon U...267754232022-06-16 20:09:2314 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338785204 3.120000041
0x1509ac27c8990cd159784749e93217f9719ef2bc3c3177739f35f807d4315466Request Beacon U...267754172022-06-16 20:08:2314 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338822644 3.120000043
0x6ecbfb51513fd4119ec3c445a1969bf6f60cd98513c0e9f4d1e9d7be5e2d669aRequest Beacon U...267754172022-06-16 20:08:2314 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338785204 3.120000043
0x921e6b322f25539b0cdae2184119d327b8711a5f83e4c03cad1ec78048093fdaRequest Beacon U...267754112022-06-16 20:07:2314 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338785204 3.12000004
0xca3aeb88f5309414e6235b8086325190a3dc56225ed0fcd938a5001397eb6bc0Request Beacon U...267754112022-06-16 20:07:2314 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338785204 3.12000004
0x08a950fa480ad271ddf1073dcbe1355be1a5e59bffae27ac55e8012de0fe4e69Request Beacon U...267754112022-06-16 20:07:2314 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338785204 3.12000004
0x88f8521560a16bc57019ea575b3768d4e08a590d48086f551db68d5f65d82277Request Beacon U...267754112022-06-16 20:07:2314 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338785204 3.12000004
0xff6f78b692a75d8600db1c7f66bf3f9222f61f3eeda61265ff7f4ac966ace60aRequest Beacon U...267754112022-06-16 20:07:2314 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338860084 3.12000004
0x36b95931232d7cfebb1fde35c921e0574f132977346ab01ffe7a85bc7457dda0Request Beacon U...267754112022-06-16 20:07:2314 days 22 hrs ago0x9f58989539b8c90cdde06cb568e41e3deb73df90 IN  0xff298a3169117606bda78ed6c04917224968f9b50 MATIC0.000338747764 3.12000004
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RrpBeaconServer

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-01-18
*/

// SPDX-License-Identifier: MIT
// Sources flattened with hardhat v2.8.0 https://hardhat.org

// File verify/0.3.1/@api3/airnode-protocol/contracts/whitelist/Whitelist.sol

pragma solidity 0.8.9;

/// @title Contract that implements temporary and permanent whitelists for
/// multiple services identified with a hash
/// @notice This contract implements two kinds of whitelisting:
///   (1) Temporary, ends when the expiration timestamp is in the past
///   (2) Indefinite, ends when the indefinite whitelist count is zero
/// Multiple senders can idefinitely whitelist/unwhitelist independently. The
/// user will be considered whitelisted as long as there is at least one active
/// indefinite whitelisting.
/// @dev The interface of this contract is not implemented. It should be
/// inherited and its functions should be exposed with a sort of an
/// authorization scheme.
contract Whitelist {
    struct WhitelistStatus {
        uint64 expirationTimestamp;
        uint192 indefiniteWhitelistCount;
    }

    mapping(bytes32 => mapping(address => WhitelistStatus))
        internal serviceIdToUserToWhitelistStatus;

    mapping(bytes32 => mapping(address => mapping(address => bool)))
        internal serviceIdToUserToSetterToIndefiniteWhitelistStatus;

    /// @notice Extends the expiration of the temporary whitelist of the user
    /// for the service
    /// @param serviceId Service ID
    /// @param user User address
    /// @param expirationTimestamp Timestamp at which the temporary whitelist
    /// will expire
    function _extendWhitelistExpiration(
        bytes32 serviceId,
        address user,
        uint64 expirationTimestamp
    ) internal {
        require(
            expirationTimestamp >
                serviceIdToUserToWhitelistStatus[serviceId][user]
                    .expirationTimestamp,
            "Does not extend expiration"
        );
        serviceIdToUserToWhitelistStatus[serviceId][user]
            .expirationTimestamp = expirationTimestamp;
    }

    /// @notice Sets the expiration of the temporary whitelist of the user for
    /// the service
    /// @dev Unlike `extendWhitelistExpiration()`, this can hasten expiration
    /// @param serviceId Service ID
    /// @param user User address
    /// @param expirationTimestamp Timestamp at which the temporary whitelist
    /// will expire
    function _setWhitelistExpiration(
        bytes32 serviceId,
        address user,
        uint64 expirationTimestamp
    ) internal {
        serviceIdToUserToWhitelistStatus[serviceId][user]
            .expirationTimestamp = expirationTimestamp;
    }

    /// @notice Sets the indefinite whitelist status of the user for the
    /// service
    /// @dev As long as at least there is at least one account that has set the
    /// indefinite whitelist status of the user for the service as true, the
    /// user will be considered whitelisted.
    /// @param serviceId Service ID
    /// @param user User address
    /// @param status Indefinite whitelist status
    function _setIndefiniteWhitelistStatus(
        bytes32 serviceId,
        address user,
        bool status
    ) internal returns (uint192 indefiniteWhitelistCount) {
        indefiniteWhitelistCount = serviceIdToUserToWhitelistStatus[serviceId][
            user
        ].indefiniteWhitelistCount;
        if (
            status &&
            !serviceIdToUserToSetterToIndefiniteWhitelistStatus[serviceId][
                user
            ][msg.sender]
        ) {
            serviceIdToUserToSetterToIndefiniteWhitelistStatus[serviceId][user][
                msg.sender
            ] = true;
            indefiniteWhitelistCount++;
            serviceIdToUserToWhitelistStatus[serviceId][user]
                .indefiniteWhitelistCount = indefiniteWhitelistCount;
        } else if (
            !status &&
            serviceIdToUserToSetterToIndefiniteWhitelistStatus[serviceId][user][
                msg.sender
            ]
        ) {
            serviceIdToUserToSetterToIndefiniteWhitelistStatus[serviceId][user][
                msg.sender
            ] = false;
            indefiniteWhitelistCount--;
            serviceIdToUserToWhitelistStatus[serviceId][user]
                .indefiniteWhitelistCount = indefiniteWhitelistCount;
        }
    }

    /// @notice Revokes the indefinite whitelist status granted to the user for
    /// the service by a specific account
    /// @param serviceId Service ID
    /// @param user User address
    /// @param setter Setter of the indefinite whitelist status
    function _revokeIndefiniteWhitelistStatus(
        bytes32 serviceId,
        address user,
        address setter
    ) internal returns (bool revoked, uint192 indefiniteWhitelistCount) {
        indefiniteWhitelistCount = serviceIdToUserToWhitelistStatus[serviceId][
            user
        ].indefiniteWhitelistCount;
        if (
            serviceIdToUserToSetterToIndefiniteWhitelistStatus[serviceId][user][
                setter
            ]
        ) {
            serviceIdToUserToSetterToIndefiniteWhitelistStatus[serviceId][user][
                setter
            ] = false;
            indefiniteWhitelistCount--;
            serviceIdToUserToWhitelistStatus[serviceId][user]
                .indefiniteWhitelistCount = indefiniteWhitelistCount;
            revoked = true;
        }
    }

    /// @notice Returns if the user is whitelised to use the service
    /// @param serviceId Service ID
    /// @param user User address
    /// @return isWhitelisted If the user is whitelisted
    function userIsWhitelisted(bytes32 serviceId, address user)
        internal
        view
        returns (bool isWhitelisted)
    {
        WhitelistStatus
            storage whitelistStatus = serviceIdToUserToWhitelistStatus[
                serviceId
            ][user];
        return
            whitelistStatus.indefiniteWhitelistCount > 0 ||
            whitelistStatus.expirationTimestamp > block.timestamp;
    }
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/access-control-registry/RoleDeriver.sol

pragma solidity 0.8.9;

/// @title Contract that implements the AccessControlRegistry role derivation
/// logic
/// @notice If a contract interfaces with AccessControlRegistry and needs to
/// derive roles, it should inherit this contract instead of re-implementing
/// the logic
contract RoleDeriver {
    /// @notice Derives the root role of the manager
    /// @param manager Manager address
    /// @return rootRole Root role
    function _deriveRootRole(address manager)
        internal
        pure
        returns (bytes32 rootRole)
    {
        rootRole = keccak256(abi.encodePacked(manager));
    }

    /// @notice Derives the role using its admin role and description
    /// @dev This implies that roles adminned by the same role cannot have the
    /// same description
    /// @param adminRole Admin role
    /// @param description Human-readable description of the role
    /// @return role Role
    function _deriveRole(bytes32 adminRole, string memory description)
        internal
        pure
        returns (bytes32 role)
    {
        role = _deriveRole(adminRole, keccak256(abi.encodePacked(description)));
    }

    /// @notice Derives the role using its admin role and description hash
    /// @dev This implies that roles adminned by the same role cannot have the
    /// same description
    /// @param adminRole Admin role
    /// @param descriptionHash Hash of the human-readable description of the
    /// role
    /// @return role Role
    function _deriveRole(bytes32 adminRole, bytes32 descriptionHash)
        internal
        pure
        returns (bytes32 role)
    {
        role = keccak256(abi.encodePacked(adminRole, descriptionHash));
    }
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/access-control-registry/interfaces/IAccessControlClient.sol

pragma solidity 0.8.9;

interface IAccessControlClient {
    function accessControlRegistry() external view returns (address);
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/access-control-registry/AccessControlClient.sol

pragma solidity 0.8.9;

contract AccessControlClient is IAccessControlClient {
    /// @notice Address of the AccessControlRegistry contract that keeps the
    /// roles
    address public immutable override accessControlRegistry;

    /// @param _accessControlRegistry AccessControlRegistry contract address
    constructor(address _accessControlRegistry) {
        require(_accessControlRegistry != address(0), "ACR address zero");
        accessControlRegistry = _accessControlRegistry;
    }
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/whitelist/interfaces/IWhitelistRoles.sol

pragma solidity 0.8.9;

interface IWhitelistRoles {
    function adminRoleDescription() external view returns (string memory);

    // solhint-disable-next-line func-name-mixedcase
    function WHITELIST_EXPIRATION_EXTENDER_ROLE_DESCRIPTION()
        external
        view
        returns (string memory);

    // solhint-disable-next-line func-name-mixedcase
    function WHITELIST_EXPIRATION_SETTER_ROLE_DESCRIPTION()
        external
        view
        returns (string memory);

    // solhint-disable-next-line func-name-mixedcase
    function INDEFINITE_WHITELISTER_ROLE_DESCRIPTION()
        external
        view
        returns (string memory);
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/whitelist/WhitelistRoles.sol

pragma solidity 0.8.9;



/// @title Contract that implements generic AccessControlRegistry roles for a
/// whitelist contract
contract WhitelistRoles is RoleDeriver, AccessControlClient, IWhitelistRoles {
    // There are four roles implemented in this contract:
    // Root
    // └── (1) Admin (can grant and revoke the roles below)
    //     ├── (2) Whitelist expiration extender
    //     ├── (3) Whitelist expiration setter
    //     └── (4) Indefinite whitelister
    // Their IDs are derived from the descriptions below. Refer to
    // AccessControlRegistry for more information.
    string public override adminRoleDescription;
    string
        public constant
        override WHITELIST_EXPIRATION_EXTENDER_ROLE_DESCRIPTION =
        "Whitelist expiration extender";
    string
        public constant
        override WHITELIST_EXPIRATION_SETTER_ROLE_DESCRIPTION =
        "Whitelist expiration setter";
    string public constant override INDEFINITE_WHITELISTER_ROLE_DESCRIPTION =
        "Indefinite whitelister";
    bytes32 internal adminRoleDescriptionHash;
    bytes32
        internal constant WHITELIST_EXPIRATION_EXTENDER_ROLE_DESCRIPTION_HASH =
        keccak256(
            abi.encodePacked(WHITELIST_EXPIRATION_EXTENDER_ROLE_DESCRIPTION)
        );
    bytes32
        internal constant WHITELIST_EXPIRATION_SETTER_ROLE_DESCRIPTION_HASH =
        keccak256(
            abi.encodePacked(WHITELIST_EXPIRATION_SETTER_ROLE_DESCRIPTION)
        );
    bytes32 internal constant INDEFINITE_WHITELISTER_ROLE_DESCRIPTION_HASH =
        keccak256(abi.encodePacked(INDEFINITE_WHITELISTER_ROLE_DESCRIPTION));

    /// @dev Contracts deployed with the same admin role descriptions will have
    /// the same roles, meaning that granting an account a role will authorize
    /// it in multiple contracts. Unless you want your deployed contract to
    /// reuse the role configuration of another contract, use a unique admin
    /// role description.
    /// @param _accessControlRegistry AccessControlRegistry contract address
    /// @param _adminRoleDescription Admin role description
    constructor(
        address _accessControlRegistry,
        string memory _adminRoleDescription
    ) AccessControlClient(_accessControlRegistry) {
        require(
            bytes(_adminRoleDescription).length > 0,
            "Admin role description empty"
        );
        adminRoleDescription = _adminRoleDescription;
        adminRoleDescriptionHash = keccak256(
            abi.encodePacked(_adminRoleDescription)
        );
    }

    /// @notice Derives the admin role for the specific manager address
    /// @param manager Manager address
    /// @return adminRole Admin role
    function _deriveAdminRole(address manager)
        internal
        view
        returns (bytes32 adminRole)
    {
        adminRole = _deriveRole(
            _deriveRootRole(manager),
            adminRoleDescriptionHash
        );
    }

    /// @notice Derives the whitelist expiration extender role for the specific
    /// manager address
    /// @param manager Manager address
    /// @return whitelistExpirationExtenderRole Whitelist expiration extender
    /// role
    function _deriveWhitelistExpirationExtenderRole(address manager)
        internal
        view
        returns (bytes32 whitelistExpirationExtenderRole)
    {
        whitelistExpirationExtenderRole = _deriveRole(
            _deriveAdminRole(manager),
            WHITELIST_EXPIRATION_EXTENDER_ROLE_DESCRIPTION_HASH
        );
    }

    /// @notice Derives the whitelist expiration setter role for the specific
    /// manager address
    /// @param manager Manager address
    /// @return whitelistExpirationSetterRole Whitelist expiration setter role
    function _deriveWhitelistExpirationSetterRole(address manager)
        internal
        view
        returns (bytes32 whitelistExpirationSetterRole)
    {
        whitelistExpirationSetterRole = _deriveRole(
            _deriveAdminRole(manager),
            WHITELIST_EXPIRATION_SETTER_ROLE_DESCRIPTION_HASH
        );
    }

    /// @notice Derives the indefinite whitelister role for the specific
    /// manager address
    /// @param manager Manager address
    /// @return indefiniteWhitelisterRole Indefinite whitelister role
    function _deriveIndefiniteWhitelisterRole(address manager)
        internal
        view
        returns (bytes32 indefiniteWhitelisterRole)
    {
        indefiniteWhitelisterRole = _deriveRole(
            _deriveAdminRole(manager),
            INDEFINITE_WHITELISTER_ROLE_DESCRIPTION_HASH
        );
    }
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/whitelist/interfaces/IWhitelistRolesWithManager.sol

pragma solidity 0.8.9;

interface IWhitelistRolesWithManager is IWhitelistRoles {
    function manager() external view returns (address);

    function adminRole() external view returns (bytes32);

    function whitelistExpirationExtenderRole() external view returns (bytes32);

    function whitelistExpirationSetterRole() external view returns (bytes32);

    function indefiniteWhitelisterRole() external view returns (bytes32);
}


// File @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)

pragma solidity ^0.8.0;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/access-control-registry/interfaces/IAccessControlRegistry.sol

pragma solidity 0.8.9;

interface IAccessControlRegistry is IAccessControl {
    event InitializedManager(bytes32 indexed rootRole, address indexed manager);

    event InitializedRole(
        bytes32 indexed role,
        bytes32 indexed adminRole,
        string description,
        address sender
    );

    function initializeManager(address manager) external;

    function initializeRole(bytes32 adminRole, string calldata description)
        external
        returns (bytes32 role);

    function initializeAndGrantRoles(
        bytes32[] calldata adminRoles,
        string[] calldata descriptions,
        address[] calldata accounts
    ) external returns (bytes32[] memory roles);

    function deriveRootRole(address manager)
        external
        pure
        returns (bytes32 rootRole);

    function deriveRole(bytes32 adminRole, string calldata description)
        external
        pure
        returns (bytes32 role);
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/whitelist/WhitelistRolesWithManager.sol

pragma solidity 0.8.9;



/// @title Contract that implements AccessControlRegistry roles for a whitelist
/// contract controlled by a single manager account
contract WhitelistRolesWithManager is
    WhitelistRoles,
    IWhitelistRolesWithManager
{
    /// @notice Address of the manager that manages the related
    /// AccessControlRegistry roles
    address public immutable override manager;

    // Since there will be a single manager, we can derive the roles beforehand
    bytes32 public immutable override adminRole;
    bytes32 public immutable override whitelistExpirationExtenderRole;
    bytes32 public immutable override whitelistExpirationSetterRole;
    bytes32 public immutable override indefiniteWhitelisterRole;

    /// @param _accessControlRegistry AccessControlRegistry contract address
    /// @param _adminRoleDescription Admin role description
    /// @param _manager Manager address
    constructor(
        address _accessControlRegistry,
        string memory _adminRoleDescription,
        address _manager
    ) WhitelistRoles(_accessControlRegistry, _adminRoleDescription) {
        require(_manager != address(0), "Manager address zero");
        manager = _manager;
        adminRole = _deriveAdminRole(_manager);
        whitelistExpirationExtenderRole = _deriveWhitelistExpirationExtenderRole(
            _manager
        );
        whitelistExpirationSetterRole = _deriveWhitelistExpirationSetterRole(
            _manager
        );
        indefiniteWhitelisterRole = _deriveIndefiniteWhitelisterRole(_manager);
    }

    /// @dev Returns if the account has the whitelist expiration extender role
    /// or is the manager
    /// @param account Account address
    /// @return If the account has the whitelist extender role or is the
    /// manager
    function hasWhitelistExpirationExtenderRoleOrIsManager(address account)
        internal
        view
        returns (bool)
    {
        return
            manager == account ||
            IAccessControlRegistry(accessControlRegistry).hasRole(
                whitelistExpirationExtenderRole,
                account
            );
    }

    /// @dev Returns if the account has the whitelist expriation setter role or
    /// is the manager
    /// @param account Account address
    /// @return If the account has the whitelist setter role or is the
    /// manager
    function hasWhitelistExpirationSetterRoleOrIsManager(address account)
        internal
        view
        returns (bool)
    {
        return
            manager == account ||
            IAccessControlRegistry(accessControlRegistry).hasRole(
                whitelistExpirationSetterRole,
                account
            );
    }

    /// @dev Returns if the account has the indefinite whitelister role or is the
    /// manager
    /// @param account Account address
    /// @return If the account has the indefinite whitelister role or is the
    /// manager
    function hasIndefiniteWhitelisterRoleOrIsManager(address account)
        internal
        view
        returns (bool)
    {
        return
            manager == account ||
            IAccessControlRegistry(accessControlRegistry).hasRole(
                indefiniteWhitelisterRole,
                account
            );
    }
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/rrp/interfaces/IAuthorizationUtils.sol

pragma solidity 0.8.9;

interface IAuthorizationUtils {
    function checkAuthorizationStatus(
        address[] calldata authorizers,
        address airnode,
        bytes32 requestId,
        bytes32 endpointId,
        address sponsor,
        address requester
    ) external view returns (bool status);

    function checkAuthorizationStatuses(
        address[] calldata authorizers,
        address airnode,
        bytes32[] calldata requestIds,
        bytes32[] calldata endpointIds,
        address[] calldata sponsors,
        address[] calldata requesters
    ) external view returns (bool[] memory statuses);
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/rrp/interfaces/ITemplateUtils.sol

pragma solidity 0.8.9;

interface ITemplateUtils {
    event CreatedTemplate(
        bytes32 indexed templateId,
        address airnode,
        bytes32 endpointId,
        bytes parameters
    );

    function createTemplate(
        address airnode,
        bytes32 endpointId,
        bytes calldata parameters
    ) external returns (bytes32 templateId);

    function getTemplates(bytes32[] calldata templateIds)
        external
        view
        returns (
            address[] memory airnodes,
            bytes32[] memory endpointIds,
            bytes[] memory parameters
        );

    function templates(bytes32 templateId)
        external
        view
        returns (
            address airnode,
            bytes32 endpointId,
            bytes memory parameters
        );
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/rrp/interfaces/IWithdrawalUtils.sol

pragma solidity 0.8.9;

interface IWithdrawalUtils {
    event RequestedWithdrawal(
        address indexed airnode,
        address indexed sponsor,
        bytes32 indexed withdrawalRequestId,
        address sponsorWallet
    );

    event FulfilledWithdrawal(
        address indexed airnode,
        address indexed sponsor,
        bytes32 indexed withdrawalRequestId,
        address sponsorWallet,
        uint256 amount
    );

    function requestWithdrawal(address airnode, address sponsorWallet) external;

    function fulfillWithdrawal(
        bytes32 withdrawalRequestId,
        address airnode,
        address sponsor
    ) external payable;

    function sponsorToWithdrawalRequestCount(address sponsor)
        external
        view
        returns (uint256 withdrawalRequestCount);
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/rrp/interfaces/IAirnodeRrp.sol

pragma solidity 0.8.9;



interface IAirnodeRrp is IAuthorizationUtils, ITemplateUtils, IWithdrawalUtils {
    event SetSponsorshipStatus(
        address indexed sponsor,
        address indexed requester,
        bool sponsorshipStatus
    );

    event MadeTemplateRequest(
        address indexed airnode,
        bytes32 indexed requestId,
        uint256 requesterRequestCount,
        uint256 chainId,
        address requester,
        bytes32 templateId,
        address sponsor,
        address sponsorWallet,
        address fulfillAddress,
        bytes4 fulfillFunctionId,
        bytes parameters
    );

    event MadeFullRequest(
        address indexed airnode,
        bytes32 indexed requestId,
        uint256 requesterRequestCount,
        uint256 chainId,
        address requester,
        bytes32 endpointId,
        address sponsor,
        address sponsorWallet,
        address fulfillAddress,
        bytes4 fulfillFunctionId,
        bytes parameters
    );

    event FulfilledRequest(
        address indexed airnode,
        bytes32 indexed requestId,
        bytes data
    );

    event FailedRequest(
        address indexed airnode,
        bytes32 indexed requestId,
        string errorMessage
    );

    function setSponsorshipStatus(address requester, bool sponsorshipStatus)
        external;

    function makeTemplateRequest(
        bytes32 templateId,
        address sponsor,
        address sponsorWallet,
        address fulfillAddress,
        bytes4 fulfillFunctionId,
        bytes calldata parameters
    ) external returns (bytes32 requestId);

    function makeFullRequest(
        address airnode,
        bytes32 endpointId,
        address sponsor,
        address sponsorWallet,
        address fulfillAddress,
        bytes4 fulfillFunctionId,
        bytes calldata parameters
    ) external returns (bytes32 requestId);

    function fulfill(
        bytes32 requestId,
        address airnode,
        address fulfillAddress,
        bytes4 fulfillFunctionId,
        bytes calldata data,
        bytes calldata signature
    ) external returns (bool callSuccess, bytes memory callData);

    function fail(
        bytes32 requestId,
        address airnode,
        address fulfillAddress,
        bytes4 fulfillFunctionId,
        string calldata errorMessage
    ) external;

    function sponsorToRequesterToSponsorshipStatus(
        address sponsor,
        address requester
    ) external view returns (bool sponsorshipStatus);

    function requesterToRequestCountPlusOne(address requester)
        external
        view
        returns (uint256 requestCountPlusOne);

    function requestIsAwaitingFulfillment(bytes32 requestId)
        external
        view
        returns (bool isAwaitingFulfillment);
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/rrp/requesters/RrpRequester.sol

pragma solidity 0.8.9;

/// @title The contract to be inherited to make Airnode RRP requests
contract RrpRequester {
    IAirnodeRrp public immutable airnodeRrp;

    /// @dev Reverts if the caller is not the Airnode RRP contract.
    /// Use it as a modifier for fulfill and error callback methods, but also
    /// check `requestId`.
    modifier onlyAirnodeRrp() {
        require(msg.sender == address(airnodeRrp), "Caller not Airnode RRP");
        _;
    }

    /// @dev Airnode RRP address is set at deployment and is immutable.
    /// RrpRequester is made its own sponsor by default. RrpRequester can also
    /// be sponsored by others and use these sponsorships while making
    /// requests, i.e., using this default sponsorship is optional.
    /// @param _airnodeRrp Airnode RRP contract address
    constructor(address _airnodeRrp) {
        airnodeRrp = IAirnodeRrp(_airnodeRrp);
        IAirnodeRrp(_airnodeRrp).setSponsorshipStatus(address(this), true);
    }
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/rrp/requesters/interfaces/IRrpBeaconServer.sol

pragma solidity 0.8.9;

interface IRrpBeaconServer {
    event ExtendedWhitelistExpiration(
        bytes32 indexed beaconId,
        address indexed reader,
        address indexed sender,
        uint256 expiration
    );

    event SetWhitelistExpiration(
        bytes32 indexed beaconId,
        address indexed reader,
        address indexed sender,
        uint256 expiration
    );

    event SetIndefiniteWhitelistStatus(
        bytes32 indexed beaconId,
        address indexed reader,
        address indexed sender,
        bool status,
        uint192 indefiniteWhitelistCount
    );

    event RevokedIndefiniteWhitelistStatus(
        bytes32 indexed beaconId,
        address indexed reader,
        address indexed setter,
        address sender,
        uint192 indefiniteWhitelistCount
    );

    event SetUpdatePermissionStatus(
        address indexed sponsor,
        address indexed updateRequester,
        bool status
    );

    event RequestedBeaconUpdate(
        bytes32 indexed beaconId,
        address indexed sponsor,
        address indexed requester,
        bytes32 requestId,
        bytes32 templateId,
        address sponsorWallet,
        bytes parameters
    );

    event UpdatedBeacon(
        bytes32 indexed beaconId,
        bytes32 requestId,
        int224 value,
        uint32 timestamp
    );

    function extendWhitelistExpiration(
        bytes32 beaconId,
        address reader,
        uint64 expirationTimestamp
    ) external;

    function setWhitelistExpiration(
        bytes32 beaconId,
        address reader,
        uint64 expirationTimestamp
    ) external;

    function setIndefiniteWhitelistStatus(
        bytes32 beaconId,
        address reader,
        bool status
    ) external;

    function revokeIndefiniteWhitelistStatus(
        bytes32 beaconId,
        address reader,
        address setter
    ) external;

    function setUpdatePermissionStatus(address updateRequester, bool status)
        external;

    function requestBeaconUpdate(
        bytes32 beaconId,
        address requester,
        address designatedWallet,
        bytes calldata parameters
    ) external;

    function fulfill(bytes32 requestId, bytes calldata data) external;

    function readBeacon(bytes32 beaconId)
        external
        view
        returns (int224 value, uint32 timestamp);

    function readerCanReadBeacon(bytes32 beaconId, address reader)
        external
        view
        returns (bool);

    function beaconIdToReaderToWhitelistStatus(bytes32 beaconId, address reader)
        external
        view
        returns (uint64 expirationTimestamp, uint192 indefiniteWhitelistCount);

    function beaconIdToReaderToSetterToIndefiniteWhitelistStatus(
        bytes32 beaconId,
        address reader,
        address setter
    ) external view returns (bool indefiniteWhitelistStatus);

    function sponsorToUpdateRequesterToPermissionStatus(
        address sponsor,
        address updateRequester
    ) external view returns (bool permissionStatus);

    function deriveBeaconId(bytes32 templateId, bytes calldata parameters)
        external
        pure
        returns (bytes32 beaconId);
}


// File verify/0.3.1/@api3/airnode-protocol/contracts/rrp/requesters/RrpBeaconServer.sol

pragma solidity 0.8.9;




/// @title The contract that serves beacons using Airnode RRP
/// @notice A beacon is a live data point associated with a beacon ID, which is
/// derived from a template ID and additional parameters. This is suitable
/// where the more recent data point is always more favorable, e.g., in the
/// context of an asset price data feed. Another definition of beacons are
/// one-Airnode data feeds that can be used individually or combined to build
/// decentralized data feeds.
/// @dev This contract casts the reported data point to `int224`. If this is
/// a problem (because the reported data may not fit into 224 bits or it is of
/// a completely different type such as `bytes32`), do not use this contract
/// and implement a customized version instead.
/// The contract casts the timestamps to `uint32`, which means it will not work
/// work past-2106 in the current form. If this is an issue, consider casting
/// the timestamps to a larger type.
contract RrpBeaconServer is
    Whitelist,
    WhitelistRolesWithManager,
    RrpRequester,
    IRrpBeaconServer
{
    struct Beacon {
        int224 value;
        uint32 timestamp;
    }

    /// @notice Returns if a sponsor has permitted an account to request
    /// updates at this contract
    mapping(address => mapping(address => bool))
        public
        override sponsorToUpdateRequesterToPermissionStatus;

    mapping(bytes32 => Beacon) private beacons;
    mapping(bytes32 => bytes32) private requestIdToBeaconId;

    /// @param _accessControlRegistry AccessControlRegistry contract address
    /// @param _adminRoleDescription Admin role description
    /// @param _manager Manager address
    /// @param _airnodeRrp Airnode RRP contract address
    constructor(
        address _accessControlRegistry,
        string memory _adminRoleDescription,
        address _manager,
        address _airnodeRrp
    )
        WhitelistRolesWithManager(
            _accessControlRegistry,
            _adminRoleDescription,
            _manager
        )
        RrpRequester(_airnodeRrp)
    {}

    /// @notice Extends the expiration of the temporary whitelist of `reader`
    /// to be able to read the beacon with `beaconId` if the sender has the
    /// whitelist expiration extender role
    /// @param beaconId Beacon ID
    /// @param reader Reader address
    /// @param expirationTimestamp Timestamp at which the temporary whitelist
    /// will expire
    function extendWhitelistExpiration(
        bytes32 beaconId,
        address reader,
        uint64 expirationTimestamp
    ) external override {
        require(
            hasWhitelistExpirationExtenderRoleOrIsManager(msg.sender),
            "Not expiration extender"
        );
        _extendWhitelistExpiration(beaconId, reader, expirationTimestamp);
        emit ExtendedWhitelistExpiration(
            beaconId,
            reader,
            msg.sender,
            expirationTimestamp
        );
    }

    /// @notice Sets the expiration of the temporary whitelist of `reader` to
    /// be able to read the beacon with `beaconId` if the sender has the
    /// whitelist expiration setter role
    /// @param beaconId Beacon ID
    /// @param reader Reader address
    /// @param expirationTimestamp Timestamp at which the temporary whitelist
    /// will expire
    function setWhitelistExpiration(
        bytes32 beaconId,
        address reader,
        uint64 expirationTimestamp
    ) external override {
        require(
            hasWhitelistExpirationSetterRoleOrIsManager(msg.sender),
            "Not expiration setter"
        );
        _setWhitelistExpiration(beaconId, reader, expirationTimestamp);
        emit SetWhitelistExpiration(
            beaconId,
            reader,
            msg.sender,
            expirationTimestamp
        );
    }

    /// @notice Sets the indefinite whitelist status of `reader` to be able to
    /// read the beacon with `beaconId` if the sender has the indefinite
    /// whitelister role
    /// @param beaconId Beacon ID
    /// @param reader Reader address
    /// @param status Indefinite whitelist status
    function setIndefiniteWhitelistStatus(
        bytes32 beaconId,
        address reader,
        bool status
    ) external override {
        require(
            hasIndefiniteWhitelisterRoleOrIsManager(msg.sender),
            "Not indefinite whitelister"
        );
        uint192 indefiniteWhitelistCount = _setIndefiniteWhitelistStatus(
            beaconId,
            reader,
            status
        );
        emit SetIndefiniteWhitelistStatus(
            beaconId,
            reader,
            msg.sender,
            status,
            indefiniteWhitelistCount
        );
    }

    /// @notice Revokes the indefinite whitelist status granted by a specific
    /// account that no longer has the indefinite whitelister role
    /// @param beaconId Beacon ID
    /// @param reader Reader address
    /// @param setter Setter of the indefinite whitelist status
    function revokeIndefiniteWhitelistStatus(
        bytes32 beaconId,
        address reader,
        address setter
    ) external override {
        require(
            !hasIndefiniteWhitelisterRoleOrIsManager(setter),
            "setter is indefinite whitelister"
        );
        (
            bool revoked,
            uint192 indefiniteWhitelistCount
        ) = _revokeIndefiniteWhitelistStatus(beaconId, reader, setter);
        if (revoked) {
            emit RevokedIndefiniteWhitelistStatus(
                beaconId,
                reader,
                setter,
                msg.sender,
                indefiniteWhitelistCount
            );
        }
    }

    /// @notice Called by the sponsor to set the update request permission
    /// status of an account
    /// @param updateRequester Update requester address
    /// @param status Update permission status of the update requester
    function setUpdatePermissionStatus(address updateRequester, bool status)
        external
        override
    {
        require(updateRequester != address(0), "Update requester zero");
        sponsorToUpdateRequesterToPermissionStatus[msg.sender][
            updateRequester
        ] = status;
        emit SetUpdatePermissionStatus(msg.sender, updateRequester, status);
    }

    /// @notice Called to request a beacon to be updated
    /// @dev There are two requirements for this method to be called: (1) The
    /// sponsor must call `setSponsorshipStatus()` of AirnodeRrp to sponsor
    /// this RrpBeaconServer contract, (2) The sponsor must call
    /// `setUpdatePermissionStatus()` of this RrpBeaconServer contract to give
    /// request update permission to the caller of this method.
    /// The template and additional parameters used here must specify a single
    /// point of data of type `int256` and an additional timestamp of type
    /// `uint256` to be returned because this is what `fulfill()` expects.
    /// This point of data must be castable to `int224` and the timestamp must
    /// be castable to `uint32`.
    /// @param templateId Template ID of the beacon to be updated
    /// @param sponsor Sponsor whose wallet will be used to fulfill this
    /// request
    /// @param sponsorWallet Sponsor wallet that will be used to fulfill this
    /// request
    /// @param parameters Parameters provided by the requester in addition to
    /// the parameters in the template
    function requestBeaconUpdate(
        bytes32 templateId,
        address sponsor,
        address sponsorWallet,
        bytes calldata parameters
    ) external override {
        require(
            sponsorToUpdateRequesterToPermissionStatus[sponsor][msg.sender],
            "Caller not permitted"
        );
        bytes32 beaconId = deriveBeaconId(templateId, parameters);
        bytes32 requestId = airnodeRrp.makeTemplateRequest(
            templateId,
            sponsor,
            sponsorWallet,
            address(this),
            this.fulfill.selector,
            parameters
        );
        requestIdToBeaconId[requestId] = beaconId;
        emit RequestedBeaconUpdate(
            beaconId,
            sponsor,
            msg.sender,
            requestId,
            templateId,
            sponsorWallet,
            parameters
        );
    }

    /// @notice Called by AirnodeRrp to fulfill the request
    /// @dev It is assumed that the fulfillment will be made with a single
    /// point of data of type `int256` and an additional timestamp of type
    /// `uint256`
    /// @param requestId ID of the request being fulfilled
    /// @param data Fulfillment data (a single `int256` and an additional
    /// timestamp of type `uint256` encoded as `bytes`)
    function fulfill(bytes32 requestId, bytes calldata data)
        external
        override
        onlyAirnodeRrp
    {
        bytes32 beaconId = requestIdToBeaconId[requestId];
        require(beaconId != bytes32(0), "No such request made");
        delete requestIdToBeaconId[requestId];
        (int256 decodedData, uint256 decodedTimestamp) = abi.decode(
            data,
            (int256, uint256)
        );
        require(
            decodedData >= type(int224).min && decodedData <= type(int224).max,
            "Value typecasting error"
        );
        require(
            decodedTimestamp <= type(uint32).max,
            "Timestamp typecasting error"
        );
        require(
            decodedTimestamp > beacons[beaconId].timestamp,
            "Fulfillment older than beacon"
        );
        require(
            decodedTimestamp + 1 hours > block.timestamp,
            "Fulfillment stale"
        );
        require(
            decodedTimestamp - 1 hours < block.timestamp,
            "Fulfillment from future"
        );
        beacons[beaconId] = Beacon({
            value: int224(decodedData),
            timestamp: uint32(decodedTimestamp)
        });
        emit UpdatedBeacon(
            beaconId,
            requestId,
            int224(decodedData),
            uint32(decodedTimestamp)
        );
    }

    /// @notice Called to read the beacon
    /// @dev The caller must be whitelisted.
    /// If the `timestamp` of a beacon is zero, this means that it was never
    /// written to before, and the zero value in the `value` field is not
    /// valid. In general, make sure to check if the timestamp of the beacon is
    /// fresh enough, and definitely disregard beacons with zero `timestamp`.
    /// @param beaconId ID of the beacon that will be returned
    /// @return value Beacon value
    /// @return timestamp Beacon timestamp
    function readBeacon(bytes32 beaconId)
        external
        view
        override
        returns (int224 value, uint32 timestamp)
    {
        require(
            readerCanReadBeacon(beaconId, msg.sender),
            "Caller not whitelisted"
        );
        Beacon storage beacon = beacons[beaconId];
        return (beacon.value, beacon.timestamp);
    }

    /// @notice Called to check if a reader is whitelisted to read the beacon
    /// @param beaconId Beacon ID
    /// @param reader Reader address
    /// @return isWhitelisted If the reader is whitelisted
    function readerCanReadBeacon(bytes32 beaconId, address reader)
        public
        view
        override
        returns (bool)
    {
        return userIsWhitelisted(beaconId, reader) || reader == address(0);
    }

    /// @notice Called to get the detailed whitelist status of the reader for
    /// the beacon
    /// @param beaconId Beacon ID
    /// @param reader Reader address
    /// @return expirationTimestamp Timestamp at which the whitelisting of the
    /// reader will expire
    /// @return indefiniteWhitelistCount Number of times `reader` was
    /// whitelisted indefinitely for `templateId`
    function beaconIdToReaderToWhitelistStatus(bytes32 beaconId, address reader)
        external
        view
        override
        returns (uint64 expirationTimestamp, uint192 indefiniteWhitelistCount)
    {
        WhitelistStatus
            storage whitelistStatus = serviceIdToUserToWhitelistStatus[
                beaconId
            ][reader];
        expirationTimestamp = whitelistStatus.expirationTimestamp;
        indefiniteWhitelistCount = whitelistStatus.indefiniteWhitelistCount;
    }

    /// @notice Returns if an account has indefinitely whitelisted the reader
    /// for the beacon
    /// @param beaconId Beacon ID
    /// @param reader Reader address
    /// @param setter Address of the account that has potentially whitelisted
    /// the reader for the beacon indefinitely
    /// @return indefiniteWhitelistStatus If `setter` has indefinitely
    /// whitelisted reader for the beacon
    function beaconIdToReaderToSetterToIndefiniteWhitelistStatus(
        bytes32 beaconId,
        address reader,
        address setter
    ) external view override returns (bool indefiniteWhitelistStatus) {
        indefiniteWhitelistStatus = serviceIdToUserToSetterToIndefiniteWhitelistStatus[
            beaconId
        ][reader][setter];
    }

    /// @notice Derives the beacon ID from the respective template ID and
    /// additional parameters
    /// @param templateId Template ID
    /// @param parameters Parameters provided by the requester in addition to
    /// the parameters in the template
    /// @return beaconId Beacon ID
    function deriveBeaconId(bytes32 templateId, bytes calldata parameters)
        public
        pure
        override
        returns (bytes32 beaconId)
    {
        beaconId = keccak256(abi.encodePacked(templateId, parameters));
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_accessControlRegistry","type":"address"},{"internalType":"string","name":"_adminRoleDescription","type":"string"},{"internalType":"address","name":"_manager","type":"address"},{"internalType":"address","name":"_airnodeRrp","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"reader","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"ExtendedWhitelistExpiration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"sponsor","type":"address"},{"indexed":true,"internalType":"address","name":"requester","type":"address"},{"indexed":false,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"templateId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"sponsorWallet","type":"address"},{"indexed":false,"internalType":"bytes","name":"parameters","type":"bytes"}],"name":"RequestedBeaconUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"reader","type":"address"},{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint192","name":"indefiniteWhitelistCount","type":"uint192"}],"name":"RevokedIndefiniteWhitelistStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"reader","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"uint192","name":"indefiniteWhitelistCount","type":"uint192"}],"name":"SetIndefiniteWhitelistStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sponsor","type":"address"},{"indexed":true,"internalType":"address","name":"updateRequester","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetUpdatePermissionStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"reader","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"SetWhitelistExpiration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":false,"internalType":"int224","name":"value","type":"int224"},{"indexed":false,"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"UpdatedBeacon","type":"event"},{"inputs":[],"name":"INDEFINITE_WHITELISTER_ROLE_DESCRIPTION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_EXPIRATION_EXTENDER_ROLE_DESCRIPTION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_EXPIRATION_SETTER_ROLE_DESCRIPTION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accessControlRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminRole","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminRoleDescription","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airnodeRrp","outputs":[{"internalType":"contract IAirnodeRrp","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"internalType":"address","name":"reader","type":"address"},{"internalType":"address","name":"setter","type":"address"}],"name":"beaconIdToReaderToSetterToIndefiniteWhitelistStatus","outputs":[{"internalType":"bool","name":"indefiniteWhitelistStatus","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"internalType":"address","name":"reader","type":"address"}],"name":"beaconIdToReaderToWhitelistStatus","outputs":[{"internalType":"uint64","name":"expirationTimestamp","type":"uint64"},{"internalType":"uint192","name":"indefiniteWhitelistCount","type":"uint192"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"templateId","type":"bytes32"},{"internalType":"bytes","name":"parameters","type":"bytes"}],"name":"deriveBeaconId","outputs":[{"internalType":"bytes32","name":"beaconId","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"internalType":"address","name":"reader","type":"address"},{"internalType":"uint64","name":"expirationTimestamp","type":"uint64"}],"name":"extendWhitelistExpiration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"fulfill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"indefiniteWhitelisterRole","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"beaconId","type":"bytes32"}],"name":"readBeacon","outputs":[{"internalType":"int224","name":"value","type":"int224"},{"internalType":"uint32","name":"timestamp","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"internalType":"address","name":"reader","type":"address"}],"name":"readerCanReadBeacon","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"templateId","type":"bytes32"},{"internalType":"address","name":"sponsor","type":"address"},{"internalType":"address","name":"sponsorWallet","type":"address"},{"internalType":"bytes","name":"parameters","type":"bytes"}],"name":"requestBeaconUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"internalType":"address","name":"reader","type":"address"},{"internalType":"address","name":"setter","type":"address"}],"name":"revokeIndefiniteWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"internalType":"address","name":"reader","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setIndefiniteWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updateRequester","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setUpdatePermissionStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"beaconId","type":"bytes32"},{"internalType":"address","name":"reader","type":"address"},{"internalType":"uint64","name":"expirationTimestamp","type":"uint64"}],"name":"setWhitelistExpiration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"sponsorToUpdateRequesterToPermissionStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistExpirationExtenderRole","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistExpirationSetterRole","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]

6101606040523480156200001257600080fd5b506040516200404938038062004049833981810160405281019062000038919062000814565b80848484828281600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a99062000906565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505060008151116200012e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001259062000978565b60405180910390fd5b80600290805190602001906200014692919062000562565b50806040516020016200015a9190620009e7565b604051602081830303815290604052805190602001206003819055505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620001eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e29062000a50565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505062000230816200033660201b60201c565b60c0818152505062000248816200036360201b60201c565b60e081815250506200026081620003eb60201b60201c565b610100818152505062000279816200047360201b60201c565b61012081815250505050508073ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663addf027c3060016040518363ffffffff1660e01b8152600401620002f792919062000aa0565b600060405180830381600087803b1580156200031257600080fd5b505af115801562000327573d6000803e3d6000fd5b50505050505050505062000bfe565b60006200035c6200034d83620004fb60201b60201c565b6003546200052d60201b60201c565b9050919050565b6000620003e46200037a836200033660201b60201c565b6040518060400160405280601d81526020017f57686974656c6973742065787069726174696f6e20657874656e646572000000815250604051602001620003c29190620009e7565b604051602081830303815290604052805190602001206200052d60201b60201c565b9050919050565b60006200046c62000402836200033660201b60201c565b6040518060400160405280601b81526020017f57686974656c6973742065787069726174696f6e2073657474657200000000008152506040516020016200044a9190620009e7565b604051602081830303815290604052805190602001206200052d60201b60201c565b9050919050565b6000620004f46200048a836200033660201b60201c565b6040518060400160405280601681526020017f496e646566696e6974652077686974656c697374657200000000000000000000815250604051602001620004d29190620009e7565b604051602081830303815290604052805190602001206200052d60201b60201c565b9050919050565b60008160405160200162000510919062000b1d565b604051602081830303815290604052805190602001209050919050565b600082826040516020016200054492919062000b69565b60405160208183030381529060405280519060200120905092915050565b828054620005709062000bc8565b90600052602060002090601f016020900481019282620005945760008555620005e0565b82601f10620005af57805160ff1916838001178555620005e0565b82800160010185558215620005e0579182015b82811115620005df578251825591602001919060010190620005c2565b5b509050620005ef9190620005f3565b5090565b5b808211156200060e576000816000905550600101620005f4565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006538262000626565b9050919050565b620006658162000646565b81146200067157600080fd5b50565b60008151905062000685816200065a565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006e08262000695565b810181811067ffffffffffffffff82111715620007025762000701620006a6565b5b80604052505050565b60006200071762000612565b9050620007258282620006d5565b919050565b600067ffffffffffffffff821115620007485762000747620006a6565b5b620007538262000695565b9050602081019050919050565b60005b838110156200078057808201518184015260208101905062000763565b8381111562000790576000848401525b50505050565b6000620007ad620007a7846200072a565b6200070b565b905082815260208101848484011115620007cc57620007cb62000690565b5b620007d984828562000760565b509392505050565b600082601f830112620007f957620007f86200068b565b5b81516200080b84826020860162000796565b91505092915050565b600080600080608085870312156200083157620008306200061c565b5b6000620008418782880162000674565b945050602085015167ffffffffffffffff81111562000865576200086462000621565b5b6200087387828801620007e1565b9350506040620008868782880162000674565b9250506060620008998782880162000674565b91505092959194509250565b600082825260208201905092915050565b7f4143522061646472657373207a65726f00000000000000000000000000000000600082015250565b6000620008ee601083620008a5565b9150620008fb82620008b6565b602082019050919050565b600060208201905081810360008301526200092181620008df565b9050919050565b7f41646d696e20726f6c65206465736372697074696f6e20656d70747900000000600082015250565b600062000960601c83620008a5565b91506200096d8262000928565b602082019050919050565b60006020820190508181036000830152620009938162000951565b9050919050565b600081519050919050565b600081905092915050565b6000620009bd826200099a565b620009c98185620009a5565b9350620009db81856020860162000760565b80840191505092915050565b6000620009f58284620009b0565b915081905092915050565b7f4d616e616765722061646472657373207a65726f000000000000000000000000600082015250565b600062000a38601483620008a5565b915062000a458262000a00565b602082019050919050565b6000602082019050818103600083015262000a6b8162000a29565b9050919050565b62000a7d8162000646565b82525050565b60008115159050919050565b62000a9a8162000a83565b82525050565b600060408201905062000ab7600083018562000a72565b62000ac6602083018462000a8f565b9392505050565b60008160601b9050919050565b600062000ae78262000acd565b9050919050565b600062000afb8262000ada565b9050919050565b62000b1762000b118262000646565b62000aee565b82525050565b600062000b2b828462000b02565b60148201915081905092915050565b6000819050919050565b6000819050919050565b62000b6362000b5d8262000b3a565b62000b44565b82525050565b600062000b77828562000b4e565b60208201915062000b89828462000b4e565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000be157607f821691505b6020821081141562000bf85762000bf762000b99565b5b50919050565b60805160a05160c05160e0516101005161012051610140516133a362000ca66000396000818161090001528181610a9b015261111101526000818161126001526116fb015260008181610ee60152611553015260008181610e930152611f110152600061048e0152600081816107dc015281816114d9015281816116810152611e970152600081816104fd01528181611517015281816116bf0152611ed501526133a36000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c8063776bcbd2116100c3578063a6b1b9a21161007c578063a6b1b9a2146103cc578063d12dfadb146103e8578063d55a42dd14610418578063dee010f014610436578063e18de85714610452578063e7f144311461047057610157565b8063776bcbd2146102f857806378e7e76b146103145780637c1de7e1146103445780637c7067381461036057806388961a691461037e5780638fe47dd8146103ae57610157565b80633a13dc0e116101155780633a13dc0e14610231578063481c6a75146102625780634c8f1d8d146102805780636bd2bdd01461029e5780636db798f9146102bc57806371bab666146102da57610157565b80629f2f3c1461015c57806312e9e07e1461017a5780631ce9ae07146101aa5780631d36cf5c146101c85780631de7e45b146101e45780633376e7c214610215575b600080fd5b61016461048c565b60405161017191906120f9565b60405180910390f35b610194600480360381019061018f91906121a8565b6104b0565b6040516101a19190612203565b60405180910390f35b6101b26104fb565b6040516101bf919061222d565b60405180910390f35b6101e260048036038101906101dd9190612288565b61051f565b005b6101fe60048036038101906101f991906122db565b6105dd565b60405161020c929190612343565b60405180910390f35b61022f600480360381019061022a9190612398565b610671565b005b61024b600480360381019061024691906121a8565b610736565b60405161025992919061242d565b60405180910390f35b61026a6107da565b604051610277919061222d565b60405180910390f35b6102886107fe565b60405161029591906124ef565b60405180910390f35b6102a661088c565b6040516102b391906124ef565b60405180910390f35b6102c46108c5565b6040516102d191906124ef565b60405180910390f35b6102e26108fe565b6040516102ef9190612570565b60405180910390f35b610312600480360381019061030d919061258b565b610922565b005b61032e6004803603810190610329919061258b565b6109f3565b60405161033b9190612203565b60405180910390f35b61035e60048036038101906103599190612643565b610a99565b005b610368610e91565b60405161037591906120f9565b60405180910390f35b610398600480360381019061039391906126a3565b610eb5565b6040516103a59190612203565b60405180910390f35b6103b6610ee4565b6040516103c391906120f9565b60405180910390f35b6103e660048036038101906103e19190612288565b610f08565b005b61040260048036038101906103fd9190612643565b610fc6565b60405161040f91906120f9565b60405180910390f35b610420610ffc565b60405161042d91906124ef565b60405180910390f35b610450600480360381019061044b91906126e3565b611035565b005b61045a61125e565b60405161046791906120f9565b60405180910390f35b61048a6004803603810190610485919061276b565b611282565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b60006104bc83836113ef565b806104f35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610528336114be565b610567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055e906127f7565b60405180910390fd5b6105728383836115e8565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847fd19e89b7d547ccf349211588a9a1d29461e2ce984b1b1cdbe7150976528b86f1846040516105d09190612852565b60405180910390a4505050565b6000806105ea83336104b0565b610629576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610620906128b9565b60405180910390fd5b60006005600085815260200190815260200160002090508060000160009054906101000a9004601b0b81600001601c9054906101000a900463ffffffff169250925050915091565b61067a33611666565b6106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b090612925565b60405180910390fd5b60006106c6848484611790565b90503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2fa93828cf3f001b9a9f0a7365db04ea068b9db7bcb7a38d289f0cf8aa9ce3748585604051610728929190612945565b60405180910390a450505050565b600080600080600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a900467ffffffffffffffff1692508060000160089054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff169150509250929050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6002805461080b9061299d565b80601f01602080910402602001604051908101604052809291908181526020018280546108379061299d565b80156108845780601f1061085957610100808354040283529160200191610884565b820191906000526020600020905b81548152906001019060200180831161086757829003601f168201915b505050505081565b6040518060400160405280601b81526020017f57686974656c6973742065787069726174696f6e20736574746572000000000081525081565b6040518060400160405280601d81526020017f57686974656c6973742065787069726174696f6e20657874656e64657200000081525081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61092b81611666565b1561096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096290612a1b565b60405180910390fd5b600080610979858585611c06565b9150915081156109ec578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16867f29c394c1d92801cab93215bf9cd50ae38d23341be6540f27d80ee2bc8a54123733856040516109e3929190612a3b565b60405180910390a45b5050505050565b60006001600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90612ab0565b60405180910390fd5b6000600660008581526020019081526020016000205490506000801b811415610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90612b1c565b60405180910390fd5b60066000858152602001908152602001600020600090556000808484810190610bae9190612b9e565b915091507fffffffff80000000000000000000000000000000000000000000000000000000601b0b8212158015610c0457507b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff601b0b8213155b610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90612c2a565b60405180910390fd5b63ffffffff8016811115610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390612c96565b60405180910390fd5b60056000848152602001908152602001600020600001601c9054906101000a900463ffffffff1663ffffffff168111610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf190612d02565b60405180910390fd5b42610e1082610d099190612d51565b11610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090612df3565b60405180910390fd5b42610e1082610d589190612e13565b10610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f90612e93565b60405180910390fd5b604051806040016040528083601b0b81526020018263ffffffff168152506005600085815260200190815260200160002060008201518160000160006101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff0219169083601b0b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550602082015181600001601c6101000a81548163ffffffff021916908363ffffffff160217905550905050827fcb9c65e5f99c20826a331174f56e8c536161ecb0b5d598267e79c83567d477f1878484604051610e8193929190612eb3565b60405180910390a2505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610f1133611e7c565b610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790612f36565b60405180910390fd5b610f5b838383611fa6565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847fa9e0c89b898eb7a904617915dc5b5510d539c899810042e9248569b54b9cc2ed84604051610fb99190612852565b60405180910390a4505050565b6000838383604051602001610fdd93929190612fb6565b6040516020818303038152906040528051906020012090509392505050565b6040518060400160405280601681526020017f496e646566696e6974652077686974656c69737465720000000000000000000081525081565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f59061302c565b60405180910390fd5b600061110b868484610fc6565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663acbe180088888830637c1de7e160e01b8a8a6040518863ffffffff1660e01b815260040161117b97969594939291906130c5565b602060405180830381600087803b15801561119557600080fd5b505af11580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd9190613144565b90508160066000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16837f629ca61b7deaab5253f42e56618b004fe68f1e4131f68be9055fdeee5f0184d3848b8a8a8a60405161124d959493929190613171565b60405180910390a450505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e99061320b565b60405180910390fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f5a3b1968640fbb8b12349ea1a58be5c61eaec6e38c11c38652f1d250207103ab836040516113e39190612203565b60405180910390a35050565b60008060008085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160089054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1611806114b55750428160000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16115b91505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614806115e157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d148547f0000000000000000000000000000000000000000000000000000000000000000846040518363ffffffff1660e01b815260040161159092919061322b565b60206040518083038186803b1580156115a857600080fd5b505afa1580156115bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e09190613269565b5b9050919050565b8060008085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b60008173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16148061178957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d148547f0000000000000000000000000000000000000000000000000000000000000000846040518363ffffffff1660e01b815260040161173892919061322b565b60206040518083038186803b15801561175057600080fd5b505afa158015611764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117889190613269565b5b9050919050565b600080600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1690508180156118b057506001600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a0657600180600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061196590613296565b9150508060008086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160086101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff160217905550611bff565b81158015611aab57506001600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611bfe5760006001600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b61906132d7565b9150508060008086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160086101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055505b5b9392505050565b60008060008086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1690506001600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e745760006001600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611dd3906132d7565b9150508060008087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160086101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff160217905550600191505b935093915050565b60008173ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161480611f9f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391d148547f0000000000000000000000000000000000000000000000000000000000000000846040518363ffffffff1660e01b8152600401611f4e92919061322b565b60206040518083038186803b158015611f6657600080fd5b505afa158015611f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9e9190613269565b5b9050919050565b60008084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff168167ffffffffffffffff1611612062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120599061334d565b60405180910390fd5b8060008085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6000819050919050565b6120f3816120e0565b82525050565b600060208201905061210e60008301846120ea565b92915050565b600080fd5b600080fd5b612127816120e0565b811461213257600080fd5b50565b6000813590506121448161211e565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121758261214a565b9050919050565b6121858161216a565b811461219057600080fd5b50565b6000813590506121a28161217c565b92915050565b600080604083850312156121bf576121be612114565b5b60006121cd85828601612135565b92505060206121de85828601612193565b9150509250929050565b60008115159050919050565b6121fd816121e8565b82525050565b600060208201905061221860008301846121f4565b92915050565b6122278161216a565b82525050565b6000602082019050612242600083018461221e565b92915050565b600067ffffffffffffffff82169050919050565b61226581612248565b811461227057600080fd5b50565b6000813590506122828161225c565b92915050565b6000806000606084860312156122a1576122a0612114565b5b60006122af86828701612135565b93505060206122c086828701612193565b92505060406122d186828701612273565b9150509250925092565b6000602082840312156122f1576122f0612114565b5b60006122ff84828501612135565b91505092915050565b600081601b0b9050919050565b61231e81612308565b82525050565b600063ffffffff82169050919050565b61233d81612324565b82525050565b60006040820190506123586000830185612315565b6123656020830184612334565b9392505050565b612375816121e8565b811461238057600080fd5b50565b6000813590506123928161236c565b92915050565b6000806000606084860312156123b1576123b0612114565b5b60006123bf86828701612135565b93505060206123d086828701612193565b92505060406123e186828701612383565b9150509250925092565b6123f481612248565b82525050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b612427816123fa565b82525050565b600060408201905061244260008301856123eb565b61244f602083018461241e565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612490578082015181840152602081019050612475565b8381111561249f576000848401525b50505050565b6000601f19601f8301169050919050565b60006124c182612456565b6124cb8185612461565b93506124db818560208601612472565b6124e4816124a5565b840191505092915050565b6000602082019050818103600083015261250981846124b6565b905092915050565b6000819050919050565b600061253661253161252c8461214a565b612511565b61214a565b9050919050565b60006125488261251b565b9050919050565b600061255a8261253d565b9050919050565b61256a8161254f565b82525050565b60006020820190506125856000830184612561565b92915050565b6000806000606084860312156125a4576125a3612114565b5b60006125b286828701612135565b93505060206125c386828701612193565b92505060406125d486828701612193565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112612603576126026125de565b5b8235905067ffffffffffffffff8111156126205761261f6125e3565b5b60208301915083600182028301111561263c5761263b6125e8565b5b9250929050565b60008060006040848603121561265c5761265b612114565b5b600061266a86828701612135565b935050602084013567ffffffffffffffff81111561268b5761268a612119565b5b612697868287016125ed565b92509250509250925092565b600080604083850312156126ba576126b9612114565b5b60006126c885828601612193565b92505060206126d985828601612193565b9150509250929050565b6000806000806000608086880312156126ff576126fe612114565b5b600061270d88828901612135565b955050602061271e88828901612193565b945050604061272f88828901612193565b935050606086013567ffffffffffffffff8111156127505761274f612119565b5b61275c888289016125ed565b92509250509295509295909350565b6000806040838503121561278257612781612114565b5b600061279085828601612193565b92505060206127a185828601612383565b9150509250929050565b7f4e6f742065787069726174696f6e207365747465720000000000000000000000600082015250565b60006127e1601583612461565b91506127ec826127ab565b602082019050919050565b60006020820190508181036000830152612810816127d4565b9050919050565b6000819050919050565b600061283c61283761283284612248565b612511565b612817565b9050919050565b61284c81612821565b82525050565b60006020820190506128676000830184612843565b92915050565b7f43616c6c6572206e6f742077686974656c697374656400000000000000000000600082015250565b60006128a3601683612461565b91506128ae8261286d565b602082019050919050565b600060208201905081810360008301526128d281612896565b9050919050565b7f4e6f7420696e646566696e6974652077686974656c6973746572000000000000600082015250565b600061290f601a83612461565b915061291a826128d9565b602082019050919050565b6000602082019050818103600083015261293e81612902565b9050919050565b600060408201905061295a60008301856121f4565b612967602083018461241e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129b557607f821691505b602082108114156129c9576129c861296e565b5b50919050565b7f73657474657220697320696e646566696e6974652077686974656c6973746572600082015250565b6000612a05602083612461565b9150612a10826129cf565b602082019050919050565b60006020820190508181036000830152612a34816129f8565b9050919050565b6000604082019050612a50600083018561221e565b612a5d602083018461241e565b9392505050565b7f43616c6c6572206e6f74204169726e6f64652052525000000000000000000000600082015250565b6000612a9a601683612461565b9150612aa582612a64565b602082019050919050565b60006020820190508181036000830152612ac981612a8d565b9050919050565b7f4e6f20737563682072657175657374206d616465000000000000000000000000600082015250565b6000612b06601483612461565b9150612b1182612ad0565b602082019050919050565b60006020820190508181036000830152612b3581612af9565b9050919050565b6000819050919050565b612b4f81612b3c565b8114612b5a57600080fd5b50565b600081359050612b6c81612b46565b92915050565b612b7b81612817565b8114612b8657600080fd5b50565b600081359050612b9881612b72565b92915050565b60008060408385031215612bb557612bb4612114565b5b6000612bc385828601612b5d565b9250506020612bd485828601612b89565b9150509250929050565b7f56616c7565207479706563617374696e67206572726f72000000000000000000600082015250565b6000612c14601783612461565b9150612c1f82612bde565b602082019050919050565b60006020820190508181036000830152612c4381612c07565b9050919050565b7f54696d657374616d70207479706563617374696e67206572726f720000000000600082015250565b6000612c80601b83612461565b9150612c8b82612c4a565b602082019050919050565b60006020820190508181036000830152612caf81612c73565b9050919050565b7f46756c66696c6c6d656e74206f6c646572207468616e20626561636f6e000000600082015250565b6000612cec601d83612461565b9150612cf782612cb6565b602082019050919050565b60006020820190508181036000830152612d1b81612cdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d5c82612817565b9150612d6783612817565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d9c57612d9b612d22565b5b828201905092915050565b7f46756c66696c6c6d656e74207374616c65000000000000000000000000000000600082015250565b6000612ddd601183612461565b9150612de882612da7565b602082019050919050565b60006020820190508181036000830152612e0c81612dd0565b9050919050565b6000612e1e82612817565b9150612e2983612817565b925082821015612e3c57612e3b612d22565b5b828203905092915050565b7f46756c66696c6c6d656e742066726f6d20667574757265000000000000000000600082015250565b6000612e7d601783612461565b9150612e8882612e47565b602082019050919050565b60006020820190508181036000830152612eac81612e70565b9050919050565b6000606082019050612ec860008301866120ea565b612ed56020830185612315565b612ee26040830184612334565b949350505050565b7f4e6f742065787069726174696f6e20657874656e646572000000000000000000600082015250565b6000612f20601783612461565b9150612f2b82612eea565b602082019050919050565b60006020820190508181036000830152612f4f81612f13565b9050919050565b6000819050919050565b612f71612f6c826120e0565b612f56565b82525050565b600081905092915050565b82818337600083830152505050565b6000612f9d8385612f77565b9350612faa838584612f82565b82840190509392505050565b6000612fc28286612f60565b602082019150612fd3828486612f91565b9150819050949350505050565b7f43616c6c6572206e6f74207065726d6974746564000000000000000000000000600082015250565b6000613016601483612461565b915061302182612fe0565b602082019050919050565b6000602082019050818103600083015261304581613009565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130818161304c565b82525050565b600082825260208201905092915050565b60006130a48385613087565b93506130b1838584612f82565b6130ba836124a5565b840190509392505050565b600060c0820190506130da600083018a6120ea565b6130e7602083018961221e565b6130f4604083018861221e565b613101606083018761221e565b61310e6080830186613078565b81810360a0830152613121818486613098565b905098975050505050505050565b60008151905061313e8161211e565b92915050565b60006020828403121561315a57613159612114565b5b60006131688482850161312f565b91505092915050565b600060808201905061318660008301886120ea565b61319360208301876120ea565b6131a0604083018661221e565b81810360608301526131b3818486613098565b90509695505050505050565b7f55706461746520726571756573746572207a65726f0000000000000000000000600082015250565b60006131f5601583612461565b9150613200826131bf565b602082019050919050565b60006020820190508181036000830152613224816131e8565b9050919050565b600060408201905061324060008301856120ea565b61324d602083018461221e565b9392505050565b6000815190506132638161236c565b92915050565b60006020828403121561327f5761327e612114565b5b600061328d84828501613254565b91505092915050565b60006132a1826123fa565b915077ffffffffffffffffffffffffffffffffffffffffffffffff8214156132cc576132cb612d22565b5b600182019050919050565b60006132e2826123fa565b915060008214156132f6576132f5612d22565b5b600182039050919050565b7f446f6573206e6f7420657874656e642065787069726174696f6e000000000000600082015250565b6000613337601a83612461565b915061334282613301565b602082019050919050565b600060208201905081810360008301526133668161332a565b905091905056fea2646970667358221220c518ae4d93ad480dfc27d3e646fd842100deff0162e0ed0baf571649b7ccd69f64736f6c63430008090033000000000000000000000000a59a67b7b50943b559ed79df7a36a7be5c67f5f300000000000000000000000000000000000000000000000000000000000000800000000000000000000000005b1243308f56156553f067d354b162f71e581b2800000000000000000000000068e36beeda1644258973e532029fc3a2806bba8b000000000000000000000000000000000000000000000000000000000000000f727270626561636f6e2061646d696e0000000000000000000000000000000000

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

000000000000000000000000a59a67b7b50943b559ed79df7a36a7be5c67f5f300000000000000000000000000000000000000000000000000000000000000800000000000000000000000005b1243308f56156553f067d354b162f71e581b2800000000000000000000000068e36beeda1644258973e532029fc3a2806bba8b000000000000000000000000000000000000000000000000000000000000000f727270626561636f6e2061646d696e0000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _accessControlRegistry (address): 0xa59a67b7b50943b559ed79df7a36a7be5c67f5f3
Arg [1] : _adminRoleDescription (string): rrpbeacon admin
Arg [2] : _manager (address): 0x5b1243308f56156553f067d354b162f71e581b28
Arg [3] : _airnodeRrp (address): 0x68e36beeda1644258973e532029fc3a2806bba8b

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000a59a67b7b50943b559ed79df7a36a7be5c67f5f3
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000005b1243308f56156553f067d354b162f71e581b28
Arg [3] : 00000000000000000000000068e36beeda1644258973e532029fc3a2806bba8b
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 727270626561636f6e2061646d696e0000000000000000000000000000000000


Deployed ByteCode Sourcemap

33835:13019:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19768:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44371:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8522:55;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36263:516;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43774:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;37091:618;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45006:514;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;19637:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10361:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10557:135;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10411:139;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28445:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38002:700;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45946:356;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41823:1397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19818:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34148:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19890:63;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35356:531;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46610:241;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10699:107;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40486:905;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19960:59;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38945:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19768:43;;;:::o;44371:225::-;44500:4;44529:35;44547:8;44557:6;44529:17;:35::i;:::-;:59;;;;44586:1;44568:20;;:6;:20;;;44529:59;44522:66;;44371:225;;;;:::o;8522:55::-;;;:::o;36263:516::-;36442:55;36486:10;36442:43;:55::i;:::-;36420:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;36557:62;36581:8;36591:6;36599:19;36557:23;:62::i;:::-;36716:10;36635:136;;36695:6;36635:136;;36672:8;36635:136;36741:19;36635:136;;;;;;:::i;:::-;;;;;;;;36263:516;;;:::o;43774:377::-;43880:12;43894:16;43950:41;43970:8;43980:10;43950:19;:41::i;:::-;43928:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;44052:21;44076:7;:17;44084:8;44076:17;;;;;;;;;;;44052:41;;44112:6;:12;;;;;;;;;;;;44126:6;:16;;;;;;;;;;;;44104:39;;;;;43774:377;;;:::o;37091:618::-;37261:51;37301:10;37261:39;:51::i;:::-;37239:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;37377:32;37412:105;37456:8;37479:6;37500;37412:29;:105::i;:::-;37377:140;;37620:10;37533:168;;37599:6;37533:168;;37576:8;37533:168;37645:6;37666:24;37533:168;;;;;;;:::i;:::-;;;;;;;;37228:481;37091:618;;;:::o;45006:514::-;45151:26;45179:32;45229:52;45284:32;:74;45335:8;45284:74;;;;;;;;;;;:82;45359:6;45284:82;;;;;;;;;;;;;;;45229:137;;45399:15;:35;;;;;;;;;;;;45377:57;;45472:15;:40;;;;;;;;;;;;45445:67;;45218:302;45006:514;;;;;:::o;19637:41::-;;;:::o;10361:43::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10557:135::-;;;;;;;;;;;;;;;;;;;:::o;10411:139::-;;;;;;;;;;;;;;;;;;;:::o;28445:39::-;;;:::o;38002:700::-;38179:47;38219:6;38179:39;:47::i;:::-;38178:48;38156:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;38312:12;38339:32;38385:58;38418:8;38428:6;38436;38385:32;:58::i;:::-;38297:146;;;;38458:7;38454:241;;;38590:6;38487:196;;38565:6;38487:196;;38538:8;38487:196;38615:10;38644:24;38487:196;;;;;;;:::i;:::-;;;;;;;;38454:241;38145:557;;38002:700;;;:::o;45946:356::-;46123:30;46194:50;:84;46259:8;46194:84;;;;;;;;;;;:92;46279:6;46194:92;;;;;;;;;;;;;;;:100;46287:6;46194:100;;;;;;;;;;;;;;;;;;;;;;;;;46166:128;;45946:356;;;;;:::o;41823:1397::-;28736:10;28714:33;;:10;:33;;;28706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41956:16:::1;41975:19;:30;41995:9;41975:30;;;;;;;;;;;;41956:49;;42044:1;42036:10:::0;::::1;42024:8;:22;;42016:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42089:19;:30;42109:9;42089:30;;;;;;;;;;;42082:37;;;42131:18;42151:24:::0;42204:4:::1;;42179:72;;;;;;;:::i;:::-;42130:121;;;;42299:16;42284:31;;:11;:31;;:66;;;;;42334:16;42319:31;;:11;:31;;42284:66;42262:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;42454:16;42434:36:::0;::::1;:16;:36;;42412:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;42577:7;:17;42585:8;42577:17;;;;;;;;;;;:27;;;;;;;;;;;;42558:46;;:16;:46;42536:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;42723:15;42713:7;42694:16;:26;;;;:::i;:::-;:44;42672:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;42845:15;42835:7;42816:16;:26;;;;:::i;:::-;:44;42794:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;42942:110;;;;;;;;42978:11;42942:110;;;;;;43023:16;42942:110;;;;::::0;42922:7:::1;:17;42930:8;42922:17;;;;;;;;;;;:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43096:8;43068:144;43119:9;43150:11;43184:16;43068:144;;;;;;;;:::i;:::-;;;;;;;;41945:1275;;;41823:1397:::0;;;:::o;19818:65::-;;;:::o;34148:121::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19890:63::-;;;:::o;35356:531::-;35538:57;35584:10;35538:45;:57::i;:::-;35516:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;35657:65;35684:8;35694:6;35702:19;35657:26;:65::i;:::-;35824:10;35738:141;;35803:6;35738:141;;35780:8;35738:141;35849:19;35738:141;;;;;;:::i;:::-;;;;;;;;35356:531;;;:::o;46610:241::-;46747:16;46819:10;46831;;46802:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46792:51;;;;;;46781:62;;46610:241;;;;;:::o;10699:107::-;;;;;;;;;;;;;;;;;;;:::o;40486:905::-;40696:42;:51;40739:7;40696:51;;;;;;;;;;;;;;;:63;40748:10;40696:63;;;;;;;;;;;;;;;;;;;;;;;;;40674:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;40818:16;40837:38;40852:10;40864;;40837:14;:38::i;:::-;40818:57;;40886:17;40906:10;:30;;;40951:10;40976:7;40998:13;41034:4;41054:21;;;41090:10;;40906:205;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40886:225;;41155:8;41122:19;:30;41142:9;41122:30;;;;;;;;;;;:41;;;;41260:10;41179:204;;41238:7;41179:204;;41215:8;41179:204;41285:9;41309:10;41334:13;41362:10;;41179:204;;;;;;;;;;:::i;:::-;;;;;;;;40663:728;;40486:905;;;;;:::o;19960:59::-;;;:::o;38945:389::-;39105:1;39078:29;;:15;:29;;;;39070:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39242:6;39144:42;:54;39187:10;39144:54;;;;;;;;;;;;;;;:95;39213:15;39144:95;;;;;;;;;;;;;;;;:104;;;;;;;;;;;;;;;;;;39302:15;39264:62;;39290:10;39264:62;;;39319:6;39264:62;;;;;;:::i;:::-;;;;;;;;38945:389;;:::o;5704:435::-;5814:18;5850:52;5905:32;:75;5956:9;5905:75;;;;;;;;;;;:81;5981:4;5905:81;;;;;;;;;;;;;;;5850:136;;6060:1;6017:15;:40;;;;;;;;;;;;:44;;;:114;;;;6116:15;6078;:35;;;;;;;;;;;;:53;;;6017:114;5997:134;;;5704:435;;;;:::o;21705:347::-;21825:4;21878:7;21867:18;;:7;:18;;;:177;;;;21925:21;21902:53;;;21974:29;22022:7;21902:142;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21867:177;21847:197;;21705:347;;;:::o;2412:261::-;2646:19;2560:32;:43;2593:9;2560:43;;;;;;;;;;;:49;2604:4;2560:49;;;;;;;;;;;;;;;:83;;;:105;;;;;;;;;;;;;;;;;;2412:261;;;:::o;22295:339::-;22411:4;22464:7;22453:18;;:7;:18;;;:173;;;;22511:21;22488:53;;;22560:25;22604:7;22488:138;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22453:173;22433:193;;22295:339;;;:::o;3099:1302::-;3236:32;3308;:43;3341:9;3308:43;;;;;;;;;;;:73;3366:4;3308:73;;;;;;;;;;;;;;;:98;;;;;;;;;;;;3281:125;;3435:6;:135;;;;;3459:50;:61;3510:9;3459:61;;;;;;;;;;;:99;3539:4;3459:99;;;;;;;;;;;;;;;:111;3559:10;3459:111;;;;;;;;;;;;;;;;;;;;;;;;;3458:112;3435:135;3417:977;;;3711:4;3597:50;:61;3648:9;3597:61;;;;;;;;;;;:67;3659:4;3597:67;;;;;;;;;;;;;;;:111;3683:10;3597:111;;;;;;;;;;;;;;;;:118;;;;;;;;;;;;;;;;;;3730:26;;;;;:::i;:::-;;;;3866:24;3771:32;:43;3804:9;3771:43;;;;;;;;;;;:49;3815:4;3771:49;;;;;;;;;;;;;;;:92;;;:119;;;;;;;;;;;;;;;;;;3417:977;;;3927:6;3926:7;:135;;;;;3950:50;:61;4001:9;3950:61;;;;;;;;;;;:67;4012:4;3950:67;;;;;;;;;;;;;;;:111;4036:10;3950:111;;;;;;;;;;;;;;;;;;;;;;;;;3926:135;3908:486;;;4202:5;4088:50;:61;4139:9;4088:61;;;;;;;;;;;:67;4150:4;4088:67;;;;;;;;;;;;;;;:111;4174:10;4088:111;;;;;;;;;;;;;;;;:119;;;;;;;;;;;;;;;;;;4222:26;;;;;:::i;:::-;;;;4358:24;4263:32;:43;4296:9;4263:43;;;;;;;;;;;:49;4307:4;4263:49;;;;;;;;;;;;;;;:92;;;:119;;;;;;;;;;;;;;;;;;3908:486;3417:977;3099:1302;;;;;:::o;4669:828::-;4812:12;4826:32;4898;:43;4931:9;4898:43;;;;;;;;;;;:73;4956:4;4898:73;;;;;;;;;;;;;;;:98;;;;;;;;;;;;4871:125;;5025:50;:61;5076:9;5025:61;;;;;;;;;;;:67;5087:4;5025:67;;;;;;;;;;;;;;;:107;5111:6;5025:107;;;;;;;;;;;;;;;;;;;;;;;;;5007:483;;;5269:5;5159:50;:61;5210:9;5159:61;;;;;;;;;;;:67;5221:4;5159:67;;;;;;;;;;;;;;;:107;5245:6;5159:107;;;;;;;;;;;;;;;;:115;;;;;;;;;;;;;;;;;;5289:26;;;;;:::i;:::-;;;;5425:24;5330:32;:43;5363:9;5330:43;;;;;;;;;;;:49;5374:4;5330:49;;;;;;;;;;;;;;;:92;;;:119;;;;;;;;;;;;;;;;;;5474:4;5464:14;;5007:483;4669:828;;;;;;:::o;21112:351::-;21234:4;21287:7;21276:18;;:7;:18;;;:179;;;;21334:21;21311:53;;;21383:31;21433:7;21311:144;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21276:179;21256:199;;21112:351;;;:::o;1572:481::-;1784:32;:43;1817:9;1784:43;;;;;;;;;;;:49;1828:4;1784:49;;;;;;;;;;;;;;;:91;;;;;;;;;;;;1745:130;;:19;:130;;;1723:206;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:19;1940:32;:43;1973:9;1940:43;;;;;;;;;;;:49;1984:4;1940:49;;;;;;;;;;;;;;;:83;;;:105;;;;;;;;;;;;;;;;;;1572:481;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:126::-;1079:7;1119:42;1112:5;1108:54;1097:65;;1042:126;;;:::o;1174:96::-;1211:7;1240:24;1258:5;1240:24;:::i;:::-;1229:35;;1174:96;;;:::o;1276:122::-;1349:24;1367:5;1349:24;:::i;:::-;1342:5;1339:35;1329:63;;1388:1;1385;1378:12;1329:63;1276:122;:::o;1404:139::-;1450:5;1488:6;1475:20;1466:29;;1504:33;1531:5;1504:33;:::i;:::-;1404:139;;;;:::o;1549:474::-;1617:6;1625;1674:2;1662:9;1653:7;1649:23;1645:32;1642:119;;;1680:79;;:::i;:::-;1642:119;1800:1;1825:53;1870:7;1861:6;1850:9;1846:22;1825:53;:::i;:::-;1815:63;;1771:117;1927:2;1953:53;1998:7;1989:6;1978:9;1974:22;1953:53;:::i;:::-;1943:63;;1898:118;1549:474;;;;;:::o;2029:90::-;2063:7;2106:5;2099:13;2092:21;2081:32;;2029:90;;;:::o;2125:109::-;2206:21;2221:5;2206:21;:::i;:::-;2201:3;2194:34;2125:109;;:::o;2240:210::-;2327:4;2365:2;2354:9;2350:18;2342:26;;2378:65;2440:1;2429:9;2425:17;2416:6;2378:65;:::i;:::-;2240:210;;;;:::o;2456:118::-;2543:24;2561:5;2543:24;:::i;:::-;2538:3;2531:37;2456:118;;:::o;2580:222::-;2673:4;2711:2;2700:9;2696:18;2688:26;;2724:71;2792:1;2781:9;2777:17;2768:6;2724:71;:::i;:::-;2580:222;;;;:::o;2808:101::-;2844:7;2884:18;2877:5;2873:30;2862:41;;2808:101;;;:::o;2915:120::-;2987:23;3004:5;2987:23;:::i;:::-;2980:5;2977:34;2967:62;;3025:1;3022;3015:12;2967:62;2915:120;:::o;3041:137::-;3086:5;3124:6;3111:20;3102:29;;3140:32;3166:5;3140:32;:::i;:::-;3041:137;;;;:::o;3184:617::-;3260:6;3268;3276;3325:2;3313:9;3304:7;3300:23;3296:32;3293:119;;;3331:79;;:::i;:::-;3293:119;3451:1;3476:53;3521:7;3512:6;3501:9;3497:22;3476:53;:::i;:::-;3466:63;;3422:117;3578:2;3604:53;3649:7;3640:6;3629:9;3625:22;3604:53;:::i;:::-;3594:63;;3549:118;3706:2;3732:52;3776:7;3767:6;3756:9;3752:22;3732:52;:::i;:::-;3722:62;;3677:117;3184:617;;;;;:::o;3807:329::-;3866:6;3915:2;3903:9;3894:7;3890:23;3886:32;3883:119;;;3921:79;;:::i;:::-;3883:119;4041:1;4066:53;4111:7;4102:6;4091:9;4087:22;4066:53;:::i;:::-;4056:63;;4012:117;3807:329;;;;:::o;4142:92::-;4178:7;4222:5;4218:2;4207:21;4196:32;;4142:92;;;:::o;4240:115::-;4325:23;4342:5;4325:23;:::i;:::-;4320:3;4313:36;4240:115;;:::o;4361:93::-;4397:7;4437:10;4430:5;4426:22;4415:33;;4361:93;;;:::o;4460:115::-;4545:23;4562:5;4545:23;:::i;:::-;4540:3;4533:36;4460:115;;:::o;4581:324::-;4698:4;4736:2;4725:9;4721:18;4713:26;;4749:69;4815:1;4804:9;4800:17;4791:6;4749:69;:::i;:::-;4828:70;4894:2;4883:9;4879:18;4870:6;4828:70;:::i;:::-;4581:324;;;;;:::o;4911:116::-;4981:21;4996:5;4981:21;:::i;:::-;4974:5;4971:32;4961:60;;5017:1;5014;5007:12;4961:60;4911:116;:::o;5033:133::-;5076:5;5114:6;5101:20;5092:29;;5130:30;5154:5;5130:30;:::i;:::-;5033:133;;;;:::o;5172:613::-;5246:6;5254;5262;5311:2;5299:9;5290:7;5286:23;5282:32;5279:119;;;5317:79;;:::i;:::-;5279:119;5437:1;5462:53;5507:7;5498:6;5487:9;5483:22;5462:53;:::i;:::-;5452:63;;5408:117;5564:2;5590:53;5635:7;5626:6;5615:9;5611:22;5590:53;:::i;:::-;5580:63;;5535:118;5692:2;5718:50;5760:7;5751:6;5740:9;5736:22;5718:50;:::i;:::-;5708:60;;5663:115;5172:613;;;;;:::o;5791:115::-;5876:23;5893:5;5876:23;:::i;:::-;5871:3;5864:36;5791:115;;:::o;5912:134::-;5949:7;5989:50;5982:5;5978:62;5967:73;;5912:134;;;:::o;6052:118::-;6139:24;6157:5;6139:24;:::i;:::-;6134:3;6127:37;6052:118;;:::o;6176:328::-;6295:4;6333:2;6322:9;6318:18;6310:26;;6346:69;6412:1;6401:9;6397:17;6388:6;6346:69;:::i;:::-;6425:72;6493:2;6482:9;6478:18;6469:6;6425:72;:::i;:::-;6176:328;;;;;:::o;6510:99::-;6562:6;6596:5;6590:12;6580:22;;6510:99;;;:::o;6615:169::-;6699:11;6733:6;6728:3;6721:19;6773:4;6768:3;6764:14;6749:29;;6615:169;;;;:::o;6790:307::-;6858:1;6868:113;6882:6;6879:1;6876:13;6868:113;;;6967:1;6962:3;6958:11;6952:18;6948:1;6943:3;6939:11;6932:39;6904:2;6901:1;6897:10;6892:15;;6868:113;;;6999:6;6996:1;6993:13;6990:101;;;7079:1;7070:6;7065:3;7061:16;7054:27;6990:101;6839:258;6790:307;;;:::o;7103:102::-;7144:6;7195:2;7191:7;7186:2;7179:5;7175:14;7171:28;7161:38;;7103:102;;;:::o;7211:364::-;7299:3;7327:39;7360:5;7327:39;:::i;:::-;7382:71;7446:6;7441:3;7382:71;:::i;:::-;7375:78;;7462:52;7507:6;7502:3;7495:4;7488:5;7484:16;7462:52;:::i;:::-;7539:29;7561:6;7539:29;:::i;:::-;7534:3;7530:39;7523:46;;7303:272;7211:364;;;;:::o;7581:313::-;7694:4;7732:2;7721:9;7717:18;7709:26;;7781:9;7775:4;7771:20;7767:1;7756:9;7752:17;7745:47;7809:78;7882:4;7873:6;7809:78;:::i;:::-;7801:86;;7581:313;;;;:::o;7900:60::-;7928:3;7949:5;7942:12;;7900:60;;;:::o;7966:142::-;8016:9;8049:53;8067:34;8076:24;8094:5;8076:24;:::i;:::-;8067:34;:::i;:::-;8049:53;:::i;:::-;8036:66;;7966:142;;;:::o;8114:126::-;8164:9;8197:37;8228:5;8197:37;:::i;:::-;8184:50;;8114:126;;;:::o;8246:146::-;8316:9;8349:37;8380:5;8349:37;:::i;:::-;8336:50;;8246:146;;;:::o;8398:171::-;8505:57;8556:5;8505:57;:::i;:::-;8500:3;8493:70;8398:171;;:::o;8575:262::-;8688:4;8726:2;8715:9;8711:18;8703:26;;8739:91;8827:1;8816:9;8812:17;8803:6;8739:91;:::i;:::-;8575:262;;;;:::o;8843:619::-;8920:6;8928;8936;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:53;9181:7;9172:6;9161:9;9157:22;9136:53;:::i;:::-;9126:63;;9082:117;9238:2;9264:53;9309:7;9300:6;9289:9;9285:22;9264:53;:::i;:::-;9254:63;;9209:118;9366:2;9392:53;9437:7;9428:6;9417:9;9413:22;9392:53;:::i;:::-;9382:63;;9337:118;8843:619;;;;;:::o;9468:117::-;9577:1;9574;9567:12;9591:117;9700:1;9697;9690:12;9714:117;9823:1;9820;9813:12;9850:552;9907:8;9917:6;9967:3;9960:4;9952:6;9948:17;9944:27;9934:122;;9975:79;;:::i;:::-;9934:122;10088:6;10075:20;10065:30;;10118:18;10110:6;10107:30;10104:117;;;10140:79;;:::i;:::-;10104:117;10254:4;10246:6;10242:17;10230:29;;10308:3;10300:4;10292:6;10288:17;10278:8;10274:32;10271:41;10268:128;;;10315:79;;:::i;:::-;10268:128;9850:552;;;;;:::o;10408:672::-;10487:6;10495;10503;10552:2;10540:9;10531:7;10527:23;10523:32;10520:119;;;10558:79;;:::i;:::-;10520:119;10678:1;10703:53;10748:7;10739:6;10728:9;10724:22;10703:53;:::i;:::-;10693:63;;10649:117;10833:2;10822:9;10818:18;10805:32;10864:18;10856:6;10853:30;10850:117;;;10886:79;;:::i;:::-;10850:117;10999:64;11055:7;11046:6;11035:9;11031:22;10999:64;:::i;:::-;10981:82;;;;10776:297;10408:672;;;;;:::o;11086:474::-;11154:6;11162;11211:2;11199:9;11190:7;11186:23;11182:32;11179:119;;;11217:79;;:::i;:::-;11179:119;11337:1;11362:53;11407:7;11398:6;11387:9;11383:22;11362:53;:::i;:::-;11352:63;;11308:117;11464:2;11490:53;11535:7;11526:6;11515:9;11511:22;11490:53;:::i;:::-;11480:63;;11435:118;11086:474;;;;;:::o;11566:963::-;11663:6;11671;11679;11687;11695;11744:3;11732:9;11723:7;11719:23;11715:33;11712:120;;;11751:79;;:::i;:::-;11712:120;11871:1;11896:53;11941:7;11932:6;11921:9;11917:22;11896:53;:::i;:::-;11886:63;;11842:117;11998:2;12024:53;12069:7;12060:6;12049:9;12045:22;12024:53;:::i;:::-;12014:63;;11969:118;12126:2;12152:53;12197:7;12188:6;12177:9;12173:22;12152:53;:::i;:::-;12142:63;;12097:118;12282:2;12271:9;12267:18;12254:32;12313:18;12305:6;12302:30;12299:117;;;12335:79;;:::i;:::-;12299:117;12448:64;12504:7;12495:6;12484:9;12480:22;12448:64;:::i;:::-;12430:82;;;;12225:297;11566:963;;;;;;;;:::o;12535:468::-;12600:6;12608;12657:2;12645:9;12636:7;12632:23;12628:32;12625:119;;;12663:79;;:::i;:::-;12625:119;12783:1;12808:53;12853:7;12844:6;12833:9;12829:22;12808:53;:::i;:::-;12798:63;;12754:117;12910:2;12936:50;12978:7;12969:6;12958:9;12954:22;12936:50;:::i;:::-;12926:60;;12881:115;12535:468;;;;;:::o;13009:171::-;13149:23;13145:1;13137:6;13133:14;13126:47;13009:171;:::o;13186:366::-;13328:3;13349:67;13413:2;13408:3;13349:67;:::i;:::-;13342:74;;13425:93;13514:3;13425:93;:::i;:::-;13543:2;13538:3;13534:12;13527:19;;13186:366;;;:::o;13558:419::-;13724:4;13762:2;13751:9;13747:18;13739:26;;13811:9;13805:4;13801:20;13797:1;13786:9;13782:17;13775:47;13839:131;13965:4;13839:131;:::i;:::-;13831:139;;13558:419;;;:::o;13983:77::-;14020:7;14049:5;14038:16;;13983:77;;;:::o;14066:140::-;14115:9;14148:52;14166:33;14175:23;14192:5;14175:23;:::i;:::-;14166:33;:::i;:::-;14148:52;:::i;:::-;14135:65;;14066:140;;;:::o;14212:129::-;14298:36;14328:5;14298:36;:::i;:::-;14293:3;14286:49;14212:129;;:::o;14347:220::-;14439:4;14477:2;14466:9;14462:18;14454:26;;14490:70;14557:1;14546:9;14542:17;14533:6;14490:70;:::i;:::-;14347:220;;;;:::o;14573:172::-;14713:24;14709:1;14701:6;14697:14;14690:48;14573:172;:::o;14751:366::-;14893:3;14914:67;14978:2;14973:3;14914:67;:::i;:::-;14907:74;;14990:93;15079:3;14990:93;:::i;:::-;15108:2;15103:3;15099:12;15092:19;;14751:366;;;:::o;15123:419::-;15289:4;15327:2;15316:9;15312:18;15304:26;;15376:9;15370:4;15366:20;15362:1;15351:9;15347:17;15340:47;15404:131;15530:4;15404:131;:::i;:::-;15396:139;;15123:419;;;:::o;15548:176::-;15688:28;15684:1;15676:6;15672:14;15665:52;15548:176;:::o;15730:366::-;15872:3;15893:67;15957:2;15952:3;15893:67;:::i;:::-;15886:74;;15969:93;16058:3;15969:93;:::i;:::-;16087:2;16082:3;16078:12;16071:19;;15730:366;;;:::o;16102:419::-;16268:4;16306:2;16295:9;16291:18;16283:26;;16355:9;16349:4;16345:20;16341:1;16330:9;16326:17;16319:47;16383:131;16509:4;16383:131;:::i;:::-;16375:139;;16102:419;;;:::o;16527:320::-;16642:4;16680:2;16669:9;16665:18;16657:26;;16693:65;16755:1;16744:9;16740:17;16731:6;16693:65;:::i;:::-;16768:72;16836:2;16825:9;16821:18;16812:6;16768:72;:::i;:::-;16527:320;;;;;:::o;16853:180::-;16901:77;16898:1;16891:88;16998:4;16995:1;16988:15;17022:4;17019:1;17012:15;17039:320;17083:6;17120:1;17114:4;17110:12;17100:22;;17167:1;17161:4;17157:12;17188:18;17178:81;;17244:4;17236:6;17232:17;17222:27;;17178:81;17306:2;17298:6;17295:14;17275:18;17272:38;17269:84;;;17325:18;;:::i;:::-;17269:84;17090:269;17039:320;;;:::o;17365:182::-;17505:34;17501:1;17493:6;17489:14;17482:58;17365:182;:::o;17553:366::-;17695:3;17716:67;17780:2;17775:3;17716:67;:::i;:::-;17709:74;;17792:93;17881:3;17792:93;:::i;:::-;17910:2;17905:3;17901:12;17894:19;;17553:366;;;:::o;17925:419::-;18091:4;18129:2;18118:9;18114:18;18106:26;;18178:9;18172:4;18168:20;18164:1;18153:9;18149:17;18142:47;18206:131;18332:4;18206:131;:::i;:::-;18198:139;;17925:419;;;:::o;18350:332::-;18471:4;18509:2;18498:9;18494:18;18486:26;;18522:71;18590:1;18579:9;18575:17;18566:6;18522:71;:::i;:::-;18603:72;18671:2;18660:9;18656:18;18647:6;18603:72;:::i;:::-;18350:332;;;;;:::o;18688:172::-;18828:24;18824:1;18816:6;18812:14;18805:48;18688:172;:::o;18866:366::-;19008:3;19029:67;19093:2;19088:3;19029:67;:::i;:::-;19022:74;;19105:93;19194:3;19105:93;:::i;:::-;19223:2;19218:3;19214:12;19207:19;;18866:366;;;:::o;19238:419::-;19404:4;19442:2;19431:9;19427:18;19419:26;;19491:9;19485:4;19481:20;19477:1;19466:9;19462:17;19455:47;19519:131;19645:4;19519:131;:::i;:::-;19511:139;;19238:419;;;:::o;19663:170::-;19803:22;19799:1;19791:6;19787:14;19780:46;19663:170;:::o;19839:366::-;19981:3;20002:67;20066:2;20061:3;20002:67;:::i;:::-;19995:74;;20078:93;20167:3;20078:93;:::i;:::-;20196:2;20191:3;20187:12;20180:19;;19839:366;;;:::o;20211:419::-;20377:4;20415:2;20404:9;20400:18;20392:26;;20464:9;20458:4;20454:20;20450:1;20439:9;20435:17;20428:47;20492:131;20618:4;20492:131;:::i;:::-;20484:139;;20211:419;;;:::o;20636:76::-;20672:7;20701:5;20690:16;;20636:76;;;:::o;20718:120::-;20790:23;20807:5;20790:23;:::i;:::-;20783:5;20780:34;20770:62;;20828:1;20825;20818:12;20770:62;20718:120;:::o;20844:137::-;20889:5;20927:6;20914:20;20905:29;;20943:32;20969:5;20943:32;:::i;:::-;20844:137;;;;:::o;20987:122::-;21060:24;21078:5;21060:24;:::i;:::-;21053:5;21050:35;21040:63;;21099:1;21096;21089:12;21040:63;20987:122;:::o;21115:139::-;21161:5;21199:6;21186:20;21177:29;;21215:33;21242:5;21215:33;:::i;:::-;21115:139;;;;:::o;21260:472::-;21327:6;21335;21384:2;21372:9;21363:7;21359:23;21355:32;21352:119;;;21390:79;;:::i;:::-;21352:119;21510:1;21535:52;21579:7;21570:6;21559:9;21555:22;21535:52;:::i;:::-;21525:62;;21481:116;21636:2;21662:53;21707:7;21698:6;21687:9;21683:22;21662:53;:::i;:::-;21652:63;;21607:118;21260:472;;;;;:::o;21738:173::-;21878:25;21874:1;21866:6;21862:14;21855:49;21738:173;:::o;21917:366::-;22059:3;22080:67;22144:2;22139:3;22080:67;:::i;:::-;22073:74;;22156:93;22245:3;22156:93;:::i;:::-;22274:2;22269:3;22265:12;22258:19;;21917:366;;;:::o;22289:419::-;22455:4;22493:2;22482:9;22478:18;22470:26;;22542:9;22536:4;22532:20;22528:1;22517:9;22513:17;22506:47;22570:131;22696:4;22570:131;:::i;:::-;22562:139;;22289:419;;;:::o;22714:177::-;22854:29;22850:1;22842:6;22838:14;22831:53;22714:177;:::o;22897:366::-;23039:3;23060:67;23124:2;23119:3;23060:67;:::i;:::-;23053:74;;23136:93;23225:3;23136:93;:::i;:::-;23254:2;23249:3;23245:12;23238:19;;22897:366;;;:::o;23269:419::-;23435:4;23473:2;23462:9;23458:18;23450:26;;23522:9;23516:4;23512:20;23508:1;23497:9;23493:17;23486:47;23550:131;23676:4;23550:131;:::i;:::-;23542:139;;23269:419;;;:::o;23694:179::-;23834:31;23830:1;23822:6;23818:14;23811:55;23694:179;:::o;23879:366::-;24021:3;24042:67;24106:2;24101:3;24042:67;:::i;:::-;24035:74;;24118:93;24207:3;24118:93;:::i;:::-;24236:2;24231:3;24227:12;24220:19;;23879:366;;;:::o;24251:419::-;24417:4;24455:2;24444:9;24440:18;24432:26;;24504:9;24498:4;24494:20;24490:1;24479:9;24475:17;24468:47;24532:131;24658:4;24532:131;:::i;:::-;24524:139;;24251:419;;;:::o;24676:180::-;24724:77;24721:1;24714:88;24821:4;24818:1;24811:15;24845:4;24842:1;24835:15;24862:305;24902:3;24921:20;24939:1;24921:20;:::i;:::-;24916:25;;24955:20;24973:1;24955:20;:::i;:::-;24950:25;;25109:1;25041:66;25037:74;25034:1;25031:81;25028:107;;;25115:18;;:::i;:::-;25028:107;25159:1;25156;25152:9;25145:16;;24862:305;;;;:::o;25173:167::-;25313:19;25309:1;25301:6;25297:14;25290:43;25173:167;:::o;25346:366::-;25488:3;25509:67;25573:2;25568:3;25509:67;:::i;:::-;25502:74;;25585:93;25674:3;25585:93;:::i;:::-;25703:2;25698:3;25694:12;25687:19;;25346:366;;;:::o;25718:419::-;25884:4;25922:2;25911:9;25907:18;25899:26;;25971:9;25965:4;25961:20;25957:1;25946:9;25942:17;25935:47;25999:131;26125:4;25999:131;:::i;:::-;25991:139;;25718:419;;;:::o;26143:191::-;26183:4;26203:20;26221:1;26203:20;:::i;:::-;26198:25;;26237:20;26255:1;26237:20;:::i;:::-;26232:25;;26276:1;26273;26270:8;26267:34;;;26281:18;;:::i;:::-;26267:34;26326:1;26323;26319:9;26311:17;;26143:191;;;;:::o;26340:173::-;26480:25;26476:1;26468:6;26464:14;26457:49;26340:173;:::o;26519:366::-;26661:3;26682:67;26746:2;26741:3;26682:67;:::i;:::-;26675:74;;26758:93;26847:3;26758:93;:::i;:::-;26876:2;26871:3;26867:12;26860:19;;26519:366;;;:::o;26891:419::-;27057:4;27095:2;27084:9;27080:18;27072:26;;27144:9;27138:4;27134:20;27130:1;27119:9;27115:17;27108:47;27172:131;27298:4;27172:131;:::i;:::-;27164:139;;26891:419;;;:::o;27316:434::-;27461:4;27499:2;27488:9;27484:18;27476:26;;27512:71;27580:1;27569:9;27565:17;27556:6;27512:71;:::i;:::-;27593:70;27659:2;27648:9;27644:18;27635:6;27593:70;:::i;:::-;27673;27739:2;27728:9;27724:18;27715:6;27673:70;:::i;:::-;27316:434;;;;;;:::o;27756:173::-;27896:25;27892:1;27884:6;27880:14;27873:49;27756:173;:::o;27935:366::-;28077:3;28098:67;28162:2;28157:3;28098:67;:::i;:::-;28091:74;;28174:93;28263:3;28174:93;:::i;:::-;28292:2;28287:3;28283:12;28276:19;;27935:366;;;:::o;28307:419::-;28473:4;28511:2;28500:9;28496:18;28488:26;;28560:9;28554:4;28550:20;28546:1;28535:9;28531:17;28524:47;28588:131;28714:4;28588:131;:::i;:::-;28580:139;;28307:419;;;:::o;28732:79::-;28771:7;28800:5;28789:16;;28732:79;;;:::o;28817:157::-;28922:45;28942:24;28960:5;28942:24;:::i;:::-;28922:45;:::i;:::-;28917:3;28910:58;28817:157;;:::o;28980:147::-;29081:11;29118:3;29103:18;;28980:147;;;;:::o;29133:154::-;29217:6;29212:3;29207;29194:30;29279:1;29270:6;29265:3;29261:16;29254:27;29133:154;;;:::o;29315:314::-;29429:3;29450:88;29531:6;29526:3;29450:88;:::i;:::-;29443:95;;29548:43;29584:6;29579:3;29572:5;29548:43;:::i;:::-;29616:6;29611:3;29607:16;29600:23;;29315:314;;;;;:::o;29635:432::-;29803:3;29818:75;29889:3;29880:6;29818:75;:::i;:::-;29918:2;29913:3;29909:12;29902:19;;29938:103;30037:3;30028:6;30020;29938:103;:::i;:::-;29931:110;;30058:3;30051:10;;29635:432;;;;;;:::o;30073:170::-;30213:22;30209:1;30201:6;30197:14;30190:46;30073:170;:::o;30249:366::-;30391:3;30412:67;30476:2;30471:3;30412:67;:::i;:::-;30405:74;;30488:93;30577:3;30488:93;:::i;:::-;30606:2;30601:3;30597:12;30590:19;;30249:366;;;:::o;30621:419::-;30787:4;30825:2;30814:9;30810:18;30802:26;;30874:9;30868:4;30864:20;30860:1;30849:9;30845:17;30838:47;30902:131;31028:4;30902:131;:::i;:::-;30894:139;;30621:419;;;:::o;31046:149::-;31082:7;31122:66;31115:5;31111:78;31100:89;;31046:149;;;:::o;31201:115::-;31286:23;31303:5;31286:23;:::i;:::-;31281:3;31274:36;31201:115;;:::o;31322:168::-;31405:11;31439:6;31434:3;31427:19;31479:4;31474:3;31470:14;31455:29;;31322:168;;;;:::o;31518:301::-;31614:3;31635:70;31698:6;31693:3;31635:70;:::i;:::-;31628:77;;31715:43;31751:6;31746:3;31739:5;31715:43;:::i;:::-;31783:29;31805:6;31783:29;:::i;:::-;31778:3;31774:39;31767:46;;31518:301;;;;;:::o;31825:878::-;32084:4;32122:3;32111:9;32107:19;32099:27;;32136:71;32204:1;32193:9;32189:17;32180:6;32136:71;:::i;:::-;32217:72;32285:2;32274:9;32270:18;32261:6;32217:72;:::i;:::-;32299;32367:2;32356:9;32352:18;32343:6;32299:72;:::i;:::-;32381;32449:2;32438:9;32434:18;32425:6;32381:72;:::i;:::-;32463:71;32529:3;32518:9;32514:19;32505:6;32463:71;:::i;:::-;32582:9;32576:4;32572:20;32566:3;32555:9;32551:19;32544:49;32610:86;32691:4;32682:6;32674;32610:86;:::i;:::-;32602:94;;31825:878;;;;;;;;;;:::o;32709:143::-;32766:5;32797:6;32791:13;32782:22;;32813:33;32840:5;32813:33;:::i;:::-;32709:143;;;;:::o;32858:351::-;32928:6;32977:2;32965:9;32956:7;32952:23;32948:32;32945:119;;;32983:79;;:::i;:::-;32945:119;33103:1;33128:64;33184:7;33175:6;33164:9;33160:22;33128:64;:::i;:::-;33118:74;;33074:128;32858:351;;;;:::o;33215:660::-;33420:4;33458:3;33447:9;33443:19;33435:27;;33472:71;33540:1;33529:9;33525:17;33516:6;33472:71;:::i;:::-;33553:72;33621:2;33610:9;33606:18;33597:6;33553:72;:::i;:::-;33635;33703:2;33692:9;33688:18;33679:6;33635:72;:::i;:::-;33754:9;33748:4;33744:20;33739:2;33728:9;33724:18;33717:48;33782:86;33863:4;33854:6;33846;33782:86;:::i;:::-;33774:94;;33215:660;;;;;;;;:::o;33881:171::-;34021:23;34017:1;34009:6;34005:14;33998:47;33881:171;:::o;34058:366::-;34200:3;34221:67;34285:2;34280:3;34221:67;:::i;:::-;34214:74;;34297:93;34386:3;34297:93;:::i;:::-;34415:2;34410:3;34406:12;34399:19;;34058:366;;;:::o;34430:419::-;34596:4;34634:2;34623:9;34619:18;34611:26;;34683:9;34677:4;34673:20;34669:1;34658:9;34654:17;34647:47;34711:131;34837:4;34711:131;:::i;:::-;34703:139;;34430:419;;;:::o;34855:332::-;34976:4;35014:2;35003:9;34999:18;34991:26;;35027:71;35095:1;35084:9;35080:17;35071:6;35027:71;:::i;:::-;35108:72;35176:2;35165:9;35161:18;35152:6;35108:72;:::i;:::-;34855:332;;;;;:::o;35193:137::-;35247:5;35278:6;35272:13;35263:22;;35294:30;35318:5;35294:30;:::i;:::-;35193:137;;;;:::o;35336:345::-;35403:6;35452:2;35440:9;35431:7;35427:23;35423:32;35420:119;;;35458:79;;:::i;:::-;35420:119;35578:1;35603:61;35656:7;35647:6;35636:9;35632:22;35603:61;:::i;:::-;35593:71;;35549:125;35336:345;;;;:::o;35687:217::-;35726:3;35749:24;35767:5;35749:24;:::i;:::-;35740:33;;35795:50;35788:5;35785:61;35782:87;;;35849:18;;:::i;:::-;35782:87;35896:1;35889:5;35885:13;35878:20;;35687:217;;;:::o;35910:171::-;35949:3;35972:24;35990:5;35972:24;:::i;:::-;35963:33;;36018:4;36011:5;36008:15;36005:41;;;36026:18;;:::i;:::-;36005:41;36073:1;36066:5;36062:13;36055:20;;35910:171;;;:::o;36087:176::-;36227:28;36223:1;36215:6;36211:14;36204:52;36087:176;:::o;36269:366::-;36411:3;36432:67;36496:2;36491:3;36432:67;:::i;:::-;36425:74;;36508:93;36597:3;36508:93;:::i;:::-;36626:2;36621:3;36617:12;36610:19;;36269:366;;;:::o;36641:419::-;36807:4;36845:2;36834:9;36830:18;36822:26;;36894:9;36888:4;36884:20;36880:1;36869:9;36865:17;36858:47;36922:131;37048:4;36922:131;:::i;:::-;36914:139;;36641:419;;;:::o

Swarm Source

ipfs://c518ae4d93ad480dfc27d3e646fd842100deff0162e0ed0baf571649b7ccd69f
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading