{
  "contractName": "AddressSet",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "self",
          "type": "AddressSet.SetData storage"
        },
        {
          "name": "a",
          "type": "address"
        }
      ],
      "name": "indexOf",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "self",
          "type": "AddressSet.SetData storage"
        },
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getAt",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "self",
          "type": "AddressSet.SetData storage"
        },
        {
          "name": "a",
          "type": "address"
        }
      ],
      "name": "contains",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "self",
          "type": "AddressSet.SetData storage"
        }
      ],
      "name": "size",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "self",
          "type": "AddressSet.SetData storage"
        },
        {
          "name": "a",
          "type": "address"
        }
      ],
      "name": "remove",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "self",
          "type": "AddressSet.SetData storage"
        },
        {
          "name": "a",
          "type": "address"
        }
      ],
      "name": "put",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6060604052341561000f57600080fd5b6103ff8061001e6000396000f3006060604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166318c40249811461007c5780635c2125a7146100a5578063758241e0146100cf578063913aa6cd146100fa578063e134066a14610105578063f9802f851461011e575b600080fd5b610093600435600160a060020a0360243516610135565b60405190815260200160405180910390f35b6100b3600435602435610154565b604051600160a060020a03909116815260200160405180910390f35b6100e6600435600160a060020a0360243516610183565b604051901515815260200160405180910390f35b6100936004356101a2565b61011c600435600160a060020a03602435166101a9565b005b61011c600435600160a060020a03602435166102d4565b600160a060020a03166000908152600191909101602052604090205490565b6000826002018281548110151561016757fe5b600091825260209091200154600160a060020a03169392505050565b600160a060020a03166000908152602091909152604090205460ff1690565b6002015490565b600160a060020a038116600090815260208390526040812054819060ff16156102ce57600160a060020a0383166000908152600180860160205260409091205492506101f4856101a2565b0382101561028c5783600201600161020b866101a2565b0381548110151561021857fe5b600091825260209091200154600285018054600160a060020a03909216925082918490811061024357fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03948516179055918316815260018601909152604090208290555b600284018054906102a1906000198301610389565b50600160a060020a038316600090815260208581526040808320805460ff19169055600187019091528120555b50505050565b600160a060020a03811660009081526020839052604090205460ff16151561038557600160a060020a0381166000908152602083905260409020805460ff19166001908117909155600283018054909181016103308382610389565b506000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038516908117909155600285015490835260018501909152604090912060001990910190555b5050565b8154818355818115116103ad576000838152602090206103ad9181019083016103b2565b505050565b6103d091905b808211156103cc57600081556001016103b8565b5090565b905600a165627a7a72305820a0065dfdc78ddaa20c48875e0884f5e5c5644ea9deb37e6db9da9370d5a970f70029",
  "deployedBytecode": "0x6060604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166318c40249811461007c5780635c2125a7146100a5578063758241e0146100cf578063913aa6cd146100fa578063e134066a14610105578063f9802f851461011e575b600080fd5b610093600435600160a060020a0360243516610135565b60405190815260200160405180910390f35b6100b3600435602435610154565b604051600160a060020a03909116815260200160405180910390f35b6100e6600435600160a060020a0360243516610183565b604051901515815260200160405180910390f35b6100936004356101a2565b61011c600435600160a060020a03602435166101a9565b005b61011c600435600160a060020a03602435166102d4565b600160a060020a03166000908152600191909101602052604090205490565b6000826002018281548110151561016757fe5b600091825260209091200154600160a060020a03169392505050565b600160a060020a03166000908152602091909152604090205460ff1690565b6002015490565b600160a060020a038116600090815260208390526040812054819060ff16156102ce57600160a060020a0383166000908152600180860160205260409091205492506101f4856101a2565b0382101561028c5783600201600161020b866101a2565b0381548110151561021857fe5b600091825260209091200154600285018054600160a060020a03909216925082918490811061024357fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03948516179055918316815260018601909152604090208290555b600284018054906102a1906000198301610389565b50600160a060020a038316600090815260208581526040808320805460ff19169055600187019091528120555b50505050565b600160a060020a03811660009081526020839052604090205460ff16151561038557600160a060020a0381166000908152602083905260409020805460ff19166001908117909155600283018054909181016103308382610389565b506000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038516908117909155600285015490835260018501909152604090912060001990910190555b5050565b8154818355818115116103ad576000838152602090206103ad9181019083016103b2565b505050565b6103d091905b808211156103cc57600081556001016103b8565b5090565b905600a165627a7a72305820a0065dfdc78ddaa20c48875e0884f5e5c5644ea9deb37e6db9da9370d5a970f70029",
  "sourceMap": "1035:1521:12:-;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "1035:1521:12:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1210:126;;;;-1:-1:-1;;;;;1210:126:12;;;;;;;;;;;;;;;;;;;;1342:129;;;;;;;;;;;-1:-1:-1;;;;;1342:129:12;;;;;;;;;;;;;;1477:125;;;;-1:-1:-1;;;;;1477:125:12;;;;;;;;;;;;;;;;;;;;;;1608:113;;;;;;1971:583;;;;-1:-1:-1;;;;;1971:583:12;;;;;;;1727:238;;;;-1:-1:-1;;;;;1727:238:12;;;;;1210:126;-1:-1:-1;;;;;1311:18:12;1285:7;1311:18;;;:15;;;;;:18;;;;;;;1210:126::o;1342:129::-;1419:7;1445:4;:12;;1458:5;1445:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1445:19:12;;1342:129;-1:-1:-1;;;1342:129:12:o;1477:125::-;-1:-1:-1;;;;;1576:19:12;1553:4;1576:19;;;;;;;;;;;;;;;1477:125::o;1608:113::-;1695:12;;:19;;1608:113::o;1971:583::-;-1:-1:-1;;;;;2041:19:12;;2076:13;2041:19;;;;;;;;;;;2076:13;;2041:19;;2037:511;;;-1:-1:-1;;;;;2092:18:12;;;;;;:15;;;;:18;;;;;;;;-1:-1:-1;2200:10:12;2092:4;2200;:10::i;:::-;:14;2192:5;:22;2188:208;;;2254:4;:12;;2278:1;2267:10;2272:4;2267;:10::i;:::-;:12;2254:26;;;;;;;;;;;;;;;;;;;;2298:12;;;:19;;-1:-1:-1;;;;;2254:26:12;;;;-1:-1:-1;2254:26:12;;2311:5;;2298:19;;;;;;;;;;;;;;;;;;:31;;-1:-1:-1;;2298:31:12;-1:-1:-1;;;;;2298:31:12;;;;;;2347:26;;;;;-1:-1:-1;2347:15:12;;:26;;;;;;:34;;;2188:208;2437:12;;;:21;;;;;-1:-1:-1;;2437:21:12;;;:::i;:::-;-1:-1:-1;;;;;;2479:19:12;;:16;:19;;;;;;;;;;;2472:26;;-1:-1:-1;;2472:26:12;;;;2519:15;;:18;;;;;2512:25;2037:511;1971:583;;;;:::o;1727:238::-;-1:-1:-1;;;;;1795:19:12;;:16;:19;;;;;;;;;;;;;1794:20;1790:169;;;-1:-1:-1;;;;;1830:19:12;;:16;:19;;;;;;;;;;:26;;-1:-1:-1;;1830:26:12;1852:4;1830:26;;;;;;1870:12;;;:20;;:12;;:20;;;:12;:20;;:::i;:::-;-1:-1:-1;1870:20:12;;;;;;;;;;;;;;-1:-1:-1;;1870:20:12;-1:-1:-1;;;;;1870:20:12;;;;;;;;1925:12;;;:19;1904:18;;;-1:-1:-1;1904:15:12;;:18;;;;;;;-1:-1:-1;;1925:23:12;;;1904:44;;1790:169;1727:238;;:::o;1035:1521::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "// ------------------------------------------------------------------------------\n// This file is part of netvote.\n//\n// netvote is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// netvote is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with solidity.  If not, see <http://www.gnu.org/licenses/>\n//\n// (c) 2017 netvote contributors.\n//------------------------------------------------------------------------------\n\npragma solidity ^0.4.17;\n\n\n/**\n * @title AddressSet\n * @dev iterable map of addresses that modifies size upon removal\n * Note that the order changes upon removal.\n */\nlibrary AddressSet {\n\n    struct SetData {\n        mapping(address => bool) entryExists;\n        mapping(address => uint256) entryIndex;\n        address[] entries;\n    }\n\n    function indexOf(SetData storage self, address a) public constant returns (uint256) {\n        return self.entryIndex[a];\n    }\n\n    function getAt(SetData storage self, uint256 index) public constant returns (address) {\n        return self.entries[index];\n    }\n\n    function contains(SetData storage self, address a) public constant returns (bool) {\n        return self.entryExists[a];\n    }\n\n    function size(SetData storage self) public constant returns (uint256) {\n        return self.entries.length;\n    }\n\n    function put(SetData storage self, address a) public {\n        if (!self.entryExists[a]) {\n            self.entryExists[a] = true;\n            self.entries.push(a);\n            self.entryIndex[a] = self.entries.length - 1;\n        }\n    }\n\n    function remove(SetData storage self, address a) public {\n        if (self.entryExists[a]) {\n            uint256 index = self.entryIndex[a];\n            // if not last entry, copy last entry into a's slot\n            if (index < size(self) - 1) {\n                address lastEntry = self.entries[size(self)-1];\n                self.entries[index] = lastEntry;\n                self.entryIndex[lastEntry] = index;\n            }\n            // resize array\n            self.entries.length--;\n            delete self.entryExists[a];\n            delete self.entryIndex[a];\n        }\n    }\n}",
  "sourcePath": "/Users/slanders/netvote/elections-solidity/contracts/lib/AddressSet.sol",
  "ast": {
    "attributes": {
      "absolutePath": "/Users/slanders/netvote/elections-solidity/contracts/lib/AddressSet.sol",
      "exportedSymbols": {
        "AddressSet": [
          1733
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.4",
            ".17"
          ]
        },
        "id": 1544,
        "name": "PragmaDirective",
        "src": "868:24:12"
      },
      {
        "attributes": {
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "documentation": "@title AddressSet\n@dev iterable map of addresses that modifies size upon removal\nNote that the order changes upon removal.",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            1733
          ],
          "name": "AddressSet",
          "scope": 1734
        },
        "children": [
          {
            "attributes": {
              "canonicalName": "AddressSet.SetData",
              "name": "SetData",
              "scope": 1733,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "entryExists",
                  "scope": 1556,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "mapping(address => bool)",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "type": "mapping(address => bool)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1545,
                        "name": "ElementaryTypeName",
                        "src": "1094:7:12"
                      },
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1546,
                        "name": "ElementaryTypeName",
                        "src": "1105:4:12"
                      }
                    ],
                    "id": 1547,
                    "name": "Mapping",
                    "src": "1086:24:12"
                  }
                ],
                "id": 1548,
                "name": "VariableDeclaration",
                "src": "1086:36:12"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "entryIndex",
                  "scope": 1556,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "mapping(address => uint256)",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "type": "mapping(address => uint256)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1549,
                        "name": "ElementaryTypeName",
                        "src": "1140:7:12"
                      },
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1550,
                        "name": "ElementaryTypeName",
                        "src": "1151:7:12"
                      }
                    ],
                    "id": 1551,
                    "name": "Mapping",
                    "src": "1132:27:12"
                  }
                ],
                "id": 1552,
                "name": "VariableDeclaration",
                "src": "1132:38:12"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "entries",
                  "scope": 1556,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address[] storage pointer",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "length": null,
                      "type": "address[] storage pointer"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1553,
                        "name": "ElementaryTypeName",
                        "src": "1180:7:12"
                      }
                    ],
                    "id": 1554,
                    "name": "ArrayTypeName",
                    "src": "1180:9:12"
                  }
                ],
                "id": 1555,
                "name": "VariableDeclaration",
                "src": "1180:17:12"
              }
            ],
            "id": 1556,
            "name": "StructDefinition",
            "src": "1061:143:12"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "indexOf",
              "payable": false,
              "scope": 1733,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "self",
                      "scope": 1571,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct AddressSet.SetData storage pointer",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "SetData",
                          "referencedDeclaration": 1556,
                          "type": "struct AddressSet.SetData storage pointer"
                        },
                        "id": 1557,
                        "name": "UserDefinedTypeName",
                        "src": "1227:7:12"
                      }
                    ],
                    "id": 1558,
                    "name": "VariableDeclaration",
                    "src": "1227:20:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "a",
                      "scope": 1571,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1559,
                        "name": "ElementaryTypeName",
                        "src": "1249:7:12"
                      }
                    ],
                    "id": 1560,
                    "name": "VariableDeclaration",
                    "src": "1249:9:12"
                  }
                ],
                "id": 1561,
                "name": "ParameterList",
                "src": "1226:33:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 1571,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1562,
                        "name": "ElementaryTypeName",
                        "src": "1285:7:12"
                      }
                    ],
                    "id": 1563,
                    "name": "VariableDeclaration",
                    "src": "1285:7:12"
                  }
                ],
                "id": 1564,
                "name": "ParameterList",
                "src": "1284:9:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1564
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "entryIndex",
                              "referencedDeclaration": 1552,
                              "type": "mapping(address => uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1558,
                                  "type": "struct AddressSet.SetData storage pointer",
                                  "value": "self"
                                },
                                "id": 1565,
                                "name": "Identifier",
                                "src": "1311:4:12"
                              }
                            ],
                            "id": 1566,
                            "name": "MemberAccess",
                            "src": "1311:15:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1560,
                              "type": "address",
                              "value": "a"
                            },
                            "id": 1567,
                            "name": "Identifier",
                            "src": "1327:1:12"
                          }
                        ],
                        "id": 1568,
                        "name": "IndexAccess",
                        "src": "1311:18:12"
                      }
                    ],
                    "id": 1569,
                    "name": "Return",
                    "src": "1304:25:12"
                  }
                ],
                "id": 1570,
                "name": "Block",
                "src": "1294:42:12"
              }
            ],
            "id": 1571,
            "name": "FunctionDefinition",
            "src": "1210:126:12"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getAt",
              "payable": false,
              "scope": 1733,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "self",
                      "scope": 1586,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct AddressSet.SetData storage pointer",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "SetData",
                          "referencedDeclaration": 1556,
                          "type": "struct AddressSet.SetData storage pointer"
                        },
                        "id": 1572,
                        "name": "UserDefinedTypeName",
                        "src": "1357:7:12"
                      }
                    ],
                    "id": 1573,
                    "name": "VariableDeclaration",
                    "src": "1357:20:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "index",
                      "scope": 1586,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1574,
                        "name": "ElementaryTypeName",
                        "src": "1379:7:12"
                      }
                    ],
                    "id": 1575,
                    "name": "VariableDeclaration",
                    "src": "1379:13:12"
                  }
                ],
                "id": 1576,
                "name": "ParameterList",
                "src": "1356:37:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 1586,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1577,
                        "name": "ElementaryTypeName",
                        "src": "1419:7:12"
                      }
                    ],
                    "id": 1578,
                    "name": "VariableDeclaration",
                    "src": "1419:7:12"
                  }
                ],
                "id": 1579,
                "name": "ParameterList",
                "src": "1418:9:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1579
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "entries",
                              "referencedDeclaration": 1555,
                              "type": "address[] storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1573,
                                  "type": "struct AddressSet.SetData storage pointer",
                                  "value": "self"
                                },
                                "id": 1580,
                                "name": "Identifier",
                                "src": "1445:4:12"
                              }
                            ],
                            "id": 1581,
                            "name": "MemberAccess",
                            "src": "1445:12:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1575,
                              "type": "uint256",
                              "value": "index"
                            },
                            "id": 1582,
                            "name": "Identifier",
                            "src": "1458:5:12"
                          }
                        ],
                        "id": 1583,
                        "name": "IndexAccess",
                        "src": "1445:19:12"
                      }
                    ],
                    "id": 1584,
                    "name": "Return",
                    "src": "1438:26:12"
                  }
                ],
                "id": 1585,
                "name": "Block",
                "src": "1428:43:12"
              }
            ],
            "id": 1586,
            "name": "FunctionDefinition",
            "src": "1342:129:12"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "contains",
              "payable": false,
              "scope": 1733,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "self",
                      "scope": 1601,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct AddressSet.SetData storage pointer",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "SetData",
                          "referencedDeclaration": 1556,
                          "type": "struct AddressSet.SetData storage pointer"
                        },
                        "id": 1587,
                        "name": "UserDefinedTypeName",
                        "src": "1495:7:12"
                      }
                    ],
                    "id": 1588,
                    "name": "VariableDeclaration",
                    "src": "1495:20:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "a",
                      "scope": 1601,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1589,
                        "name": "ElementaryTypeName",
                        "src": "1517:7:12"
                      }
                    ],
                    "id": 1590,
                    "name": "VariableDeclaration",
                    "src": "1517:9:12"
                  }
                ],
                "id": 1591,
                "name": "ParameterList",
                "src": "1494:33:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 1601,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1592,
                        "name": "ElementaryTypeName",
                        "src": "1553:4:12"
                      }
                    ],
                    "id": 1593,
                    "name": "VariableDeclaration",
                    "src": "1553:4:12"
                  }
                ],
                "id": 1594,
                "name": "ParameterList",
                "src": "1552:6:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1594
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "entryExists",
                              "referencedDeclaration": 1548,
                              "type": "mapping(address => bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1588,
                                  "type": "struct AddressSet.SetData storage pointer",
                                  "value": "self"
                                },
                                "id": 1595,
                                "name": "Identifier",
                                "src": "1576:4:12"
                              }
                            ],
                            "id": 1596,
                            "name": "MemberAccess",
                            "src": "1576:16:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1590,
                              "type": "address",
                              "value": "a"
                            },
                            "id": 1597,
                            "name": "Identifier",
                            "src": "1593:1:12"
                          }
                        ],
                        "id": 1598,
                        "name": "IndexAccess",
                        "src": "1576:19:12"
                      }
                    ],
                    "id": 1599,
                    "name": "Return",
                    "src": "1569:26:12"
                  }
                ],
                "id": 1600,
                "name": "Block",
                "src": "1559:43:12"
              }
            ],
            "id": 1601,
            "name": "FunctionDefinition",
            "src": "1477:125:12"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "size",
              "payable": false,
              "scope": 1733,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "self",
                      "scope": 1613,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct AddressSet.SetData storage pointer",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "SetData",
                          "referencedDeclaration": 1556,
                          "type": "struct AddressSet.SetData storage pointer"
                        },
                        "id": 1602,
                        "name": "UserDefinedTypeName",
                        "src": "1622:7:12"
                      }
                    ],
                    "id": 1603,
                    "name": "VariableDeclaration",
                    "src": "1622:20:12"
                  }
                ],
                "id": 1604,
                "name": "ParameterList",
                "src": "1621:22:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 1613,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1605,
                        "name": "ElementaryTypeName",
                        "src": "1669:7:12"
                      }
                    ],
                    "id": 1606,
                    "name": "VariableDeclaration",
                    "src": "1669:7:12"
                  }
                ],
                "id": 1607,
                "name": "ParameterList",
                "src": "1668:9:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1607
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "length",
                          "referencedDeclaration": null,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "entries",
                              "referencedDeclaration": 1555,
                              "type": "address[] storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1603,
                                  "type": "struct AddressSet.SetData storage pointer",
                                  "value": "self"
                                },
                                "id": 1608,
                                "name": "Identifier",
                                "src": "1695:4:12"
                              }
                            ],
                            "id": 1609,
                            "name": "MemberAccess",
                            "src": "1695:12:12"
                          }
                        ],
                        "id": 1610,
                        "name": "MemberAccess",
                        "src": "1695:19:12"
                      }
                    ],
                    "id": 1611,
                    "name": "Return",
                    "src": "1688:26:12"
                  }
                ],
                "id": 1612,
                "name": "Block",
                "src": "1678:43:12"
              }
            ],
            "id": 1613,
            "name": "FunctionDefinition",
            "src": "1608:113:12"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "put",
              "payable": false,
              "scope": 1733,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "self",
                      "scope": 1656,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct AddressSet.SetData storage pointer",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "SetData",
                          "referencedDeclaration": 1556,
                          "type": "struct AddressSet.SetData storage pointer"
                        },
                        "id": 1614,
                        "name": "UserDefinedTypeName",
                        "src": "1740:7:12"
                      }
                    ],
                    "id": 1615,
                    "name": "VariableDeclaration",
                    "src": "1740:20:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "a",
                      "scope": 1656,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1616,
                        "name": "ElementaryTypeName",
                        "src": "1762:7:12"
                      }
                    ],
                    "id": 1617,
                    "name": "VariableDeclaration",
                    "src": "1762:9:12"
                  }
                ],
                "id": 1618,
                "name": "ParameterList",
                "src": "1739:33:12"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1619,
                "name": "ParameterList",
                "src": "1780:0:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!",
                          "prefix": true,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "entryExists",
                                  "referencedDeclaration": 1548,
                                  "type": "mapping(address => bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1615,
                                      "type": "struct AddressSet.SetData storage pointer",
                                      "value": "self"
                                    },
                                    "id": 1620,
                                    "name": "Identifier",
                                    "src": "1795:4:12"
                                  }
                                ],
                                "id": 1621,
                                "name": "MemberAccess",
                                "src": "1795:16:12"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1617,
                                  "type": "address",
                                  "value": "a"
                                },
                                "id": 1622,
                                "name": "Identifier",
                                "src": "1812:1:12"
                              }
                            ],
                            "id": 1623,
                            "name": "IndexAccess",
                            "src": "1795:19:12"
                          }
                        ],
                        "id": 1624,
                        "name": "UnaryOperation",
                        "src": "1794:20:12"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "entryExists",
                                          "referencedDeclaration": 1548,
                                          "type": "mapping(address => bool)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1615,
                                              "type": "struct AddressSet.SetData storage pointer",
                                              "value": "self"
                                            },
                                            "id": 1625,
                                            "name": "Identifier",
                                            "src": "1830:4:12"
                                          }
                                        ],
                                        "id": 1628,
                                        "name": "MemberAccess",
                                        "src": "1830:16:12"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1617,
                                          "type": "address",
                                          "value": "a"
                                        },
                                        "id": 1627,
                                        "name": "Identifier",
                                        "src": "1847:1:12"
                                      }
                                    ],
                                    "id": 1629,
                                    "name": "IndexAccess",
                                    "src": "1830:19:12"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "74727565",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "bool",
                                      "type": "bool",
                                      "value": "true"
                                    },
                                    "id": 1630,
                                    "name": "Literal",
                                    "src": "1852:4:12"
                                  }
                                ],
                                "id": 1631,
                                "name": "Assignment",
                                "src": "1830:26:12"
                              }
                            ],
                            "id": 1632,
                            "name": "ExpressionStatement",
                            "src": "1830:26:12"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "push",
                                      "referencedDeclaration": null,
                                      "type": "function (address) returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "entries",
                                          "referencedDeclaration": 1555,
                                          "type": "address[] storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1615,
                                              "type": "struct AddressSet.SetData storage pointer",
                                              "value": "self"
                                            },
                                            "id": 1633,
                                            "name": "Identifier",
                                            "src": "1870:4:12"
                                          }
                                        ],
                                        "id": 1636,
                                        "name": "MemberAccess",
                                        "src": "1870:12:12"
                                      }
                                    ],
                                    "id": 1637,
                                    "name": "MemberAccess",
                                    "src": "1870:17:12"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1617,
                                      "type": "address",
                                      "value": "a"
                                    },
                                    "id": 1638,
                                    "name": "Identifier",
                                    "src": "1888:1:12"
                                  }
                                ],
                                "id": 1639,
                                "name": "FunctionCall",
                                "src": "1870:20:12"
                              }
                            ],
                            "id": 1640,
                            "name": "ExpressionStatement",
                            "src": "1870:20:12"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "entryIndex",
                                          "referencedDeclaration": 1552,
                                          "type": "mapping(address => uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1615,
                                              "type": "struct AddressSet.SetData storage pointer",
                                              "value": "self"
                                            },
                                            "id": 1641,
                                            "name": "Identifier",
                                            "src": "1904:4:12"
                                          }
                                        ],
                                        "id": 1644,
                                        "name": "MemberAccess",
                                        "src": "1904:15:12"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1617,
                                          "type": "address",
                                          "value": "a"
                                        },
                                        "id": 1643,
                                        "name": "Identifier",
                                        "src": "1920:1:12"
                                      }
                                    ],
                                    "id": 1645,
                                    "name": "IndexAccess",
                                    "src": "1904:18:12"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "length",
                                          "referencedDeclaration": null,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "entries",
                                              "referencedDeclaration": 1555,
                                              "type": "address[] storage ref"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 1615,
                                                  "type": "struct AddressSet.SetData storage pointer",
                                                  "value": "self"
                                                },
                                                "id": 1646,
                                                "name": "Identifier",
                                                "src": "1925:4:12"
                                              }
                                            ],
                                            "id": 1647,
                                            "name": "MemberAccess",
                                            "src": "1925:12:12"
                                          }
                                        ],
                                        "id": 1648,
                                        "name": "MemberAccess",
                                        "src": "1925:19:12"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1649,
                                        "name": "Literal",
                                        "src": "1947:1:12"
                                      }
                                    ],
                                    "id": 1650,
                                    "name": "BinaryOperation",
                                    "src": "1925:23:12"
                                  }
                                ],
                                "id": 1651,
                                "name": "Assignment",
                                "src": "1904:44:12"
                              }
                            ],
                            "id": 1652,
                            "name": "ExpressionStatement",
                            "src": "1904:44:12"
                          }
                        ],
                        "id": 1653,
                        "name": "Block",
                        "src": "1816:143:12"
                      }
                    ],
                    "id": 1654,
                    "name": "IfStatement",
                    "src": "1790:169:12"
                  }
                ],
                "id": 1655,
                "name": "Block",
                "src": "1780:185:12"
              }
            ],
            "id": 1656,
            "name": "FunctionDefinition",
            "src": "1727:238:12"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "remove",
              "payable": false,
              "scope": 1733,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "self",
                      "scope": 1732,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct AddressSet.SetData storage pointer",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "SetData",
                          "referencedDeclaration": 1556,
                          "type": "struct AddressSet.SetData storage pointer"
                        },
                        "id": 1657,
                        "name": "UserDefinedTypeName",
                        "src": "1987:7:12"
                      }
                    ],
                    "id": 1658,
                    "name": "VariableDeclaration",
                    "src": "1987:20:12"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "a",
                      "scope": 1732,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1659,
                        "name": "ElementaryTypeName",
                        "src": "2009:7:12"
                      }
                    ],
                    "id": 1660,
                    "name": "VariableDeclaration",
                    "src": "2009:9:12"
                  }
                ],
                "id": 1661,
                "name": "ParameterList",
                "src": "1986:33:12"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1662,
                "name": "ParameterList",
                "src": "2027:0:12"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "entryExists",
                              "referencedDeclaration": 1548,
                              "type": "mapping(address => bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1658,
                                  "type": "struct AddressSet.SetData storage pointer",
                                  "value": "self"
                                },
                                "id": 1663,
                                "name": "Identifier",
                                "src": "2041:4:12"
                              }
                            ],
                            "id": 1664,
                            "name": "MemberAccess",
                            "src": "2041:16:12"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1660,
                              "type": "address",
                              "value": "a"
                            },
                            "id": 1665,
                            "name": "Identifier",
                            "src": "2058:1:12"
                          }
                        ],
                        "id": 1666,
                        "name": "IndexAccess",
                        "src": "2041:19:12"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                1668
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "name": "index",
                                  "scope": 1732,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 1667,
                                    "name": "ElementaryTypeName",
                                    "src": "2076:7:12"
                                  }
                                ],
                                "id": 1668,
                                "name": "VariableDeclaration",
                                "src": "2076:13:12"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "entryIndex",
                                      "referencedDeclaration": 1552,
                                      "type": "mapping(address => uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1658,
                                          "type": "struct AddressSet.SetData storage pointer",
                                          "value": "self"
                                        },
                                        "id": 1669,
                                        "name": "Identifier",
                                        "src": "2092:4:12"
                                      }
                                    ],
                                    "id": 1670,
                                    "name": "MemberAccess",
                                    "src": "2092:15:12"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1660,
                                      "type": "address",
                                      "value": "a"
                                    },
                                    "id": 1671,
                                    "name": "Identifier",
                                    "src": "2108:1:12"
                                  }
                                ],
                                "id": 1672,
                                "name": "IndexAccess",
                                "src": "2092:18:12"
                              }
                            ],
                            "id": 1673,
                            "name": "VariableDeclarationStatement",
                            "src": "2076:34:12"
                          },
                          {
                            "attributes": {
                              "falseBody": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "<",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1668,
                                      "type": "uint256",
                                      "value": "index"
                                    },
                                    "id": 1674,
                                    "name": "Identifier",
                                    "src": "2192:5:12"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_struct$_SetData_$1556_storage_ptr",
                                                  "typeString": "struct AddressSet.SetData storage pointer"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1613,
                                              "type": "function (struct AddressSet.SetData storage pointer) view returns (uint256)",
                                              "value": "size"
                                            },
                                            "id": 1675,
                                            "name": "Identifier",
                                            "src": "2200:4:12"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1658,
                                              "type": "struct AddressSet.SetData storage pointer",
                                              "value": "self"
                                            },
                                            "id": 1676,
                                            "name": "Identifier",
                                            "src": "2205:4:12"
                                          }
                                        ],
                                        "id": 1677,
                                        "name": "FunctionCall",
                                        "src": "2200:10:12"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1678,
                                        "name": "Literal",
                                        "src": "2213:1:12"
                                      }
                                    ],
                                    "id": 1679,
                                    "name": "BinaryOperation",
                                    "src": "2200:14:12"
                                  }
                                ],
                                "id": 1680,
                                "name": "BinaryOperation",
                                "src": "2192:22:12"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "assignments": [
                                        1682
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "name": "lastEntry",
                                          "scope": 1732,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "address",
                                          "value": null,
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address",
                                              "type": "address"
                                            },
                                            "id": 1681,
                                            "name": "ElementaryTypeName",
                                            "src": "2234:7:12"
                                          }
                                        ],
                                        "id": 1682,
                                        "name": "VariableDeclaration",
                                        "src": "2234:17:12"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "entries",
                                              "referencedDeclaration": 1555,
                                              "type": "address[] storage ref"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 1658,
                                                  "type": "struct AddressSet.SetData storage pointer",
                                                  "value": "self"
                                                },
                                                "id": 1683,
                                                "name": "Identifier",
                                                "src": "2254:4:12"
                                              }
                                            ],
                                            "id": 1684,
                                            "name": "MemberAccess",
                                            "src": "2254:12:12"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "-",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "uint256",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_struct$_SetData_$1556_storage_ptr",
                                                          "typeString": "struct AddressSet.SetData storage pointer"
                                                        }
                                                      ],
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1613,
                                                      "type": "function (struct AddressSet.SetData storage pointer) view returns (uint256)",
                                                      "value": "size"
                                                    },
                                                    "id": 1685,
                                                    "name": "Identifier",
                                                    "src": "2267:4:12"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1658,
                                                      "type": "struct AddressSet.SetData storage pointer",
                                                      "value": "self"
                                                    },
                                                    "id": 1686,
                                                    "name": "Identifier",
                                                    "src": "2272:4:12"
                                                  }
                                                ],
                                                "id": 1687,
                                                "name": "FunctionCall",
                                                "src": "2267:10:12"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 1688,
                                                "name": "Literal",
                                                "src": "2278:1:12"
                                              }
                                            ],
                                            "id": 1689,
                                            "name": "BinaryOperation",
                                            "src": "2267:12:12"
                                          }
                                        ],
                                        "id": 1690,
                                        "name": "IndexAccess",
                                        "src": "2254:26:12"
                                      }
                                    ],
                                    "id": 1691,
                                    "name": "VariableDeclarationStatement",
                                    "src": "2234:46:12"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "type": "address"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "entries",
                                                  "referencedDeclaration": 1555,
                                                  "type": "address[] storage ref"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1658,
                                                      "type": "struct AddressSet.SetData storage pointer",
                                                      "value": "self"
                                                    },
                                                    "id": 1692,
                                                    "name": "Identifier",
                                                    "src": "2298:4:12"
                                                  }
                                                ],
                                                "id": 1695,
                                                "name": "MemberAccess",
                                                "src": "2298:12:12"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 1668,
                                                  "type": "uint256",
                                                  "value": "index"
                                                },
                                                "id": 1694,
                                                "name": "Identifier",
                                                "src": "2311:5:12"
                                              }
                                            ],
                                            "id": 1696,
                                            "name": "IndexAccess",
                                            "src": "2298:19:12"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1682,
                                              "type": "address",
                                              "value": "lastEntry"
                                            },
                                            "id": 1697,
                                            "name": "Identifier",
                                            "src": "2320:9:12"
                                          }
                                        ],
                                        "id": 1698,
                                        "name": "Assignment",
                                        "src": "2298:31:12"
                                      }
                                    ],
                                    "id": 1699,
                                    "name": "ExpressionStatement",
                                    "src": "2298:31:12"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "entryIndex",
                                                  "referencedDeclaration": 1552,
                                                  "type": "mapping(address => uint256)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 1658,
                                                      "type": "struct AddressSet.SetData storage pointer",
                                                      "value": "self"
                                                    },
                                                    "id": 1700,
                                                    "name": "Identifier",
                                                    "src": "2347:4:12"
                                                  }
                                                ],
                                                "id": 1703,
                                                "name": "MemberAccess",
                                                "src": "2347:15:12"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 1682,
                                                  "type": "address",
                                                  "value": "lastEntry"
                                                },
                                                "id": 1702,
                                                "name": "Identifier",
                                                "src": "2363:9:12"
                                              }
                                            ],
                                            "id": 1704,
                                            "name": "IndexAccess",
                                            "src": "2347:26:12"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1668,
                                              "type": "uint256",
                                              "value": "index"
                                            },
                                            "id": 1705,
                                            "name": "Identifier",
                                            "src": "2376:5:12"
                                          }
                                        ],
                                        "id": 1706,
                                        "name": "Assignment",
                                        "src": "2347:34:12"
                                      }
                                    ],
                                    "id": 1707,
                                    "name": "ExpressionStatement",
                                    "src": "2347:34:12"
                                  }
                                ],
                                "id": 1708,
                                "name": "Block",
                                "src": "2216:180:12"
                              }
                            ],
                            "id": 1709,
                            "name": "IfStatement",
                            "src": "2188:208:12"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "--",
                                  "prefix": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "entries",
                                          "referencedDeclaration": 1555,
                                          "type": "address[] storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1658,
                                              "type": "struct AddressSet.SetData storage pointer",
                                              "value": "self"
                                            },
                                            "id": 1710,
                                            "name": "Identifier",
                                            "src": "2437:4:12"
                                          }
                                        ],
                                        "id": 1713,
                                        "name": "MemberAccess",
                                        "src": "2437:12:12"
                                      }
                                    ],
                                    "id": 1714,
                                    "name": "MemberAccess",
                                    "src": "2437:19:12"
                                  }
                                ],
                                "id": 1715,
                                "name": "UnaryOperation",
                                "src": "2437:21:12"
                              }
                            ],
                            "id": 1716,
                            "name": "ExpressionStatement",
                            "src": "2437:21:12"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "delete",
                                  "prefix": true,
                                  "type": "tuple()"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "entryExists",
                                          "referencedDeclaration": 1548,
                                          "type": "mapping(address => bool)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1658,
                                              "type": "struct AddressSet.SetData storage pointer",
                                              "value": "self"
                                            },
                                            "id": 1717,
                                            "name": "Identifier",
                                            "src": "2479:4:12"
                                          }
                                        ],
                                        "id": 1718,
                                        "name": "MemberAccess",
                                        "src": "2479:16:12"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1660,
                                          "type": "address",
                                          "value": "a"
                                        },
                                        "id": 1719,
                                        "name": "Identifier",
                                        "src": "2496:1:12"
                                      }
                                    ],
                                    "id": 1720,
                                    "name": "IndexAccess",
                                    "src": "2479:19:12"
                                  }
                                ],
                                "id": 1721,
                                "name": "UnaryOperation",
                                "src": "2472:26:12"
                              }
                            ],
                            "id": 1722,
                            "name": "ExpressionStatement",
                            "src": "2472:26:12"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "delete",
                                  "prefix": true,
                                  "type": "tuple()"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "entryIndex",
                                          "referencedDeclaration": 1552,
                                          "type": "mapping(address => uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1658,
                                              "type": "struct AddressSet.SetData storage pointer",
                                              "value": "self"
                                            },
                                            "id": 1723,
                                            "name": "Identifier",
                                            "src": "2519:4:12"
                                          }
                                        ],
                                        "id": 1724,
                                        "name": "MemberAccess",
                                        "src": "2519:15:12"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1660,
                                          "type": "address",
                                          "value": "a"
                                        },
                                        "id": 1725,
                                        "name": "Identifier",
                                        "src": "2535:1:12"
                                      }
                                    ],
                                    "id": 1726,
                                    "name": "IndexAccess",
                                    "src": "2519:18:12"
                                  }
                                ],
                                "id": 1727,
                                "name": "UnaryOperation",
                                "src": "2512:25:12"
                              }
                            ],
                            "id": 1728,
                            "name": "ExpressionStatement",
                            "src": "2512:25:12"
                          }
                        ],
                        "id": 1729,
                        "name": "Block",
                        "src": "2062:486:12"
                      }
                    ],
                    "id": 1730,
                    "name": "IfStatement",
                    "src": "2037:511:12"
                  }
                ],
                "id": 1731,
                "name": "Block",
                "src": "2027:527:12"
              }
            ],
            "id": 1732,
            "name": "FunctionDefinition",
            "src": "1971:583:12"
          }
        ],
        "id": 1733,
        "name": "ContractDefinition",
        "src": "1035:1521:12"
      }
    ],
    "id": 1734,
    "name": "SourceUnit",
    "src": "868:1688:12"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.18+commit.9cf6e910.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {},
      "address": "0xab6f805fb7754d19f82eb8fce07cf70f10c7a620"
    }
  },
  "schemaVersion": "1.0.1",
  "updatedAt": "2018-03-26T15:58:05.152Z"
}