{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "claimer",
          "type": "address"
        }
      ],
      "name": "ClaimerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RewardsAccrued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RewardsClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "claimer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RewardsClaimed",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DISTRIBUTION_END",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PRECISION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REWARD_TOKEN",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "claimRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "claimRewardsOnBehalf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "emissionsPerSecond",
          "type": "uint256[]"
        }
      ],
      "name": "configureAssets",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getAssetData",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getClaimer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getRewardsBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getUserAssetData",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getUserUnclaimedRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "userBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalSupply",
          "type": "uint256"
        }
      ],
      "name": "handleAction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "claimer",
          "type": "address"
        }
      ],
      "name": "setClaimer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "44": "node_modules/@aave/protocol-v2/contracts/interfaces/IAaveIncentivesController.sol"
  },
  "ast": {
    "absolutePath": "node_modules/@aave/protocol-v2/contracts/interfaces/IAaveIncentivesController.sol",
    "exportedSymbols": {
      "IAaveIncentivesController": [
        22724
      ]
    },
    "id": 22725,
    "license": "agpl-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 22570,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "37:23:44"
      },
      {
        "id": 22571,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "61:33:44"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 22724,
        "linearizedBaseContracts": [
          22724
        ],
        "name": "IAaveIncentivesController",
        "nameLocation": "106:25:44",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "id": 22577,
            "name": "RewardsAccrued",
            "nameLocation": "142:14:44",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 22576,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22573,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "173:4:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22577,
                  "src": "157:20:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22572,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "157:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22575,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "187:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22577,
                  "src": "179:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22574,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "179:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "156:38:44"
            },
            "src": "136:59:44"
          },
          {
            "anonymous": false,
            "id": 22585,
            "name": "RewardsClaimed",
            "nameLocation": "205:14:44",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 22584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22579,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "236:4:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22585,
                  "src": "220:20:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22578,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "220:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22581,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "258:2:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22585,
                  "src": "242:18:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22580,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "242:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22583,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "270:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22585,
                  "src": "262:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22582,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "262:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "219:58:44"
            },
            "src": "199:79:44"
          },
          {
            "anonymous": false,
            "id": 22595,
            "name": "RewardsClaimed",
            "nameLocation": "288:14:44",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 22594,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22587,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "324:4:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22595,
                  "src": "308:20:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22586,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "308:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22589,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "350:2:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22595,
                  "src": "334:18:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22588,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "334:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22591,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "claimer",
                  "nameLocation": "374:7:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22595,
                  "src": "358:23:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22590,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "358:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22593,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "395:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22595,
                  "src": "387:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22592,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "387:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "302:103:44"
            },
            "src": "282:124:44"
          },
          {
            "anonymous": false,
            "id": 22601,
            "name": "ClaimerSet",
            "nameLocation": "416:10:44",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 22600,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22597,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "443:4:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22601,
                  "src": "427:20:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "427:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22599,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "claimer",
                  "nameLocation": "465:7:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22601,
                  "src": "449:23:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22598,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "449:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "426:47:44"
            },
            "src": "410:64:44"
          },
          {
            "functionSelector": "1652e7b7",
            "id": 22612,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAssetData",
            "nameLocation": "733:12:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22604,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22603,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "754:5:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22612,
                  "src": "746:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22602,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "746:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "745:15:44"
            },
            "returnParameters": {
              "id": 22611,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22606,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22612,
                  "src": "803:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22605,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "803:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22608,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22612,
                  "src": "818:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22607,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "818:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22610,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22612,
                  "src": "833:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22609,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "833:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "795:51:44"
            },
            "scope": 22724,
            "src": "724:123:44",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22613,
              "nodeType": "StructuredDocumentation",
              "src": "851:179:44",
              "text": " @dev Whitelists an address to claim the rewards on behalf of another address\n @param user The address of the user\n @param claimer The address of the claimer"
            },
            "functionSelector": "f5cf673b",
            "id": 22620,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setClaimer",
            "nameLocation": "1042:10:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22618,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22615,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "1061:4:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22620,
                  "src": "1053:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22614,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1053:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22617,
                  "mutability": "mutable",
                  "name": "claimer",
                  "nameLocation": "1075:7:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22620,
                  "src": "1067:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22616,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1067:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1052:31:44"
            },
            "returnParameters": {
              "id": 22619,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1092:0:44"
            },
            "scope": 22724,
            "src": "1033:60:44",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22621,
              "nodeType": "StructuredDocumentation",
              "src": "1097:164:44",
              "text": " @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\n @param user The address of the user\n @return The claimer address"
            },
            "functionSelector": "74d945ec",
            "id": 22628,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getClaimer",
            "nameLocation": "1273:10:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22624,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22623,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "1292:4:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22628,
                  "src": "1284:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22622,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1284:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1283:14:44"
            },
            "returnParameters": {
              "id": 22627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22626,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22628,
                  "src": "1321:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22625,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1321:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1320:9:44"
            },
            "scope": 22724,
            "src": "1264:66:44",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22629,
              "nodeType": "StructuredDocumentation",
              "src": "1334:171:44",
              "text": " @dev Configure assets for a certain rewards emission\n @param assets The assets to incentivize\n @param emissionsPerSecond The emission for each asset"
            },
            "functionSelector": "79f171b2",
            "id": 22638,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "configureAssets",
            "nameLocation": "1517:15:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22636,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22632,
                  "mutability": "mutable",
                  "name": "assets",
                  "nameLocation": "1552:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22638,
                  "src": "1533:25:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 22630,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1533:7:44",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 22631,
                    "nodeType": "ArrayTypeName",
                    "src": "1533:9:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22635,
                  "mutability": "mutable",
                  "name": "emissionsPerSecond",
                  "nameLocation": "1579:18:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22638,
                  "src": "1560:37:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 22633,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1560:7:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 22634,
                    "nodeType": "ArrayTypeName",
                    "src": "1560:9:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1532:66:44"
            },
            "returnParameters": {
              "id": 22637,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1611:0:44"
            },
            "scope": 22724,
            "src": "1508:104:44",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22639,
              "nodeType": "StructuredDocumentation",
              "src": "1616:303:44",
              "text": " @dev Called by the corresponding asset on any update that affects the rewards distribution\n @param asset The address of the user\n @param userBalance The balance of the user of the asset in the lending pool\n @param totalSupply The total supply of the asset in the lending pool*"
            },
            "functionSelector": "31873e2e",
            "id": 22648,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "handleAction",
            "nameLocation": "1931:12:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22641,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "1957:5:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22648,
                  "src": "1949:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22640,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1949:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22643,
                  "mutability": "mutable",
                  "name": "userBalance",
                  "nameLocation": "1976:11:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22648,
                  "src": "1968:19:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22642,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1968:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22645,
                  "mutability": "mutable",
                  "name": "totalSupply",
                  "nameLocation": "2001:11:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22648,
                  "src": "1993:19:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22644,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1993:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1943:73:44"
            },
            "returnParameters": {
              "id": 22647,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2025:0:44"
            },
            "scope": 22724,
            "src": "1922:104:44",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22649,
              "nodeType": "StructuredDocumentation",
              "src": "2030:161:44",
              "text": " @dev Returns the total of rewards of an user, already accrued + not yet accrued\n @param user The address of the user\n @return The rewards*"
            },
            "functionSelector": "8b599f26",
            "id": 22659,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getRewardsBalance",
            "nameLocation": "2203:17:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22655,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22652,
                  "mutability": "mutable",
                  "name": "assets",
                  "nameLocation": "2240:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22659,
                  "src": "2221:25:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 22650,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2221:7:44",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 22651,
                    "nodeType": "ArrayTypeName",
                    "src": "2221:9:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22654,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "2256:4:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22659,
                  "src": "2248:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22653,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2248:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2220:41:44"
            },
            "returnParameters": {
              "id": 22658,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22657,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22659,
                  "src": "2297:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22656,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2297:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2296:9:44"
            },
            "scope": 22724,
            "src": "2194:112:44",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22660,
              "nodeType": "StructuredDocumentation",
              "src": "2310:252:44",
              "text": " @dev Claims reward for an user, on all the assets of the lending pool, accumulating the pending rewards\n @param amount Amount of rewards to claim\n @param to Address that will be receiving the rewards\n @return Rewards claimed*"
            },
            "functionSelector": "3111e7b3",
            "id": 22672,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "claimRewards",
            "nameLocation": "2574:12:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22663,
                  "mutability": "mutable",
                  "name": "assets",
                  "nameLocation": "2611:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22672,
                  "src": "2592:25:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 22661,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2592:7:44",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 22662,
                    "nodeType": "ArrayTypeName",
                    "src": "2592:9:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22665,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2631:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22672,
                  "src": "2623:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22664,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2623:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22667,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2651:2:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22672,
                  "src": "2643:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22666,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2643:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2586:71:44"
            },
            "returnParameters": {
              "id": 22671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22670,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22672,
                  "src": "2676:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22669,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2676:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2675:9:44"
            },
            "scope": 22724,
            "src": "2565:120:44",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22673,
              "nodeType": "StructuredDocumentation",
              "src": "2689:418:44",
              "text": " @dev Claims reward for an user on behalf, on all the assets of the lending pool, accumulating the pending rewards. The caller must\n be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager\n @param amount Amount of rewards to claim\n @param user Address to check and claim rewards\n @param to Address that will be receiving the rewards\n @return Rewards claimed*"
            },
            "functionSelector": "6d34b96e",
            "id": 22687,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "claimRewardsOnBehalf",
            "nameLocation": "3119:20:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22676,
                  "mutability": "mutable",
                  "name": "assets",
                  "nameLocation": "3164:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22687,
                  "src": "3145:25:44",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 22674,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3145:7:44",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 22675,
                    "nodeType": "ArrayTypeName",
                    "src": "3145:9:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22678,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3184:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22687,
                  "src": "3176:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22677,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3176:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22680,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "3204:4:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22687,
                  "src": "3196:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22679,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3196:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22682,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3222:2:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22687,
                  "src": "3214:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22681,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3214:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3139:89:44"
            },
            "returnParameters": {
              "id": 22686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22685,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22687,
                  "src": "3247:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22684,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3247:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3246:9:44"
            },
            "scope": 22724,
            "src": "3110:146:44",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22688,
              "nodeType": "StructuredDocumentation",
              "src": "3260:142:44",
              "text": " @dev returns the unclaimed rewards of the user\n @param user the address of the user\n @return the unclaimed user rewards"
            },
            "functionSelector": "198fa81e",
            "id": 22695,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getUserUnclaimedRewards",
            "nameLocation": "3414:23:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22691,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22690,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "3446:4:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22695,
                  "src": "3438:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22689,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3438:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3437:14:44"
            },
            "returnParameters": {
              "id": 22694,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22693,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22695,
                  "src": "3475:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22692,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3475:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3474:9:44"
            },
            "scope": 22724,
            "src": "3405:79:44",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22696,
              "nodeType": "StructuredDocumentation",
              "src": "3488:187:44",
              "text": " @dev returns the unclaimed rewards of the user\n @param user the address of the user\n @param asset The asset to incentivize\n @return the user index for the asset"
            },
            "functionSelector": "3373ee4c",
            "id": 22705,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getUserAssetData",
            "nameLocation": "3687:16:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22698,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "3712:4:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22705,
                  "src": "3704:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3704:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22700,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "3726:5:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 22705,
                  "src": "3718:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22699,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3718:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3703:29:44"
            },
            "returnParameters": {
              "id": 22704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22703,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22705,
                  "src": "3756:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22702,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3756:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3755:9:44"
            },
            "scope": 22724,
            "src": "3678:87:44",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22706,
              "nodeType": "StructuredDocumentation",
              "src": "3769:104:44",
              "text": " @dev for backward compatibility with previous implementation of the Incentives controller"
            },
            "functionSelector": "99248ea7",
            "id": 22711,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "REWARD_TOKEN",
            "nameLocation": "3885:12:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22707,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3897:2:44"
            },
            "returnParameters": {
              "id": 22710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22709,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22711,
                  "src": "3923:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22708,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3923:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3922:9:44"
            },
            "scope": 22724,
            "src": "3876:56:44",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22712,
              "nodeType": "StructuredDocumentation",
              "src": "3936:104:44",
              "text": " @dev for backward compatibility with previous implementation of the Incentives controller"
            },
            "functionSelector": "aaf5eb68",
            "id": 22717,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "PRECISION",
            "nameLocation": "4052:9:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22713,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4061:2:44"
            },
            "returnParameters": {
              "id": 22716,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22715,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22717,
                  "src": "4087:5:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 22714,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4087:5:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4086:7:44"
            },
            "scope": 22724,
            "src": "4043:51:44",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 22718,
              "nodeType": "StructuredDocumentation",
              "src": "4098:72:44",
              "text": " @dev Gets the distribution end timestamp of the emissions"
            },
            "functionSelector": "919cd40f",
            "id": 22723,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "DISTRIBUTION_END",
            "nameLocation": "4182:16:44",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22719,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4198:2:44"
            },
            "returnParameters": {
              "id": 22722,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22721,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 22723,
                  "src": "4224:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22720,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4224:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4223:9:44"
            },
            "scope": 22724,
            "src": "4173:60:44",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 22725,
        "src": "96:4139:44",
        "usedErrors": []
      }
    ],
    "src": "37:4199:44"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.6+commit.11564f7e"
  },
  "contractName": "IAaveIncentivesController",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [],
  "deployedBytecode": "",
  "deployedSourceMap": "",
  "language": "Solidity",
  "natspec": {
    "kind": "dev",
    "methods": {
      "DISTRIBUTION_END()": {
        "details": "Gets the distribution end timestamp of the emissions"
      },
      "PRECISION()": {
        "details": "for backward compatibility with previous implementation of the Incentives controller"
      },
      "REWARD_TOKEN()": {
        "details": "for backward compatibility with previous implementation of the Incentives controller"
      },
      "claimRewards(address[],uint256,address)": {
        "details": "Claims reward for an user, on all the assets of the lending pool, accumulating the pending rewards",
        "params": {
          "amount": "Amount of rewards to claim",
          "to": "Address that will be receiving the rewards"
        },
        "returns": {
          "_0": "Rewards claimed*"
        }
      },
      "claimRewardsOnBehalf(address[],uint256,address,address)": {
        "details": "Claims reward for an user on behalf, on all the assets of the lending pool, accumulating the pending rewards. The caller must be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager",
        "params": {
          "amount": "Amount of rewards to claim",
          "to": "Address that will be receiving the rewards",
          "user": "Address to check and claim rewards"
        },
        "returns": {
          "_0": "Rewards claimed*"
        }
      },
      "configureAssets(address[],uint256[])": {
        "details": "Configure assets for a certain rewards emission",
        "params": {
          "assets": "The assets to incentivize",
          "emissionsPerSecond": "The emission for each asset"
        }
      },
      "getClaimer(address)": {
        "details": "Returns the whitelisted claimer for a certain address (0x0 if not set)",
        "params": {
          "user": "The address of the user"
        },
        "returns": {
          "_0": "The claimer address"
        }
      },
      "getRewardsBalance(address[],address)": {
        "details": "Returns the total of rewards of an user, already accrued + not yet accrued",
        "params": {
          "user": "The address of the user"
        },
        "returns": {
          "_0": "The rewards*"
        }
      },
      "getUserAssetData(address,address)": {
        "details": "returns the unclaimed rewards of the user",
        "params": {
          "asset": "The asset to incentivize",
          "user": "the address of the user"
        },
        "returns": {
          "_0": "the user index for the asset"
        }
      },
      "getUserUnclaimedRewards(address)": {
        "details": "returns the unclaimed rewards of the user",
        "params": {
          "user": "the address of the user"
        },
        "returns": {
          "_0": "the unclaimed user rewards"
        }
      },
      "handleAction(address,uint256,uint256)": {
        "details": "Called by the corresponding asset on any update that affects the rewards distribution",
        "params": {
          "asset": "The address of the user",
          "totalSupply": "The total supply of the asset in the lending pool*",
          "userBalance": "The balance of the user of the asset in the lending pool"
        }
      },
      "setClaimer(address,address)": {
        "details": "Whitelists an address to claim the rewards on behalf of another address",
        "params": {
          "claimer": "The address of the claimer",
          "user": "The address of the user"
        }
      }
    },
    "version": 1
  },
  "offset": [
    96,
    4235
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "05fa9478fb4cb643241e1a9e4e2b964b529fc616",
  "source": "// SPDX-License-Identifier: agpl-3.0\npragma solidity ^0.8.0;\npragma experimental ABIEncoderV2;\n\ninterface IAaveIncentivesController {\n  event RewardsAccrued(address indexed user, uint256 amount);\n\n  event RewardsClaimed(address indexed user, address indexed to, uint256 amount);\n\n  event RewardsClaimed(\n    address indexed user,\n    address indexed to,\n    address indexed claimer,\n    uint256 amount\n  );\n\n  event ClaimerSet(address indexed user, address indexed claimer);\n\n  /*\n   * @dev Returns the configuration of the distribution for a certain asset\n   * @param asset The address of the reference asset of the distribution\n   * @return The asset index, the emission per second and the last updated timestamp\n   **/\n  function getAssetData(address asset)\n    external\n    view\n    returns (\n      uint256,\n      uint256,\n      uint256\n    );\n\n  /**\n   * @dev Whitelists an address to claim the rewards on behalf of another address\n   * @param user The address of the user\n   * @param claimer The address of the claimer\n   */\n  function setClaimer(address user, address claimer) external;\n\n  /**\n   * @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\n   * @param user The address of the user\n   * @return The claimer address\n   */\n  function getClaimer(address user) external view returns (address);\n\n  /**\n   * @dev Configure assets for a certain rewards emission\n   * @param assets The assets to incentivize\n   * @param emissionsPerSecond The emission for each asset\n   */\n  function configureAssets(address[] calldata assets, uint256[] calldata emissionsPerSecond)\n    external;\n\n  /**\n   * @dev Called by the corresponding asset on any update that affects the rewards distribution\n   * @param asset The address of the user\n   * @param userBalance The balance of the user of the asset in the lending pool\n   * @param totalSupply The total supply of the asset in the lending pool\n   **/\n  function handleAction(\n    address asset,\n    uint256 userBalance,\n    uint256 totalSupply\n  ) external;\n\n  /**\n   * @dev Returns the total of rewards of an user, already accrued + not yet accrued\n   * @param user The address of the user\n   * @return The rewards\n   **/\n  function getRewardsBalance(address[] calldata assets, address user)\n    external\n    view\n    returns (uint256);\n\n  /**\n   * @dev Claims reward for an user, on all the assets of the lending pool, accumulating the pending rewards\n   * @param amount Amount of rewards to claim\n   * @param to Address that will be receiving the rewards\n   * @return Rewards claimed\n   **/\n  function claimRewards(\n    address[] calldata assets,\n    uint256 amount,\n    address to\n  ) external returns (uint256);\n\n  /**\n   * @dev Claims reward for an user on behalf, on all the assets of the lending pool, accumulating the pending rewards. The caller must\n   * be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager\n   * @param amount Amount of rewards to claim\n   * @param user Address to check and claim rewards\n   * @param to Address that will be receiving the rewards\n   * @return Rewards claimed\n   **/\n  function claimRewardsOnBehalf(\n    address[] calldata assets,\n    uint256 amount,\n    address user,\n    address to\n  ) external returns (uint256);\n\n  /**\n   * @dev returns the unclaimed rewards of the user\n   * @param user the address of the user\n   * @return the unclaimed user rewards\n   */\n  function getUserUnclaimedRewards(address user) external view returns (uint256);\n\n  /**\n   * @dev returns the unclaimed rewards of the user\n   * @param user the address of the user\n   * @param asset The asset to incentivize\n   * @return the user index for the asset\n   */\n  function getUserAssetData(address user, address asset) external view returns (uint256);\n\n  /**\n   * @dev for backward compatibility with previous implementation of the Incentives controller\n   */\n  function REWARD_TOKEN() external view returns (address);\n\n  /**\n   * @dev for backward compatibility with previous implementation of the Incentives controller\n   */\n  function PRECISION() external view returns (uint8);\n\n  /**\n   * @dev Gets the distribution end timestamp of the emissions\n   */\n  function DISTRIBUTION_END() external view returns (uint256);\n}\n",
  "sourceMap": "",
  "sourcePath": "node_modules/@aave/protocol-v2/contracts/interfaces/IAaveIncentivesController.sol",
  "type": "interface"
}