creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "lib/eigenlayer-contracts/src/contracts/permissions/PauserRegistry.sol": {
        "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity =0.8.12;\n\nimport \"../interfaces/IPauserRegistry.sol\";\n\n/**\n * @title Defines pauser & unpauser roles + modifiers to be used elsewhere.\n * @author Layr Labs, Inc.\n * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service\n */\ncontract PauserRegistry is IPauserRegistry {\n    /// @notice Mapping of addresses to whether they hold the pauser role.\n    mapping(address => bool) public isPauser;\n\n    /// @notice Unique address that holds the unpauser role. Capable of changing *both* the pauser and unpauser addresses.\n    address public unpauser;\n\n    modifier onlyUnpauser() {\n        require(msg.sender == unpauser, \"msg.sender is not permissioned as unpauser\");\n        _;\n    }\n\n    constructor(address[] memory _pausers, address _unpauser) {\n        for (uint256 i = 0; i < _pausers.length; i++) {\n            _setIsPauser(_pausers[i], true);\n        }\n        _setUnpauser(_unpauser);\n    }\n\n    /// @notice Sets new pauser - only callable by unpauser, as the unpauser is expected to be kept more secure, e.g. being a multisig with a higher threshold\n    /// @param newPauser Address to be added/removed as pauser\n    /// @param canPause Whether the address should be added or removed as pauser\n    function setIsPauser(address newPauser, bool canPause) external onlyUnpauser {\n        _setIsPauser(newPauser, canPause);\n    }\n\n    /// @notice Sets new unpauser - only callable by unpauser, as the unpauser is expected to be kept more secure, e.g. being a multisig with a higher threshold\n    function setUnpauser(address newUnpauser) external onlyUnpauser {\n        _setUnpauser(newUnpauser);\n    }\n\n    function _setIsPauser(address pauser, bool canPause) internal {\n        require(pauser != address(0), \"PauserRegistry._setPauser: zero address input\");\n        isPauser[pauser] = canPause;\n        emit PauserStatusChanged(pauser, canPause);\n    }\n\n    function _setUnpauser(address newUnpauser) internal {\n        require(newUnpauser != address(0), \"PauserRegistry._setUnpauser: zero address input\");\n        emit UnpauserChanged(unpauser, newUnpauser);\n        unpauser = newUnpauser;\n    }\n}\n"
      },
      "lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol": {
        "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity >=0.5.0;\n\n/**\n * @title Interface for the `PauserRegistry` contract.\n * @author Layr Labs, Inc.\n * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service\n */\ninterface IPauserRegistry {\n    event PauserStatusChanged(address pauser, bool canPause);\n\n    event UnpauserChanged(address previousUnpauser, address newUnpauser);\n\n    /// @notice Mapping of addresses to whether they hold the pauser role.\n    function isPauser(address pauser) external view returns (bool);\n\n    /// @notice Unique address that holds the unpauser role. Capable of changing *both* the pauser and unpauser addresses.\n    function unpauser() external view returns (address);\n}\n"
      }
    },
    "settings": {
      "remappings": [
        "forge-std/=lib/forge-std/src/",
        "eigenlayer-middleware/=lib/eigenlayer-middleware/src/",
        "eigenlayer-core/=lib/eigenlayer-contracts/src/",
        "@openzeppelin-upgrades/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/",
        "@openzeppelin/=lib/eigenlayer-contracts/lib/openzeppelin-contracts/",
        "ds-test/=lib/eigenlayer-contracts/lib/ds-test/src/",
        "eigenlayer-contracts/=lib/eigenlayer-contracts/",
        "openzeppelin-contracts-upgradeable/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/",
        "openzeppelin-contracts/=lib/eigenlayer-contracts/lib/openzeppelin-contracts/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "useLiteralContent": false,
        "bytecodeHash": "ipfs"
      },
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      },
      "evmVersion": "london",
      "libraries": {}
    }
  }}