{
  "contractName": "KeepFactorySelectionStub",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract IBondedECDSAKeepFactory",
          "name": "_defaultFactory",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "selectFactory",
      "outputs": [
        {
          "internalType": "contract IBondedECDSAKeepFactory",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minimumBondableValue",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_groupSize",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_honestThreshold",
          "type": "uint256"
        }
      ],
      "name": "setMinimumBondableValue",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "selectFactoryAndRefresh",
      "outputs": [
        {
          "internalType": "contract IBondedECDSAKeepFactory",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_keepStakedFactory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_fullyBackedFactory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_factorySelector",
          "type": "address"
        }
      ],
      "name": "setFactories",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "factories",
      "outputs": [
        {
          "internalType": "address",
          "name": "_keepStakedFactory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_fullyBackedFactory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_factorySelector",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"factories\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_keepStakedFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_fullyBackedFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_factorySelector\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IBondedECDSAKeepFactory\",\"name\":\"_defaultFactory\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"selectFactory\",\"outputs\":[{\"internalType\":\"contract IBondedECDSAKeepFactory\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"selectFactoryAndRefresh\",\"outputs\":[{\"internalType\":\"contract IBondedECDSAKeepFactory\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keepStakedFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_fullyBackedFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_factorySelector\",\"type\":\"address\"}],\"name\":\"setFactories\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minimumBondableValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_groupSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_honestThreshold\",\"type\":\"uint256\"}],\"name\":\"setMinimumBondableValue\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/test/system/KeepFactorySelectionStub.sol\":\"KeepFactorySelectionStub\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/KeepFactorySelection.sol\":{\"keccak256\":\"0x26d39ca282d933df1c349ab52be37c19af9f4f8d24f0fb25700ef221a8294d6f\",\"urls\":[\"bzz-raw://fc25c76e38172ca0e12f51aecc53ed498c3b1a6900b0f358f3404c5df22fc40b\",\"dweb:/ipfs/QmQvHwrufw7UaKkVmf15xvFXgSFYzNua2abFpQLjzibnV3\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/test/system/KeepFactorySelectionStub.sol\":{\"keccak256\":\"0x6a72f89acf75700d89a0a8db3a7fe73613af4ff99e319f199ccb11e543b9886a\",\"urls\":[\"bzz-raw://79c41f4063f421d2ae0869a4e7073680d952b6fe5085058de157c1117ac9342f\",\"dweb:/ipfs/QmchsutdfuLSHjL3tiHKxCpqMTJnzzuarKE1nc5PFK23nM\"]},\"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeepFactory.sol\":{\"keccak256\":\"0x07ae883d2a0f5b7fe2c0b055206f565da51b04d1ca574ae4d4da3a19e6badcdb\",\"urls\":[\"bzz-raw://038b4f5b45b2d676ef7411b69cadd490d5789e3d245afd78aaa72177ce042572\",\"dweb:/ipfs/QmRaBYU4HCDSH33a3gpLN4t2TsyNaFRxLKv3WeAZEgk9Rr\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061043d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80633fd19199146100675780636291fc8d1461008b5780637bd3b99514610093578063b8ee9156146100cd578063c4d66de8146100f6578063fe5b38e41461011c575b600080fd5b61006f61014f565b604080516001600160a01b039092168252519081900360200190f35b61006f6101d3565b6100cb600480360360608110156100a957600080fd5b506001600160a01b038135811691602081013582169160409091013516610226565b005b6100cb600480360360608110156100e357600080fd5b508035906020810135906040013561023e565b6100cb6004803603602081101561010c57600080fd5b50356001600160a01b03166102c0565b61012461033a565b604080516001600160a01b039485168152928416602084015292168183015290519081900360600190f35b60008073__KeepFactorySelection__________________63d83d44b090916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156101a257600080fd5b505af41580156101b6573d6000803e3d6000fd5b505050506040513d60208110156101cc57600080fd5b5051905090565b60008073__KeepFactorySelection__________________63d857268890916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156101a257600080fd5b610239600084848463ffffffff61035716565b505050565b6040805163e33cd97160e01b8152600060048201819052602482018690526044820185905260648201849052915173__KeepFactorySelection__________________9263e33cd9719260848082019391829003018186803b1580156102a357600080fd5b505af41580156102b7573d6000803e3d6000fd5b50505050505050565b6040805163e8e08cf160e01b81526000600482018190526001600160a01b0384166024830152915173__KeepFactorySelection__________________9263e8e08cf19260448082019391829003018186803b15801561031f57600080fd5b505af4158015610333573d6000803e3d6000fd5b5050505050565b6003546004546002546001600160a01b0392831693918316921690565b6001600160a01b03831661039c5760405162461bcd60e51b81526004018080602001828103825260238152602001806103e66023913960400191505060405180910390fd5b6003840180546001600160a01b039485166001600160a01b031991821617909155600485018054938516938216939093179092556002909301805493909216921691909117905556fe496e76616c6964204b4545502d7374616b656420666163746f72792061646472657373a265627a7a72315820fd17a9479d987c6b4200865e53c2291d234dfabe5f9445c36da3d3ac5d53154f64736f6c63430005110032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c80633fd19199146100675780636291fc8d1461008b5780637bd3b99514610093578063b8ee9156146100cd578063c4d66de8146100f6578063fe5b38e41461011c575b600080fd5b61006f61014f565b604080516001600160a01b039092168252519081900360200190f35b61006f6101d3565b6100cb600480360360608110156100a957600080fd5b506001600160a01b038135811691602081013582169160409091013516610226565b005b6100cb600480360360608110156100e357600080fd5b508035906020810135906040013561023e565b6100cb6004803603602081101561010c57600080fd5b50356001600160a01b03166102c0565b61012461033a565b604080516001600160a01b039485168152928416602084015292168183015290519081900360600190f35b60008073__KeepFactorySelection__________________63d83d44b090916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156101a257600080fd5b505af41580156101b6573d6000803e3d6000fd5b505050506040513d60208110156101cc57600080fd5b5051905090565b60008073__KeepFactorySelection__________________63d857268890916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156101a257600080fd5b610239600084848463ffffffff61035716565b505050565b6040805163e33cd97160e01b8152600060048201819052602482018690526044820185905260648201849052915173__KeepFactorySelection__________________9263e33cd9719260848082019391829003018186803b1580156102a357600080fd5b505af41580156102b7573d6000803e3d6000fd5b50505050505050565b6040805163e8e08cf160e01b81526000600482018190526001600160a01b0384166024830152915173__KeepFactorySelection__________________9263e8e08cf19260448082019391829003018186803b15801561031f57600080fd5b505af4158015610333573d6000803e3d6000fd5b5050505050565b6003546004546002546001600160a01b0392831693918316921690565b6001600160a01b03831661039c5760405162461bcd60e51b81526004018080602001828103825260238152602001806103e66023913960400191505060405180910390fd5b6003840180546001600160a01b039485166001600160a01b031991821617909155600485018054938516938216939093179092556002909301805493909216921691909117905556fe496e76616c6964204b4545502d7374616b656420666163746f72792061646472657373a265627a7a72315820fd17a9479d987c6b4200865e53c2291d234dfabe5f9445c36da3d3ac5d53154f64736f6c63430005110032",
  "sourceMap": "183:1645:40:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;183:1645:40;;;;;;;",
  "deployedSourceMap": "183:1645:40:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;183:1645:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;483:131;;;:::i;:::-;;;;-1:-1:-1;;;;;483:131:40;;;;;;;;;;;;;;933:146;;;:::i;1085:297::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1085:297:40;;;;;;;;;;;;;;;;;;;:::i;:::-;;620:307;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;620:307:40;;;;;;;;;;;;:::i;344:133::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;344:133:40;-1:-1:-1;;;;;344:133:40;;:::i;1388:438::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1388:438:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;483:131;529:23;571:20;:34;;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;571:36:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;571:36:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;571:36:40;;-1:-1:-1;483:131:40;:::o;933:146::-;984:23;1026:20;:44;;;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;1085:297:40;1237:138;:20;1284:18;1316:19;1349:16;1237:138;:33;:138;:::i;:::-;1085:297;;;:::o;620:307::-;777:143;;;-1:-1:-1;;;777:143:40;;:20;:143;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;:143;;;;;;;;;;;:44;:143;;;5:2:-1;;;;30:1;27;20:12;5:2;777:143:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;777:143:40;;;;620:307;;;:::o;344:133::-;422:48;;;-1:-1:-1;;;422:48:40;;:20;:48;;;;;;-1:-1:-1;;;;;422:48:40;;;;;;;;:31;;;;:48;;;;;;;;;;;:31;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;422:48:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;422:48:40;;;;344:133;:::o;1388:438::-;1626:38;;1705:39;;1782:36;;-1:-1:-1;;;;;1626:38:40;;;;1705:39;;;;1782:36;;1388:438::o;7182:547:20:-;-1:-1:-1;;;;;7388:41:20;;7367:123;;;;-1:-1:-1;;;7367:123:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7501:23;;;:69;;-1:-1:-1;;;;;7501:69:20;;;-1:-1:-1;;;;;;7501:69:20;;;;;;;7580:24;;;:71;;;;;;;;;;;;;;;7661:21;;;;:61;;;;;;;;;;;;;;7182:547::o",
  "source": "pragma solidity 0.5.17;\n\nimport {IBondedECDSAKeepFactory} from \"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeepFactory.sol\";\n\nimport \"../../system/KeepFactorySelection.sol\";\n\ncontract KeepFactorySelectionStub {\n    using KeepFactorySelection for KeepFactorySelection.Storage;\n    KeepFactorySelection.Storage keepFactorySelection;\n\n    function initialize(IBondedECDSAKeepFactory _defaultFactory) public {\n        keepFactorySelection.initialize(_defaultFactory);\n    }\n\n    function selectFactory() public view returns (IBondedECDSAKeepFactory) {\n        return keepFactorySelection.selectFactory();\n    }\n\n    function setMinimumBondableValue(\n        uint256 _minimumBondableValue,\n        uint256 _groupSize,\n        uint256 _honestThreshold\n    ) public {\n        keepFactorySelection.setMinimumBondableValue(\n            _minimumBondableValue,\n            _groupSize,\n            _honestThreshold\n        );\n    }\n\n    function selectFactoryAndRefresh() public returns (IBondedECDSAKeepFactory) {\n        return keepFactorySelection.selectFactoryAndRefresh();\n    }\n\n    function setFactories(\n        address _keepStakedFactory,\n        address _fullyBackedFactory,\n        address _factorySelector\n    ) public {\n        keepFactorySelection.setFactories(\n            _keepStakedFactory,\n            _fullyBackedFactory,\n            _factorySelector\n        );\n    }\n\n    function factories()\n        public\n        view\n        returns (\n            address _keepStakedFactory,\n            address _fullyBackedFactory,\n            address _factorySelector\n        )\n    {\n        _keepStakedFactory = address(keepFactorySelection.keepStakedFactory);\n        _fullyBackedFactory = address(keepFactorySelection.fullyBackedFactory);\n        _factorySelector = address(keepFactorySelection.factorySelector);\n    }\n}\n\ncontract KeepFactorySelectorStub is KeepFactorySelector {\n\n    bool internal defaultMode = true;\n    bool internal maliciousMode = false;\n\n    function selectFactory(\n        uint256,\n        IBondedECDSAKeepFactory _defaultFactory,\n        IBondedECDSAKeepFactory _fullyBackedFactory\n    ) external view returns (IBondedECDSAKeepFactory) {\n        if (maliciousMode) {\n            return IBondedECDSAKeepFactory(0xaFacEbadfAceCffeeFaceacebacEAfAceCfFEeA0);\n        } else if (defaultMode) {\n            return _defaultFactory;\n        } else {\n            return _fullyBackedFactory;\n        }\n    }\n\n    function setMaliciousMode() public {\n        maliciousMode = true;\n    }\n\n    function unsetMaliciousMode() public {\n        maliciousMode = false;\n    }\n\n    function setDefaultMode() public {\n        defaultMode = true;\n    }\n\n    function setFullyBackedMode() public {\n        defaultMode = false;\n    }\n}\n",
  "sourcePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/system/KeepFactorySelectionStub.sol",
  "ast": {
    "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/system/KeepFactorySelectionStub.sol",
    "exportedSymbols": {
      "KeepFactorySelectionStub": [
        10816
      ],
      "KeepFactorySelectorStub": [
        10884
      ]
    },
    "id": 10885,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10708,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:40"
      },
      {
        "absolutePath": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeepFactory.sol",
        "file": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeepFactory.sol",
        "id": 10710,
        "nodeType": "ImportDirective",
        "scope": 10885,
        "sourceUnit": 11468,
        "src": "25:107:40",
        "symbolAliases": [
          {
            "foreign": 10709,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/KeepFactorySelection.sol",
        "file": "../../system/KeepFactorySelection.sol",
        "id": 10711,
        "nodeType": "ImportDirective",
        "scope": 10885,
        "sourceUnit": 6576,
        "src": "134:47:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 10816,
        "linearizedBaseContracts": [
          10816
        ],
        "name": "KeepFactorySelectionStub",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 10714,
            "libraryName": {
              "contractScope": null,
              "id": 10712,
              "name": "KeepFactorySelection",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6575,
              "src": "229:20:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_KeepFactorySelection_$6575",
                "typeString": "library KeepFactorySelection"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "223:60:40",
            "typeName": {
              "contractScope": null,
              "id": 10713,
              "name": "KeepFactorySelection.Storage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6327,
              "src": "254:28:40",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Storage_$6327_storage_ptr",
                "typeString": "struct KeepFactorySelection.Storage"
              }
            }
          },
          {
            "constant": false,
            "id": 10716,
            "name": "keepFactorySelection",
            "nodeType": "VariableDeclaration",
            "scope": 10816,
            "src": "288:49:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Storage_$6327_storage",
              "typeString": "struct KeepFactorySelection.Storage"
            },
            "typeName": {
              "contractScope": null,
              "id": 10715,
              "name": "KeepFactorySelection.Storage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6327,
              "src": "288:28:40",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Storage_$6327_storage_ptr",
                "typeString": "struct KeepFactorySelection.Storage"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10727,
              "nodeType": "Block",
              "src": "412:65:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10724,
                        "name": "_defaultFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10718,
                        "src": "454:15:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                          "typeString": "contract IBondedECDSAKeepFactory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                          "typeString": "contract IBondedECDSAKeepFactory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10721,
                        "name": "keepFactorySelection",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10716,
                        "src": "422:20:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Storage_$6327_storage",
                          "typeString": "struct KeepFactorySelection.Storage storage ref"
                        }
                      },
                      "id": 10723,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6362,
                      "src": "422:31:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Storage_$6327_storage_ptr_$_t_contract$_IBondedECDSAKeepFactory_$11467_$returns$__$bound_to$_t_struct$_Storage_$6327_storage_ptr_$",
                        "typeString": "function (struct KeepFactorySelection.Storage storage pointer,contract IBondedECDSAKeepFactory)"
                      }
                    },
                    "id": 10725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "422:48:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10726,
                  "nodeType": "ExpressionStatement",
                  "src": "422:48:40"
                }
              ]
            },
            "documentation": null,
            "id": 10728,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10719,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10718,
                  "name": "_defaultFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 10728,
                  "src": "364:39:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                    "typeString": "contract IBondedECDSAKeepFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10717,
                    "name": "IBondedECDSAKeepFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11467,
                    "src": "364:23:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                      "typeString": "contract IBondedECDSAKeepFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "363:41:40"
            },
            "returnParameters": {
              "id": 10720,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "412:0:40"
            },
            "scope": 10816,
            "src": "344:133:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10737,
              "nodeType": "Block",
              "src": "554:60:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10733,
                        "name": "keepFactorySelection",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10716,
                        "src": "571:20:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Storage_$6327_storage",
                          "typeString": "struct KeepFactorySelection.Storage storage ref"
                        }
                      },
                      "id": 10734,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "selectFactory",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6373,
                      "src": "571:34:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Storage_$6327_storage_ptr_$returns$_t_contract$_IBondedECDSAKeepFactory_$11467_$bound_to$_t_struct$_Storage_$6327_storage_ptr_$",
                        "typeString": "function (struct KeepFactorySelection.Storage storage pointer) view returns (contract IBondedECDSAKeepFactory)"
                      }
                    },
                    "id": 10735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "571:36:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                      "typeString": "contract IBondedECDSAKeepFactory"
                    }
                  },
                  "functionReturnParameters": 10732,
                  "id": 10736,
                  "nodeType": "Return",
                  "src": "564:43:40"
                }
              ]
            },
            "documentation": null,
            "id": 10738,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "selectFactory",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10729,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "505:2:40"
            },
            "returnParameters": {
              "id": 10732,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10731,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10738,
                  "src": "529:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                    "typeString": "contract IBondedECDSAKeepFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10730,
                    "name": "IBondedECDSAKeepFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11467,
                    "src": "529:23:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                      "typeString": "contract IBondedECDSAKeepFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "528:25:40"
            },
            "scope": 10816,
            "src": "483:131:40",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10755,
              "nodeType": "Block",
              "src": "767:160:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10750,
                        "name": "_minimumBondableValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10740,
                        "src": "835:21:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10751,
                        "name": "_groupSize",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10742,
                        "src": "870:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10752,
                        "name": "_honestThreshold",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10744,
                        "src": "894:16:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10747,
                        "name": "keepFactorySelection",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10716,
                        "src": "777:20:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Storage_$6327_storage",
                          "typeString": "struct KeepFactorySelection.Storage storage ref"
                        }
                      },
                      "id": 10749,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setMinimumBondableValue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6445,
                      "src": "777:44:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Storage_$6327_storage_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Storage_$6327_storage_ptr_$",
                        "typeString": "function (struct KeepFactorySelection.Storage storage pointer,uint256,uint256,uint256)"
                      }
                    },
                    "id": 10753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "777:143:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10754,
                  "nodeType": "ExpressionStatement",
                  "src": "777:143:40"
                }
              ]
            },
            "documentation": null,
            "id": 10756,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setMinimumBondableValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10740,
                  "name": "_minimumBondableValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 10756,
                  "src": "662:29:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10739,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "662:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10742,
                  "name": "_groupSize",
                  "nodeType": "VariableDeclaration",
                  "scope": 10756,
                  "src": "701:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10741,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "701:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10744,
                  "name": "_honestThreshold",
                  "nodeType": "VariableDeclaration",
                  "scope": 10756,
                  "src": "729:24:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10743,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "729:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "652:107:40"
            },
            "returnParameters": {
              "id": 10746,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "767:0:40"
            },
            "scope": 10816,
            "src": "620:307:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10765,
              "nodeType": "Block",
              "src": "1009:70:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10761,
                        "name": "keepFactorySelection",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10716,
                        "src": "1026:20:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Storage_$6327_storage",
                          "typeString": "struct KeepFactorySelection.Storage storage ref"
                        }
                      },
                      "id": 10762,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "selectFactoryAndRefresh",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6393,
                      "src": "1026:44:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Storage_$6327_storage_ptr_$returns$_t_contract$_IBondedECDSAKeepFactory_$11467_$bound_to$_t_struct$_Storage_$6327_storage_ptr_$",
                        "typeString": "function (struct KeepFactorySelection.Storage storage pointer) returns (contract IBondedECDSAKeepFactory)"
                      }
                    },
                    "id": 10763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1026:46:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                      "typeString": "contract IBondedECDSAKeepFactory"
                    }
                  },
                  "functionReturnParameters": 10760,
                  "id": 10764,
                  "nodeType": "Return",
                  "src": "1019:53:40"
                }
              ]
            },
            "documentation": null,
            "id": 10766,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "selectFactoryAndRefresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10757,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "965:2:40"
            },
            "returnParameters": {
              "id": 10760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10759,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10766,
                  "src": "984:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                    "typeString": "contract IBondedECDSAKeepFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10758,
                    "name": "IBondedECDSAKeepFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11467,
                    "src": "984:23:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                      "typeString": "contract IBondedECDSAKeepFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "983:25:40"
            },
            "scope": 10816,
            "src": "933:146:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10783,
              "nodeType": "Block",
              "src": "1227:155:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10778,
                        "name": "_keepStakedFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10768,
                        "src": "1284:18:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10779,
                        "name": "_fullyBackedFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10770,
                        "src": "1316:19:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10780,
                        "name": "_factorySelector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10772,
                        "src": "1349:16:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10775,
                        "name": "keepFactorySelection",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10716,
                        "src": "1237:20:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Storage_$6327_storage",
                          "typeString": "struct KeepFactorySelection.Storage storage ref"
                        }
                      },
                      "id": 10777,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setFactories",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6574,
                      "src": "1237:33:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Storage_$6327_storage_ptr_$_t_address_$_t_address_$_t_address_$returns$__$bound_to$_t_struct$_Storage_$6327_storage_ptr_$",
                        "typeString": "function (struct KeepFactorySelection.Storage storage pointer,address,address,address)"
                      }
                    },
                    "id": 10781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1237:138:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10782,
                  "nodeType": "ExpressionStatement",
                  "src": "1237:138:40"
                }
              ]
            },
            "documentation": null,
            "id": 10784,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setFactories",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10768,
                  "name": "_keepStakedFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 10784,
                  "src": "1116:26:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10767,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1116:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10770,
                  "name": "_fullyBackedFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 10784,
                  "src": "1152:27:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10769,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1152:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10772,
                  "name": "_factorySelector",
                  "nodeType": "VariableDeclaration",
                  "scope": 10784,
                  "src": "1189:24:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10771,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1189:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1106:113:40"
            },
            "returnParameters": {
              "id": 10774,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1227:0:40"
            },
            "scope": 10816,
            "src": "1085:297:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10814,
              "nodeType": "Block",
              "src": "1587:239:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10793,
                      "name": "_keepStakedFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10787,
                      "src": "1597:18:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 10795,
                            "name": "keepFactorySelection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10716,
                            "src": "1626:20:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Storage_$6327_storage",
                              "typeString": "struct KeepFactorySelection.Storage storage ref"
                            }
                          },
                          "id": 10796,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "keepStakedFactory",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6324,
                          "src": "1626:38:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                            "typeString": "contract IBondedECDSAKeepFactory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                            "typeString": "contract IBondedECDSAKeepFactory"
                          }
                        ],
                        "id": 10794,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1618:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 10797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1618:47:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1597:68:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 10799,
                  "nodeType": "ExpressionStatement",
                  "src": "1597:68:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10800,
                      "name": "_fullyBackedFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10789,
                      "src": "1675:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 10802,
                            "name": "keepFactorySelection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10716,
                            "src": "1705:20:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Storage_$6327_storage",
                              "typeString": "struct KeepFactorySelection.Storage storage ref"
                            }
                          },
                          "id": 10803,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "fullyBackedFactory",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6326,
                          "src": "1705:39:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                            "typeString": "contract IBondedECDSAKeepFactory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                            "typeString": "contract IBondedECDSAKeepFactory"
                          }
                        ],
                        "id": 10801,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1697:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 10804,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1697:48:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1675:70:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 10806,
                  "nodeType": "ExpressionStatement",
                  "src": "1675:70:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10812,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10807,
                      "name": "_factorySelector",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10791,
                      "src": "1755:16:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 10809,
                            "name": "keepFactorySelection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10716,
                            "src": "1782:20:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Storage_$6327_storage",
                              "typeString": "struct KeepFactorySelection.Storage storage ref"
                            }
                          },
                          "id": 10810,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "factorySelector",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6322,
                          "src": "1782:36:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_KeepFactorySelector_$6316",
                            "typeString": "contract KeepFactorySelector"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_KeepFactorySelector_$6316",
                            "typeString": "contract KeepFactorySelector"
                          }
                        ],
                        "id": 10808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1774:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 10811,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1774:45:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1755:64:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 10813,
                  "nodeType": "ExpressionStatement",
                  "src": "1755:64:40"
                }
              ]
            },
            "documentation": null,
            "id": 10815,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "factories",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10785,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1406:2:40"
            },
            "returnParameters": {
              "id": 10792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10787,
                  "name": "_keepStakedFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 10815,
                  "src": "1467:26:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1467:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10789,
                  "name": "_fullyBackedFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 10815,
                  "src": "1507:27:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10788,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1507:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10791,
                  "name": "_factorySelector",
                  "nodeType": "VariableDeclaration",
                  "scope": 10815,
                  "src": "1548:24:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1548:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1453:129:40"
            },
            "scope": 10816,
            "src": "1388:438:40",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 10885,
        "src": "183:1645:40"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10817,
              "name": "KeepFactorySelector",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6316,
              "src": "1866:19:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_KeepFactorySelector_$6316",
                "typeString": "contract KeepFactorySelector"
              }
            },
            "id": 10818,
            "nodeType": "InheritanceSpecifier",
            "src": "1866:19:40"
          }
        ],
        "contractDependencies": [
          6316
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 10884,
        "linearizedBaseContracts": [
          10884,
          6316
        ],
        "name": "KeepFactorySelectorStub",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 10821,
            "name": "defaultMode",
            "nodeType": "VariableDeclaration",
            "scope": 10884,
            "src": "1893:32:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 10819,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1893:4:40",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "74727565",
              "id": 10820,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1921:4:40",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "true"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 10824,
            "name": "maliciousMode",
            "nodeType": "VariableDeclaration",
            "scope": 10884,
            "src": "1931:35:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 10822,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1931:4:40",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66616c7365",
              "id": 10823,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1961:5:40",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10850,
              "nodeType": "Block",
              "src": "2169:261:40",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 10835,
                    "name": "maliciousMode",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10824,
                    "src": "2183:13:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "id": 10841,
                      "name": "defaultMode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10821,
                      "src": "2307:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 10847,
                      "nodeType": "Block",
                      "src": "2373:51:40",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 10845,
                            "name": "_fullyBackedFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10830,
                            "src": "2394:19:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                              "typeString": "contract IBondedECDSAKeepFactory"
                            }
                          },
                          "functionReturnParameters": 10834,
                          "id": 10846,
                          "nodeType": "Return",
                          "src": "2387:26:40"
                        }
                      ]
                    },
                    "id": 10848,
                    "nodeType": "IfStatement",
                    "src": "2303:121:40",
                    "trueBody": {
                      "id": 10844,
                      "nodeType": "Block",
                      "src": "2320:47:40",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 10842,
                            "name": "_defaultFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10828,
                            "src": "2341:15:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                              "typeString": "contract IBondedECDSAKeepFactory"
                            }
                          },
                          "functionReturnParameters": 10834,
                          "id": 10843,
                          "nodeType": "Return",
                          "src": "2334:22:40"
                        }
                      ]
                    }
                  },
                  "id": 10849,
                  "nodeType": "IfStatement",
                  "src": "2179:245:40",
                  "trueBody": {
                    "id": 10840,
                    "nodeType": "Block",
                    "src": "2198:99:40",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "307861466163456261646641636543666665654661636561636562616345416641636543664645654130",
                              "id": 10837,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2243:42:40",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              "value": "0xaFacEbadfAceCffeeFaceacebacEAfAceCfFEeA0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 10836,
                            "name": "IBondedECDSAKeepFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11467,
                            "src": "2219:23:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBondedECDSAKeepFactory_$11467_$",
                              "typeString": "type(contract IBondedECDSAKeepFactory)"
                            }
                          },
                          "id": 10838,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2219:67:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                            "typeString": "contract IBondedECDSAKeepFactory"
                          }
                        },
                        "functionReturnParameters": 10834,
                        "id": 10839,
                        "nodeType": "Return",
                        "src": "2212:74:40"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 10851,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "selectFactory",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10831,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10826,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10851,
                  "src": "2005:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10825,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2005:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10828,
                  "name": "_defaultFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 10851,
                  "src": "2022:39:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                    "typeString": "contract IBondedECDSAKeepFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10827,
                    "name": "IBondedECDSAKeepFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11467,
                    "src": "2022:23:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                      "typeString": "contract IBondedECDSAKeepFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10830,
                  "name": "_fullyBackedFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 10851,
                  "src": "2071:43:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                    "typeString": "contract IBondedECDSAKeepFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10829,
                    "name": "IBondedECDSAKeepFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11467,
                    "src": "2071:23:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                      "typeString": "contract IBondedECDSAKeepFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1995:125:40"
            },
            "returnParameters": {
              "id": 10834,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10833,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10851,
                  "src": "2144:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                    "typeString": "contract IBondedECDSAKeepFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10832,
                    "name": "IBondedECDSAKeepFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11467,
                    "src": "2144:23:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                      "typeString": "contract IBondedECDSAKeepFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2143:25:40"
            },
            "scope": 10884,
            "src": "1973:457:40",
            "stateMutability": "view",
            "superFunction": 6315,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10858,
              "nodeType": "Block",
              "src": "2471:37:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10854,
                      "name": "maliciousMode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10824,
                      "src": "2481:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 10855,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2497:4:40",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2481:20:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 10857,
                  "nodeType": "ExpressionStatement",
                  "src": "2481:20:40"
                }
              ]
            },
            "documentation": null,
            "id": 10859,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setMaliciousMode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10852,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2461:2:40"
            },
            "returnParameters": {
              "id": 10853,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2471:0:40"
            },
            "scope": 10884,
            "src": "2436:72:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10866,
              "nodeType": "Block",
              "src": "2551:38:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10862,
                      "name": "maliciousMode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10824,
                      "src": "2561:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 10863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2577:5:40",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "2561:21:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 10865,
                  "nodeType": "ExpressionStatement",
                  "src": "2561:21:40"
                }
              ]
            },
            "documentation": null,
            "id": 10867,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unsetMaliciousMode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10860,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2541:2:40"
            },
            "returnParameters": {
              "id": 10861,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2551:0:40"
            },
            "scope": 10884,
            "src": "2514:75:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10874,
              "nodeType": "Block",
              "src": "2628:35:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10870,
                      "name": "defaultMode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10821,
                      "src": "2638:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 10871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2652:4:40",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2638:18:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 10873,
                  "nodeType": "ExpressionStatement",
                  "src": "2638:18:40"
                }
              ]
            },
            "documentation": null,
            "id": 10875,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setDefaultMode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10868,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2618:2:40"
            },
            "returnParameters": {
              "id": 10869,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2628:0:40"
            },
            "scope": 10884,
            "src": "2595:68:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10882,
              "nodeType": "Block",
              "src": "2706:36:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 10878,
                      "name": "defaultMode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10821,
                      "src": "2716:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 10879,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2730:5:40",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "2716:19:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 10881,
                  "nodeType": "ExpressionStatement",
                  "src": "2716:19:40"
                }
              ]
            },
            "documentation": null,
            "id": 10883,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setFullyBackedMode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10876,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2696:2:40"
            },
            "returnParameters": {
              "id": 10877,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2706:0:40"
            },
            "scope": 10884,
            "src": "2669:73:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 10885,
        "src": "1830:914:40"
      }
    ],
    "src": "0:2745:40"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/system/KeepFactorySelectionStub.sol",
      "exportedSymbols": {
        "KeepFactorySelectionStub": [
          10816
        ],
        "KeepFactorySelectorStub": [
          10884
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.5",
            ".17"
          ]
        },
        "id": 10708,
        "name": "PragmaDirective",
        "src": "0:23:40"
      },
      {
        "attributes": {
          "SourceUnit": 11468,
          "absolutePath": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeepFactory.sol",
          "file": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeepFactory.sol",
          "scope": 10885,
          "symbolAliases": [
            {
              "foreign": 10709,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 10710,
        "name": "ImportDirective",
        "src": "25:107:40"
      },
      {
        "attributes": {
          "SourceUnit": 6576,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/KeepFactorySelection.sol",
          "file": "../../system/KeepFactorySelection.sol",
          "scope": 10885,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 10711,
        "name": "ImportDirective",
        "src": "134:47:40"
      },
      {
        "attributes": {
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            10816
          ],
          "name": "KeepFactorySelectionStub",
          "scope": 10885
        },
        "children": [
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "KeepFactorySelection",
                  "referencedDeclaration": 6575,
                  "type": "library KeepFactorySelection"
                },
                "id": 10712,
                "name": "UserDefinedTypeName",
                "src": "229:20:40"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "KeepFactorySelection.Storage",
                  "referencedDeclaration": 6327,
                  "type": "struct KeepFactorySelection.Storage"
                },
                "id": 10713,
                "name": "UserDefinedTypeName",
                "src": "254:28:40"
              }
            ],
            "id": 10714,
            "name": "UsingForDirective",
            "src": "223:60:40"
          },
          {
            "attributes": {
              "constant": false,
              "name": "keepFactorySelection",
              "scope": 10816,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "struct KeepFactorySelection.Storage",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "KeepFactorySelection.Storage",
                  "referencedDeclaration": 6327,
                  "type": "struct KeepFactorySelection.Storage"
                },
                "id": 10715,
                "name": "UserDefinedTypeName",
                "src": "288:28:40"
              }
            ],
            "id": 10716,
            "name": "VariableDeclaration",
            "src": "288:49:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "initialize",
              "scope": 10816,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_defaultFactory",
                      "scope": 10728,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IBondedECDSAKeepFactory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IBondedECDSAKeepFactory",
                          "referencedDeclaration": 11467,
                          "type": "contract IBondedECDSAKeepFactory"
                        },
                        "id": 10717,
                        "name": "UserDefinedTypeName",
                        "src": "364:23:40"
                      }
                    ],
                    "id": 10718,
                    "name": "VariableDeclaration",
                    "src": "364:39:40"
                  }
                ],
                "id": 10719,
                "name": "ParameterList",
                "src": "363:41:40"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10720,
                "name": "ParameterList",
                "src": "412:0:40"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                                  "typeString": "contract IBondedECDSAKeepFactory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "initialize",
                              "referencedDeclaration": 6362,
                              "type": "function (struct KeepFactorySelection.Storage storage pointer,contract IBondedECDSAKeepFactory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10716,
                                  "type": "struct KeepFactorySelection.Storage storage ref",
                                  "value": "keepFactorySelection"
                                },
                                "id": 10721,
                                "name": "Identifier",
                                "src": "422:20:40"
                              }
                            ],
                            "id": 10723,
                            "name": "MemberAccess",
                            "src": "422:31:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10718,
                              "type": "contract IBondedECDSAKeepFactory",
                              "value": "_defaultFactory"
                            },
                            "id": 10724,
                            "name": "Identifier",
                            "src": "454:15:40"
                          }
                        ],
                        "id": 10725,
                        "name": "FunctionCall",
                        "src": "422:48:40"
                      }
                    ],
                    "id": 10726,
                    "name": "ExpressionStatement",
                    "src": "422:48:40"
                  }
                ],
                "id": 10727,
                "name": "Block",
                "src": "412:65:40"
              }
            ],
            "id": 10728,
            "name": "FunctionDefinition",
            "src": "344:133:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "selectFactory",
              "scope": 10816,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10729,
                "name": "ParameterList",
                "src": "505:2:40"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 10738,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IBondedECDSAKeepFactory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IBondedECDSAKeepFactory",
                          "referencedDeclaration": 11467,
                          "type": "contract IBondedECDSAKeepFactory"
                        },
                        "id": 10730,
                        "name": "UserDefinedTypeName",
                        "src": "529:23:40"
                      }
                    ],
                    "id": 10731,
                    "name": "VariableDeclaration",
                    "src": "529:23:40"
                  }
                ],
                "id": 10732,
                "name": "ParameterList",
                "src": "528:25:40"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 10732
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract IBondedECDSAKeepFactory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "selectFactory",
                              "referencedDeclaration": 6373,
                              "type": "function (struct KeepFactorySelection.Storage storage pointer) view returns (contract IBondedECDSAKeepFactory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10716,
                                  "type": "struct KeepFactorySelection.Storage storage ref",
                                  "value": "keepFactorySelection"
                                },
                                "id": 10733,
                                "name": "Identifier",
                                "src": "571:20:40"
                              }
                            ],
                            "id": 10734,
                            "name": "MemberAccess",
                            "src": "571:34:40"
                          }
                        ],
                        "id": 10735,
                        "name": "FunctionCall",
                        "src": "571:36:40"
                      }
                    ],
                    "id": 10736,
                    "name": "Return",
                    "src": "564:43:40"
                  }
                ],
                "id": 10737,
                "name": "Block",
                "src": "554:60:40"
              }
            ],
            "id": 10738,
            "name": "FunctionDefinition",
            "src": "483:131:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setMinimumBondableValue",
              "scope": 10816,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_minimumBondableValue",
                      "scope": 10756,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 10739,
                        "name": "ElementaryTypeName",
                        "src": "662:7:40"
                      }
                    ],
                    "id": 10740,
                    "name": "VariableDeclaration",
                    "src": "662:29:40"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_groupSize",
                      "scope": 10756,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 10741,
                        "name": "ElementaryTypeName",
                        "src": "701:7:40"
                      }
                    ],
                    "id": 10742,
                    "name": "VariableDeclaration",
                    "src": "701:18:40"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_honestThreshold",
                      "scope": 10756,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 10743,
                        "name": "ElementaryTypeName",
                        "src": "729:7:40"
                      }
                    ],
                    "id": 10744,
                    "name": "VariableDeclaration",
                    "src": "729:24:40"
                  }
                ],
                "id": 10745,
                "name": "ParameterList",
                "src": "652:107:40"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10746,
                "name": "ParameterList",
                "src": "767:0:40"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "setMinimumBondableValue",
                              "referencedDeclaration": 6445,
                              "type": "function (struct KeepFactorySelection.Storage storage pointer,uint256,uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10716,
                                  "type": "struct KeepFactorySelection.Storage storage ref",
                                  "value": "keepFactorySelection"
                                },
                                "id": 10747,
                                "name": "Identifier",
                                "src": "777:20:40"
                              }
                            ],
                            "id": 10749,
                            "name": "MemberAccess",
                            "src": "777:44:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10740,
                              "type": "uint256",
                              "value": "_minimumBondableValue"
                            },
                            "id": 10750,
                            "name": "Identifier",
                            "src": "835:21:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10742,
                              "type": "uint256",
                              "value": "_groupSize"
                            },
                            "id": 10751,
                            "name": "Identifier",
                            "src": "870:10:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10744,
                              "type": "uint256",
                              "value": "_honestThreshold"
                            },
                            "id": 10752,
                            "name": "Identifier",
                            "src": "894:16:40"
                          }
                        ],
                        "id": 10753,
                        "name": "FunctionCall",
                        "src": "777:143:40"
                      }
                    ],
                    "id": 10754,
                    "name": "ExpressionStatement",
                    "src": "777:143:40"
                  }
                ],
                "id": 10755,
                "name": "Block",
                "src": "767:160:40"
              }
            ],
            "id": 10756,
            "name": "FunctionDefinition",
            "src": "620:307:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "selectFactoryAndRefresh",
              "scope": 10816,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10757,
                "name": "ParameterList",
                "src": "965:2:40"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 10766,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IBondedECDSAKeepFactory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IBondedECDSAKeepFactory",
                          "referencedDeclaration": 11467,
                          "type": "contract IBondedECDSAKeepFactory"
                        },
                        "id": 10758,
                        "name": "UserDefinedTypeName",
                        "src": "984:23:40"
                      }
                    ],
                    "id": 10759,
                    "name": "VariableDeclaration",
                    "src": "984:23:40"
                  }
                ],
                "id": 10760,
                "name": "ParameterList",
                "src": "983:25:40"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 10760
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract IBondedECDSAKeepFactory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "selectFactoryAndRefresh",
                              "referencedDeclaration": 6393,
                              "type": "function (struct KeepFactorySelection.Storage storage pointer) returns (contract IBondedECDSAKeepFactory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10716,
                                  "type": "struct KeepFactorySelection.Storage storage ref",
                                  "value": "keepFactorySelection"
                                },
                                "id": 10761,
                                "name": "Identifier",
                                "src": "1026:20:40"
                              }
                            ],
                            "id": 10762,
                            "name": "MemberAccess",
                            "src": "1026:44:40"
                          }
                        ],
                        "id": 10763,
                        "name": "FunctionCall",
                        "src": "1026:46:40"
                      }
                    ],
                    "id": 10764,
                    "name": "Return",
                    "src": "1019:53:40"
                  }
                ],
                "id": 10765,
                "name": "Block",
                "src": "1009:70:40"
              }
            ],
            "id": 10766,
            "name": "FunctionDefinition",
            "src": "933:146:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setFactories",
              "scope": 10816,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_keepStakedFactory",
                      "scope": 10784,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 10767,
                        "name": "ElementaryTypeName",
                        "src": "1116:7:40"
                      }
                    ],
                    "id": 10768,
                    "name": "VariableDeclaration",
                    "src": "1116:26:40"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_fullyBackedFactory",
                      "scope": 10784,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 10769,
                        "name": "ElementaryTypeName",
                        "src": "1152:7:40"
                      }
                    ],
                    "id": 10770,
                    "name": "VariableDeclaration",
                    "src": "1152:27:40"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_factorySelector",
                      "scope": 10784,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 10771,
                        "name": "ElementaryTypeName",
                        "src": "1189:7:40"
                      }
                    ],
                    "id": 10772,
                    "name": "VariableDeclaration",
                    "src": "1189:24:40"
                  }
                ],
                "id": 10773,
                "name": "ParameterList",
                "src": "1106:113:40"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10774,
                "name": "ParameterList",
                "src": "1227:0:40"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "setFactories",
                              "referencedDeclaration": 6574,
                              "type": "function (struct KeepFactorySelection.Storage storage pointer,address,address,address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10716,
                                  "type": "struct KeepFactorySelection.Storage storage ref",
                                  "value": "keepFactorySelection"
                                },
                                "id": 10775,
                                "name": "Identifier",
                                "src": "1237:20:40"
                              }
                            ],
                            "id": 10777,
                            "name": "MemberAccess",
                            "src": "1237:33:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10768,
                              "type": "address",
                              "value": "_keepStakedFactory"
                            },
                            "id": 10778,
                            "name": "Identifier",
                            "src": "1284:18:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10770,
                              "type": "address",
                              "value": "_fullyBackedFactory"
                            },
                            "id": 10779,
                            "name": "Identifier",
                            "src": "1316:19:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10772,
                              "type": "address",
                              "value": "_factorySelector"
                            },
                            "id": 10780,
                            "name": "Identifier",
                            "src": "1349:16:40"
                          }
                        ],
                        "id": 10781,
                        "name": "FunctionCall",
                        "src": "1237:138:40"
                      }
                    ],
                    "id": 10782,
                    "name": "ExpressionStatement",
                    "src": "1237:138:40"
                  }
                ],
                "id": 10783,
                "name": "Block",
                "src": "1227:155:40"
              }
            ],
            "id": 10784,
            "name": "FunctionDefinition",
            "src": "1085:297:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "factories",
              "scope": 10816,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10785,
                "name": "ParameterList",
                "src": "1406:2:40"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_keepStakedFactory",
                      "scope": 10815,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 10786,
                        "name": "ElementaryTypeName",
                        "src": "1467:7:40"
                      }
                    ],
                    "id": 10787,
                    "name": "VariableDeclaration",
                    "src": "1467:26:40"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_fullyBackedFactory",
                      "scope": 10815,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 10788,
                        "name": "ElementaryTypeName",
                        "src": "1507:7:40"
                      }
                    ],
                    "id": 10789,
                    "name": "VariableDeclaration",
                    "src": "1507:27:40"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_factorySelector",
                      "scope": 10815,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 10790,
                        "name": "ElementaryTypeName",
                        "src": "1548:7:40"
                      }
                    ],
                    "id": 10791,
                    "name": "VariableDeclaration",
                    "src": "1548:24:40"
                  }
                ],
                "id": 10792,
                "name": "ParameterList",
                "src": "1453:129:40"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10787,
                              "type": "address",
                              "value": "_keepStakedFactory"
                            },
                            "id": 10793,
                            "name": "Identifier",
                            "src": "1597:18:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                                      "typeString": "contract IBondedECDSAKeepFactory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 10794,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1618:7:40"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "keepStakedFactory",
                                  "referencedDeclaration": 6324,
                                  "type": "contract IBondedECDSAKeepFactory"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 10716,
                                      "type": "struct KeepFactorySelection.Storage storage ref",
                                      "value": "keepFactorySelection"
                                    },
                                    "id": 10795,
                                    "name": "Identifier",
                                    "src": "1626:20:40"
                                  }
                                ],
                                "id": 10796,
                                "name": "MemberAccess",
                                "src": "1626:38:40"
                              }
                            ],
                            "id": 10797,
                            "name": "FunctionCall",
                            "src": "1618:47:40"
                          }
                        ],
                        "id": 10798,
                        "name": "Assignment",
                        "src": "1597:68:40"
                      }
                    ],
                    "id": 10799,
                    "name": "ExpressionStatement",
                    "src": "1597:68:40"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10789,
                              "type": "address",
                              "value": "_fullyBackedFactory"
                            },
                            "id": 10800,
                            "name": "Identifier",
                            "src": "1675:19:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_IBondedECDSAKeepFactory_$11467",
                                      "typeString": "contract IBondedECDSAKeepFactory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 10801,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1697:7:40"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "fullyBackedFactory",
                                  "referencedDeclaration": 6326,
                                  "type": "contract IBondedECDSAKeepFactory"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 10716,
                                      "type": "struct KeepFactorySelection.Storage storage ref",
                                      "value": "keepFactorySelection"
                                    },
                                    "id": 10802,
                                    "name": "Identifier",
                                    "src": "1705:20:40"
                                  }
                                ],
                                "id": 10803,
                                "name": "MemberAccess",
                                "src": "1705:39:40"
                              }
                            ],
                            "id": 10804,
                            "name": "FunctionCall",
                            "src": "1697:48:40"
                          }
                        ],
                        "id": 10805,
                        "name": "Assignment",
                        "src": "1675:70:40"
                      }
                    ],
                    "id": 10806,
                    "name": "ExpressionStatement",
                    "src": "1675:70:40"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10791,
                              "type": "address",
                              "value": "_factorySelector"
                            },
                            "id": 10807,
                            "name": "Identifier",
                            "src": "1755:16:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_KeepFactorySelector_$6316",
                                      "typeString": "contract KeepFactorySelector"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 10808,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1774:7:40"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "factorySelector",
                                  "referencedDeclaration": 6322,
                                  "type": "contract KeepFactorySelector"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 10716,
                                      "type": "struct KeepFactorySelection.Storage storage ref",
                                      "value": "keepFactorySelection"
                                    },
                                    "id": 10809,
                                    "name": "Identifier",
                                    "src": "1782:20:40"
                                  }
                                ],
                                "id": 10810,
                                "name": "MemberAccess",
                                "src": "1782:36:40"
                              }
                            ],
                            "id": 10811,
                            "name": "FunctionCall",
                            "src": "1774:45:40"
                          }
                        ],
                        "id": 10812,
                        "name": "Assignment",
                        "src": "1755:64:40"
                      }
                    ],
                    "id": 10813,
                    "name": "ExpressionStatement",
                    "src": "1755:64:40"
                  }
                ],
                "id": 10814,
                "name": "Block",
                "src": "1587:239:40"
              }
            ],
            "id": 10815,
            "name": "FunctionDefinition",
            "src": "1388:438:40"
          }
        ],
        "id": 10816,
        "name": "ContractDefinition",
        "src": "183:1645:40"
      },
      {
        "attributes": {
          "contractDependencies": [
            6316
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            10884,
            6316
          ],
          "name": "KeepFactorySelectorStub",
          "scope": 10885
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "KeepFactorySelector",
                  "referencedDeclaration": 6316,
                  "type": "contract KeepFactorySelector"
                },
                "id": 10817,
                "name": "UserDefinedTypeName",
                "src": "1866:19:40"
              }
            ],
            "id": 10818,
            "name": "InheritanceSpecifier",
            "src": "1866:19:40"
          },
          {
            "attributes": {
              "constant": false,
              "name": "defaultMode",
              "scope": 10884,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bool",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "bool",
                  "type": "bool"
                },
                "id": 10819,
                "name": "ElementaryTypeName",
                "src": "1893:4:40"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "74727565",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "bool",
                  "type": "bool",
                  "value": "true"
                },
                "id": 10820,
                "name": "Literal",
                "src": "1921:4:40"
              }
            ],
            "id": 10821,
            "name": "VariableDeclaration",
            "src": "1893:32:40"
          },
          {
            "attributes": {
              "constant": false,
              "name": "maliciousMode",
              "scope": 10884,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bool",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "bool",
                  "type": "bool"
                },
                "id": 10822,
                "name": "ElementaryTypeName",
                "src": "1931:4:40"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "66616c7365",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "bool",
                  "type": "bool",
                  "value": "false"
                },
                "id": 10823,
                "name": "Literal",
                "src": "1961:5:40"
              }
            ],
            "id": 10824,
            "name": "VariableDeclaration",
            "src": "1931:35:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "selectFactory",
              "scope": 10884,
              "stateMutability": "view",
              "superFunction": 6315,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 10851,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 10825,
                        "name": "ElementaryTypeName",
                        "src": "2005:7:40"
                      }
                    ],
                    "id": 10826,
                    "name": "VariableDeclaration",
                    "src": "2005:7:40"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_defaultFactory",
                      "scope": 10851,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IBondedECDSAKeepFactory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IBondedECDSAKeepFactory",
                          "referencedDeclaration": 11467,
                          "type": "contract IBondedECDSAKeepFactory"
                        },
                        "id": 10827,
                        "name": "UserDefinedTypeName",
                        "src": "2022:23:40"
                      }
                    ],
                    "id": 10828,
                    "name": "VariableDeclaration",
                    "src": "2022:39:40"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_fullyBackedFactory",
                      "scope": 10851,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IBondedECDSAKeepFactory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IBondedECDSAKeepFactory",
                          "referencedDeclaration": 11467,
                          "type": "contract IBondedECDSAKeepFactory"
                        },
                        "id": 10829,
                        "name": "UserDefinedTypeName",
                        "src": "2071:23:40"
                      }
                    ],
                    "id": 10830,
                    "name": "VariableDeclaration",
                    "src": "2071:43:40"
                  }
                ],
                "id": 10831,
                "name": "ParameterList",
                "src": "1995:125:40"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 10851,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IBondedECDSAKeepFactory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IBondedECDSAKeepFactory",
                          "referencedDeclaration": 11467,
                          "type": "contract IBondedECDSAKeepFactory"
                        },
                        "id": 10832,
                        "name": "UserDefinedTypeName",
                        "src": "2144:23:40"
                      }
                    ],
                    "id": 10833,
                    "name": "VariableDeclaration",
                    "src": "2144:23:40"
                  }
                ],
                "id": 10834,
                "name": "ParameterList",
                "src": "2143:25:40"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 10824,
                          "type": "bool",
                          "value": "maliciousMode"
                        },
                        "id": 10835,
                        "name": "Identifier",
                        "src": "2183:13:40"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 10834
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "contract IBondedECDSAKeepFactory",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 11467,
                                      "type": "type(contract IBondedECDSAKeepFactory)",
                                      "value": "IBondedECDSAKeepFactory"
                                    },
                                    "id": 10836,
                                    "name": "Identifier",
                                    "src": "2219:23:40"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "307861466163456261646641636543666665654661636561636562616345416641636543664645654130",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "address payable",
                                      "value": "0xaFacEbadfAceCffeeFaceacebacEAfAceCfFEeA0"
                                    },
                                    "id": 10837,
                                    "name": "Literal",
                                    "src": "2243:42:40"
                                  }
                                ],
                                "id": 10838,
                                "name": "FunctionCall",
                                "src": "2219:67:40"
                              }
                            ],
                            "id": 10839,
                            "name": "Return",
                            "src": "2212:74:40"
                          }
                        ],
                        "id": 10840,
                        "name": "Block",
                        "src": "2198:99:40"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10821,
                              "type": "bool",
                              "value": "defaultMode"
                            },
                            "id": 10841,
                            "name": "Identifier",
                            "src": "2307:11:40"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "functionReturnParameters": 10834
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 10828,
                                      "type": "contract IBondedECDSAKeepFactory",
                                      "value": "_defaultFactory"
                                    },
                                    "id": 10842,
                                    "name": "Identifier",
                                    "src": "2341:15:40"
                                  }
                                ],
                                "id": 10843,
                                "name": "Return",
                                "src": "2334:22:40"
                              }
                            ],
                            "id": 10844,
                            "name": "Block",
                            "src": "2320:47:40"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "functionReturnParameters": 10834
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 10830,
                                      "type": "contract IBondedECDSAKeepFactory",
                                      "value": "_fullyBackedFactory"
                                    },
                                    "id": 10845,
                                    "name": "Identifier",
                                    "src": "2394:19:40"
                                  }
                                ],
                                "id": 10846,
                                "name": "Return",
                                "src": "2387:26:40"
                              }
                            ],
                            "id": 10847,
                            "name": "Block",
                            "src": "2373:51:40"
                          }
                        ],
                        "id": 10848,
                        "name": "IfStatement",
                        "src": "2303:121:40"
                      }
                    ],
                    "id": 10849,
                    "name": "IfStatement",
                    "src": "2179:245:40"
                  }
                ],
                "id": 10850,
                "name": "Block",
                "src": "2169:261:40"
              }
            ],
            "id": 10851,
            "name": "FunctionDefinition",
            "src": "1973:457:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setMaliciousMode",
              "scope": 10884,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10852,
                "name": "ParameterList",
                "src": "2461:2:40"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10853,
                "name": "ParameterList",
                "src": "2471:0:40"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10824,
                              "type": "bool",
                              "value": "maliciousMode"
                            },
                            "id": 10854,
                            "name": "Identifier",
                            "src": "2481:13:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 10855,
                            "name": "Literal",
                            "src": "2497:4:40"
                          }
                        ],
                        "id": 10856,
                        "name": "Assignment",
                        "src": "2481:20:40"
                      }
                    ],
                    "id": 10857,
                    "name": "ExpressionStatement",
                    "src": "2481:20:40"
                  }
                ],
                "id": 10858,
                "name": "Block",
                "src": "2471:37:40"
              }
            ],
            "id": 10859,
            "name": "FunctionDefinition",
            "src": "2436:72:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "unsetMaliciousMode",
              "scope": 10884,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10860,
                "name": "ParameterList",
                "src": "2541:2:40"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10861,
                "name": "ParameterList",
                "src": "2551:0:40"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10824,
                              "type": "bool",
                              "value": "maliciousMode"
                            },
                            "id": 10862,
                            "name": "Identifier",
                            "src": "2561:13:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "66616c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "false"
                            },
                            "id": 10863,
                            "name": "Literal",
                            "src": "2577:5:40"
                          }
                        ],
                        "id": 10864,
                        "name": "Assignment",
                        "src": "2561:21:40"
                      }
                    ],
                    "id": 10865,
                    "name": "ExpressionStatement",
                    "src": "2561:21:40"
                  }
                ],
                "id": 10866,
                "name": "Block",
                "src": "2551:38:40"
              }
            ],
            "id": 10867,
            "name": "FunctionDefinition",
            "src": "2514:75:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setDefaultMode",
              "scope": 10884,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10868,
                "name": "ParameterList",
                "src": "2618:2:40"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10869,
                "name": "ParameterList",
                "src": "2628:0:40"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10821,
                              "type": "bool",
                              "value": "defaultMode"
                            },
                            "id": 10870,
                            "name": "Identifier",
                            "src": "2638:11:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 10871,
                            "name": "Literal",
                            "src": "2652:4:40"
                          }
                        ],
                        "id": 10872,
                        "name": "Assignment",
                        "src": "2638:18:40"
                      }
                    ],
                    "id": 10873,
                    "name": "ExpressionStatement",
                    "src": "2638:18:40"
                  }
                ],
                "id": 10874,
                "name": "Block",
                "src": "2628:35:40"
              }
            ],
            "id": 10875,
            "name": "FunctionDefinition",
            "src": "2595:68:40"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setFullyBackedMode",
              "scope": 10884,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10876,
                "name": "ParameterList",
                "src": "2696:2:40"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10877,
                "name": "ParameterList",
                "src": "2706:0:40"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10821,
                              "type": "bool",
                              "value": "defaultMode"
                            },
                            "id": 10878,
                            "name": "Identifier",
                            "src": "2716:11:40"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "66616c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "false"
                            },
                            "id": 10879,
                            "name": "Literal",
                            "src": "2730:5:40"
                          }
                        ],
                        "id": 10880,
                        "name": "Assignment",
                        "src": "2716:19:40"
                      }
                    ],
                    "id": 10881,
                    "name": "ExpressionStatement",
                    "src": "2716:19:40"
                  }
                ],
                "id": 10882,
                "name": "Block",
                "src": "2706:36:40"
              }
            ],
            "id": 10883,
            "name": "FunctionDefinition",
            "src": "2669:73:40"
          }
        ],
        "id": 10884,
        "name": "ContractDefinition",
        "src": "1830:914:40"
      }
    ],
    "id": 10885,
    "name": "SourceUnit",
    "src": "0:2745:40"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T11:52:09.365Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}