{
  "contractName": "Types",
  "abi": [],
  "bytecode": "0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a7230582029c0c049c25503a90403a2e48869c0e98132fd44a135492e63477e335540ebe20029",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fd00a165627a7a7230582029c0c049c25503a90403a2e48869c0e98132fd44a135492e63477e335540ebe20029",
  "sourceMap": "26:4171:83:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24",
  "deployedSourceMap": "26:4171:83:-;;;;;;;;",
  "source": "pragma solidity ^0.4.19;\n\nlibrary Types {\n\n  struct MutableUint {\n    uint256 pre;\n    uint256 post;\n  }\n\n  struct MutableTimestamp {\n    MutableUint time;\n    uint256 in_units;\n  }\n\n  function advance_by(MutableTimestamp memory _original, uint256 _units)\n           internal\n           constant\n           returns (MutableTimestamp _transformed)\n  {\n    _transformed = _original;\n    require(now >= _original.time.pre);\n    uint256 _lapsed = now - _original.time.pre;\n    _transformed.in_units = _lapsed / _units;\n    uint256 _ticks = _transformed.in_units * _units;\n    if (_transformed.in_units == 0) {\n      _transformed.time.post = _original.time.pre;\n    } else {\n      _transformed.time = add(_transformed.time, _ticks);\n    }\n  }\n\n  // DEPRECATED\n  /*function add_two(MutableUint memory _original, uint256 _first, uint256 _second)\n           internal\n           constant\n           returns (MutableUint _transformed)\n  {\n    require((_original.pre + _first + _second) >= _original.pre);\n    _transformed = _original;\n    _transformed.post = (_original.pre + _first + _second);\n  }*/\n\n  function subtract_two(MutableUint memory _original, uint256 _first, uint256 _second)\n           internal\n           pure\n           returns (MutableUint _transformed)\n  {\n    require(_original.pre >= _first);\n    uint256 _after_first = _original.pre - _first;\n    require(_after_first >= _second);\n    _transformed = _original;\n    _original.post = (_after_first - _second);\n  }\n\n  function subtract_and_add(MutableUint memory _original, uint256 _to_subtract, uint256 _to_add)\n           internal\n           pure\n           returns (MutableUint _transformed)\n  {\n    require(_original.pre >= _to_subtract);\n    uint256 _after_subtract = _original.pre - _to_subtract;\n    require((_after_subtract + _to_add) >= _after_subtract);\n    _transformed.post = _after_subtract + _to_add;\n  }\n\n  /// DEPRECATED\n  /*function increment(MutableUint memory _original)\n           internal\n           constant\n           returns (MutableUint _transformed)\n  {\n    _transformed = _original;\n    _transformed.post = _original.pre + 1;\n  }*/\n\n  /// DEPRECATED\n  /*function decrement(MutableUint memory _original)\n           internal\n           constant\n           returns (MutableUint _transformed)\n  {\n    _transformed = _original;\n    require((_original.pre + 1) > _original.pre);\n    _transformed.post = _original.pre - 1;\n  }*/\n\n  function add_and_subtract(MutableUint memory _original, uint256 _to_add, uint256 _to_subtract)\n           internal\n           pure\n           returns (MutableUint _transformed)\n  {\n    require((_original.pre + _to_add) >= _original.pre);\n    uint256 _after_add = _original.pre + _to_add;\n    require(_after_add >= _to_subtract);\n    _transformed = _original;\n    _transformed.post = (_after_add - _to_subtract);\n  }\n\n  function add(MutableUint memory _original, uint256 _amount)\n           internal\n           pure\n           returns (MutableUint _transformed)\n  {\n    require((_original.pre + _amount) >= _original.pre);\n    _transformed = _original;\n    _transformed.post = _original.pre + _amount;\n  }\n\n  function subtract(MutableUint memory _original, uint256 _amount)\n           internal\n           pure\n           returns (MutableUint _transformed)\n  {\n    require(_amount <= _original.pre);\n    _transformed = _original;\n    _transformed.post = _original.pre - _amount;\n  }\n\n  function swap(MutableUint memory _original_a, MutableUint memory _original_b)\n           internal\n           pure\n           returns (MutableUint _transformed_a, MutableUint _transformed_b)\n  {\n    _transformed_a = _original_a;\n    _transformed_b = _original_b;\n    _transformed_a.post = _original_b.pre;\n    _transformed_b.post = _original_a.pre;\n  }\n\n  /*function transfer(MutableUint memory _original_from, MutableUint memory _original_to, uint256 _amount)\n           internal\n           constant\n           returns (MutableUint _transformed_from, MutableUint _transformed_to)\n  {\n    _original_from = _transformed_from;\n    _original_to = _transformed_to;\n    _transformed_from.post = subtract(_transformed_from, _amount).post;\n    _transformed_to.post = add(_transformed_to, _amount).post;\n  }*/\n\n}\n",
  "sourcePath": "@digix/solidity-core-libraries/contracts/Types.sol",
  "ast": {
    "absolutePath": "@digix/solidity-core-libraries/contracts/Types.sol",
    "exportedSymbols": {
      "Types": [
        25517
      ]
    },
    "id": 25518,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 25199,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".19"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:83"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 25517,
        "linearizedBaseContracts": [
          25517
        ],
        "name": "Types",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "Types.MutableUint",
            "id": 25204,
            "members": [
              {
                "constant": false,
                "id": 25201,
                "name": "pre",
                "nodeType": "VariableDeclaration",
                "scope": 25204,
                "src": "70:11:83",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 25200,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "70:7:83",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 25203,
                "name": "post",
                "nodeType": "VariableDeclaration",
                "scope": 25204,
                "src": "87:12:83",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 25202,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "87:7:83",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "MutableUint",
            "nodeType": "StructDefinition",
            "scope": 25517,
            "src": "45:59:83",
            "visibility": "public"
          },
          {
            "canonicalName": "Types.MutableTimestamp",
            "id": 25209,
            "members": [
              {
                "constant": false,
                "id": 25206,
                "name": "time",
                "nodeType": "VariableDeclaration",
                "scope": 25209,
                "src": "138:16:83",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                  "typeString": "struct Types.MutableUint"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 25205,
                  "name": "MutableUint",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 25204,
                  "src": "138:11:83",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                    "typeString": "struct Types.MutableUint"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 25208,
                "name": "in_units",
                "nodeType": "VariableDeclaration",
                "scope": 25209,
                "src": "160:16:83",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 25207,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "160:7:83",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "MutableTimestamp",
            "nodeType": "StructDefinition",
            "scope": 25517,
            "src": "108:73:83",
            "visibility": "public"
          },
          {
            "body": {
              "id": 25280,
              "nodeType": "Block",
              "src": "349:388:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25218,
                      "name": "_transformed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25216,
                      "src": "355:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                        "typeString": "struct Types.MutableTimestamp memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25219,
                      "name": "_original",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25211,
                      "src": "370:9:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                        "typeString": "struct Types.MutableTimestamp memory"
                      }
                    },
                    "src": "355:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                      "typeString": "struct Types.MutableTimestamp memory"
                    }
                  },
                  "id": 25221,
                  "nodeType": "ExpressionStatement",
                  "src": "355:24:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25227,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 25223,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26184,
                          "src": "393:3:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 25224,
                              "name": "_original",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25211,
                              "src": "400:9:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                "typeString": "struct Types.MutableTimestamp memory"
                              }
                            },
                            "id": 25225,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "time",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25206,
                            "src": "400:14:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25226,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "400:18:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "393:25:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25222,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "385:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "385:34:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25229,
                  "nodeType": "ExpressionStatement",
                  "src": "385:34:83"
                },
                {
                  "assignments": [
                    25231
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25231,
                      "name": "_lapsed",
                      "nodeType": "VariableDeclaration",
                      "scope": 25281,
                      "src": "425:15:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25230,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "425:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 25237,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 25232,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26184,
                      "src": "443:3:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 25233,
                          "name": "_original",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25211,
                          "src": "449:9:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 25234,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "time",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25206,
                        "src": "449:14:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25235,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "449:18:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "443:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "425:42:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25238,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25216,
                        "src": "473:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                          "typeString": "struct Types.MutableTimestamp memory"
                        }
                      },
                      "id": 25240,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "in_units",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25208,
                      "src": "473:21:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25243,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 25241,
                        "name": "_lapsed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25231,
                        "src": "497:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 25242,
                        "name": "_units",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25213,
                        "src": "507:6:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "497:16:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "473:40:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25245,
                  "nodeType": "ExpressionStatement",
                  "src": "473:40:83"
                },
                {
                  "assignments": [
                    25247
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25247,
                      "name": "_ticks",
                      "nodeType": "VariableDeclaration",
                      "scope": 25281,
                      "src": "519:14:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25246,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "519:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 25252,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25248,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25216,
                        "src": "536:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                          "typeString": "struct Types.MutableTimestamp memory"
                        }
                      },
                      "id": 25249,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "in_units",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25208,
                      "src": "536:21:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 25250,
                      "name": "_units",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25213,
                      "src": "560:6:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "536:30:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "519:47:83"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25253,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25216,
                        "src": "576:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                          "typeString": "struct Types.MutableTimestamp memory"
                        }
                      },
                      "id": 25254,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "in_units",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25208,
                      "src": "576:21:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 25255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "601:1:83",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "576:26:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 25278,
                    "nodeType": "Block",
                    "src": "668:65:83",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 25276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 25268,
                              "name": "_transformed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25216,
                              "src": "676:12:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                "typeString": "struct Types.MutableTimestamp memory"
                              }
                            },
                            "id": 25270,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "time",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25206,
                            "src": "676:17:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 25272,
                                  "name": "_transformed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25216,
                                  "src": "700:12:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                    "typeString": "struct Types.MutableTimestamp memory"
                                  }
                                },
                                "id": 25273,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "time",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25206,
                                "src": "700:17:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                  "typeString": "struct Types.MutableUint memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 25274,
                                "name": "_ticks",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25247,
                                "src": "719:6:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                  "typeString": "struct Types.MutableUint memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 25271,
                              "name": "add",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25452,
                              "src": "696:3:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$",
                                "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                              }
                            },
                            "id": 25275,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "696:30:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "src": "676:50:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 25277,
                        "nodeType": "ExpressionStatement",
                        "src": "676:50:83"
                      }
                    ]
                  },
                  "id": 25279,
                  "nodeType": "IfStatement",
                  "src": "572:161:83",
                  "trueBody": {
                    "id": 25267,
                    "nodeType": "Block",
                    "src": "604:58:83",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 25265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 25257,
                                "name": "_transformed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25216,
                                "src": "612:12:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                  "typeString": "struct Types.MutableTimestamp memory"
                                }
                              },
                              "id": 25260,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "time",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25206,
                              "src": "612:17:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 25261,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25203,
                            "src": "612:22:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 25262,
                                "name": "_original",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25211,
                                "src": "637:9:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                  "typeString": "struct Types.MutableTimestamp memory"
                                }
                              },
                              "id": 25263,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "time",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25206,
                              "src": "637:14:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 25264,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "637:18:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "612:43:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 25266,
                        "nodeType": "ExpressionStatement",
                        "src": "612:43:83"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 25281,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "advance_by",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25211,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25281,
                  "src": "205:33:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                    "typeString": "struct Types.MutableTimestamp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25210,
                    "name": "MutableTimestamp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25209,
                    "src": "205:16:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableTimestamp_$25209_storage_ptr",
                      "typeString": "struct Types.MutableTimestamp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25213,
                  "name": "_units",
                  "nodeType": "VariableDeclaration",
                  "scope": 25281,
                  "src": "240:14:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25212,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "240:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "204:51:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25216,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25281,
                  "src": "316:29:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                    "typeString": "struct Types.MutableTimestamp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25215,
                    "name": "MutableTimestamp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25209,
                    "src": "316:16:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableTimestamp_$25209_storage_ptr",
                      "typeString": "struct Types.MutableTimestamp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "315:31:83"
            },
            "scope": 25517,
            "src": "185:552:83",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25325,
              "nodeType": "Block",
              "src": "1263:209:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 25293,
                            "name": "_original",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25283,
                            "src": "1277:9:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25294,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "1277:13:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 25295,
                          "name": "_first",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25285,
                          "src": "1294:6:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1277:23:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25292,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1269:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1269:32:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25298,
                  "nodeType": "ExpressionStatement",
                  "src": "1269:32:83"
                },
                {
                  "assignments": [
                    25300
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25300,
                      "name": "_after_first",
                      "nodeType": "VariableDeclaration",
                      "scope": 25326,
                      "src": "1307:20:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25299,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1307:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 25305,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25301,
                        "name": "_original",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25283,
                        "src": "1330:9:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25302,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "1330:13:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 25303,
                      "name": "_first",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25285,
                      "src": "1346:6:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1330:22:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1307:45:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25309,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 25307,
                          "name": "_after_first",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25300,
                          "src": "1366:12:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 25308,
                          "name": "_second",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25287,
                          "src": "1382:7:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1366:23:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25306,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1358:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1358:32:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25311,
                  "nodeType": "ExpressionStatement",
                  "src": "1358:32:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25312,
                      "name": "_transformed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25290,
                      "src": "1396:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25313,
                      "name": "_original",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25283,
                      "src": "1411:9:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "1396:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25315,
                  "nodeType": "ExpressionStatement",
                  "src": "1396:24:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25316,
                        "name": "_original",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25283,
                        "src": "1426:9:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25318,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "1426:14:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 25321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 25319,
                            "name": "_after_first",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25300,
                            "src": "1444:12:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 25320,
                            "name": "_second",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25287,
                            "src": "1459:7:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1444:22:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 25322,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "1443:24:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1426:41:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25324,
                  "nodeType": "ExpressionStatement",
                  "src": "1426:41:83"
                }
              ]
            },
            "documentation": null,
            "id": 25326,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "subtract_two",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25283,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25326,
                  "src": "1116:28:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25282,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "1116:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25285,
                  "name": "_first",
                  "nodeType": "VariableDeclaration",
                  "scope": 25326,
                  "src": "1146:14:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25284,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1146:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25287,
                  "name": "_second",
                  "nodeType": "VariableDeclaration",
                  "scope": 25326,
                  "src": "1162:15:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1162:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1115:63:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25291,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25290,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25326,
                  "src": "1235:24:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25289,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "1235:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1234:26:83"
            },
            "scope": 25517,
            "src": "1094:378:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25368,
              "nodeType": "Block",
              "src": "1655:221:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 25338,
                            "name": "_original",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25328,
                            "src": "1669:9:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25339,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "1669:13:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 25340,
                          "name": "_to_subtract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25330,
                          "src": "1686:12:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1669:29:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25337,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1661:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1661:38:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25343,
                  "nodeType": "ExpressionStatement",
                  "src": "1661:38:83"
                },
                {
                  "assignments": [
                    25345
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25345,
                      "name": "_after_subtract",
                      "nodeType": "VariableDeclaration",
                      "scope": 25369,
                      "src": "1705:23:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25344,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1705:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 25350,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25346,
                        "name": "_original",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25328,
                        "src": "1731:9:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25347,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "1731:13:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 25348,
                      "name": "_to_subtract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25330,
                      "src": "1747:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1731:28:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1705:54:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 25354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 25352,
                                "name": "_after_subtract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25345,
                                "src": "1774:15:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 25353,
                                "name": "_to_add",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25332,
                                "src": "1792:7:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1774:25:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 25355,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1773:27:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 25356,
                          "name": "_after_subtract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25345,
                          "src": "1804:15:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1773:46:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25351,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1765:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1765:55:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25359,
                  "nodeType": "ExpressionStatement",
                  "src": "1765:55:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25360,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25335,
                        "src": "1826:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25362,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "1826:17:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25365,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 25363,
                        "name": "_after_subtract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25345,
                        "src": "1846:15:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 25364,
                        "name": "_to_add",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25332,
                        "src": "1864:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1846:25:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1826:45:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25367,
                  "nodeType": "ExpressionStatement",
                  "src": "1826:45:83"
                }
              ]
            },
            "documentation": null,
            "id": 25369,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "subtract_and_add",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25328,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25369,
                  "src": "1502:28:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25327,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "1502:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25330,
                  "name": "_to_subtract",
                  "nodeType": "VariableDeclaration",
                  "scope": 25369,
                  "src": "1532:20:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25329,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1532:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25332,
                  "name": "_to_add",
                  "nodeType": "VariableDeclaration",
                  "scope": 25369,
                  "src": "1554:15:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25331,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1554:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1501:69:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25335,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25369,
                  "src": "1627:24:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25334,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "1627:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1626:26:83"
            },
            "scope": 25517,
            "src": "1476:400:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25417,
              "nodeType": "Block",
              "src": "2589:236:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25388,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 25384,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 25381,
                                  "name": "_original",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25371,
                                  "src": "2604:9:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 25382,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25201,
                                "src": "2604:13:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 25383,
                                "name": "_to_add",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25373,
                                "src": "2620:7:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2604:23:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 25385,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2603:25:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 25386,
                            "name": "_original",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25371,
                            "src": "2632:9:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25387,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "2632:13:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2603:42:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25380,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2595:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2595:51:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25390,
                  "nodeType": "ExpressionStatement",
                  "src": "2595:51:83"
                },
                {
                  "assignments": [
                    25392
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25392,
                      "name": "_after_add",
                      "nodeType": "VariableDeclaration",
                      "scope": 25418,
                      "src": "2652:18:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25391,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2652:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 25397,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25393,
                        "name": "_original",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25371,
                        "src": "2673:9:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25394,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "2673:13:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 25395,
                      "name": "_to_add",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25373,
                      "src": "2689:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2673:23:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2652:44:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 25399,
                          "name": "_after_add",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25392,
                          "src": "2710:10:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 25400,
                          "name": "_to_subtract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25375,
                          "src": "2724:12:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2710:26:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25398,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2702:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2702:35:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25403,
                  "nodeType": "ExpressionStatement",
                  "src": "2702:35:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25404,
                      "name": "_transformed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25378,
                      "src": "2743:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25405,
                      "name": "_original",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25371,
                      "src": "2758:9:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "2743:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25407,
                  "nodeType": "ExpressionStatement",
                  "src": "2743:24:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25408,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25378,
                        "src": "2773:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25410,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "2773:17:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 25413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 25411,
                            "name": "_after_add",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25392,
                            "src": "2794:10:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 25412,
                            "name": "_to_subtract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25375,
                            "src": "2807:12:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2794:25:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 25414,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2793:27:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2773:47:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25416,
                  "nodeType": "ExpressionStatement",
                  "src": "2773:47:83"
                }
              ]
            },
            "documentation": "DEPRECATED",
            "id": 25418,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "add_and_subtract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25376,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25371,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25418,
                  "src": "2436:28:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25370,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "2436:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25373,
                  "name": "_to_add",
                  "nodeType": "VariableDeclaration",
                  "scope": 25418,
                  "src": "2466:15:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25372,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2466:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25375,
                  "name": "_to_subtract",
                  "nodeType": "VariableDeclaration",
                  "scope": 25418,
                  "src": "2483:20:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25374,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2483:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2435:69:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25378,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25418,
                  "src": "2561:24:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25377,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "2561:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2560:26:83"
            },
            "scope": 25517,
            "src": "2410:415:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25451,
              "nodeType": "Block",
              "src": "2973:141:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25435,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 25431,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 25428,
                                  "name": "_original",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25420,
                                  "src": "2988:9:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 25429,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25201,
                                "src": "2988:13:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 25430,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25422,
                                "src": "3004:7:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2988:23:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 25432,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2987:25:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 25433,
                            "name": "_original",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25420,
                            "src": "3016:9:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25434,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "3016:13:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2987:42:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25427,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2979:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2979:51:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25437,
                  "nodeType": "ExpressionStatement",
                  "src": "2979:51:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25438,
                      "name": "_transformed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25425,
                      "src": "3036:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25439,
                      "name": "_original",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25420,
                      "src": "3051:9:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "3036:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25441,
                  "nodeType": "ExpressionStatement",
                  "src": "3036:24:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25442,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25425,
                        "src": "3066:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25444,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "3066:17:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 25445,
                          "name": "_original",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25420,
                          "src": "3086:9:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 25446,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "pre",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25201,
                        "src": "3086:13:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 25447,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25422,
                        "src": "3102:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3086:23:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3066:43:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25450,
                  "nodeType": "ExpressionStatement",
                  "src": "3066:43:83"
                }
              ]
            },
            "documentation": null,
            "id": 25452,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "add",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25420,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25452,
                  "src": "2842:28:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25419,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "2842:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25422,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 25452,
                  "src": "2872:15:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25421,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2872:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2841:47:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25426,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25425,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25452,
                  "src": "2945:24:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25424,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "2945:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2944:26:83"
            },
            "scope": 25517,
            "src": "2829:285:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25481,
              "nodeType": "Block",
              "src": "3267:123:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 25462,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25456,
                          "src": "3281:7:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 25463,
                            "name": "_original",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25454,
                            "src": "3292:9:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25464,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "3292:13:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3281:24:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25461,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "3273:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3273:33:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25467,
                  "nodeType": "ExpressionStatement",
                  "src": "3273:33:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25468,
                      "name": "_transformed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25459,
                      "src": "3312:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25469,
                      "name": "_original",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25454,
                      "src": "3327:9:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "3312:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25471,
                  "nodeType": "ExpressionStatement",
                  "src": "3312:24:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25472,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25459,
                        "src": "3342:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25474,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "3342:17:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25478,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 25475,
                          "name": "_original",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25454,
                          "src": "3362:9:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 25476,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "pre",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25201,
                        "src": "3362:13:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 25477,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25456,
                        "src": "3378:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3362:23:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3342:43:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25480,
                  "nodeType": "ExpressionStatement",
                  "src": "3342:43:83"
                }
              ]
            },
            "documentation": null,
            "id": 25482,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "subtract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25454,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25482,
                  "src": "3136:28:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25453,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3136:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25456,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 25482,
                  "src": "3166:15:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3166:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3135:47:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25459,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25482,
                  "src": "3239:24:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25458,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3239:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3238:26:83"
            },
            "scope": 25517,
            "src": "3118:272:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25515,
              "nodeType": "Block",
              "src": "3586:159:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25493,
                      "name": "_transformed_a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25489,
                      "src": "3592:14:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25494,
                      "name": "_original_a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25484,
                      "src": "3609:11:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "3592:28:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25496,
                  "nodeType": "ExpressionStatement",
                  "src": "3592:28:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25497,
                      "name": "_transformed_b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25491,
                      "src": "3626:14:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25498,
                      "name": "_original_b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25486,
                      "src": "3643:11:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "3626:28:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25500,
                  "nodeType": "ExpressionStatement",
                  "src": "3626:28:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25506,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25501,
                        "name": "_transformed_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25489,
                        "src": "3660:14:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25503,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "3660:19:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25504,
                        "name": "_original_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25486,
                        "src": "3682:11:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25505,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "3682:15:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3660:37:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25507,
                  "nodeType": "ExpressionStatement",
                  "src": "3660:37:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25508,
                        "name": "_transformed_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25491,
                        "src": "3703:14:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25510,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "3703:19:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25511,
                        "name": "_original_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25484,
                        "src": "3725:11:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "3725:15:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3703:37:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25514,
                  "nodeType": "ExpressionStatement",
                  "src": "3703:37:83"
                }
              ]
            },
            "documentation": null,
            "id": 25516,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "swap",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25484,
                  "name": "_original_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 25516,
                  "src": "3408:30:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25483,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3408:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25486,
                  "name": "_original_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 25516,
                  "src": "3440:30:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25485,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3440:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3407:64:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25489,
                  "name": "_transformed_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 25516,
                  "src": "3528:26:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25488,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3528:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25491,
                  "name": "_transformed_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 25516,
                  "src": "3556:26:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25490,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3556:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3527:56:83"
            },
            "scope": 25517,
            "src": "3394:351:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 25518,
        "src": "26:4171:83"
      }
    ],
    "src": "0:4198:83"
  },
  "legacyAST": {
    "absolutePath": "@digix/solidity-core-libraries/contracts/Types.sol",
    "exportedSymbols": {
      "Types": [
        25517
      ]
    },
    "id": 25518,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 25199,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".19"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:83"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 25517,
        "linearizedBaseContracts": [
          25517
        ],
        "name": "Types",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "Types.MutableUint",
            "id": 25204,
            "members": [
              {
                "constant": false,
                "id": 25201,
                "name": "pre",
                "nodeType": "VariableDeclaration",
                "scope": 25204,
                "src": "70:11:83",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 25200,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "70:7:83",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 25203,
                "name": "post",
                "nodeType": "VariableDeclaration",
                "scope": 25204,
                "src": "87:12:83",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 25202,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "87:7:83",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "MutableUint",
            "nodeType": "StructDefinition",
            "scope": 25517,
            "src": "45:59:83",
            "visibility": "public"
          },
          {
            "canonicalName": "Types.MutableTimestamp",
            "id": 25209,
            "members": [
              {
                "constant": false,
                "id": 25206,
                "name": "time",
                "nodeType": "VariableDeclaration",
                "scope": 25209,
                "src": "138:16:83",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                  "typeString": "struct Types.MutableUint"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 25205,
                  "name": "MutableUint",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 25204,
                  "src": "138:11:83",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                    "typeString": "struct Types.MutableUint"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 25208,
                "name": "in_units",
                "nodeType": "VariableDeclaration",
                "scope": 25209,
                "src": "160:16:83",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 25207,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "160:7:83",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "MutableTimestamp",
            "nodeType": "StructDefinition",
            "scope": 25517,
            "src": "108:73:83",
            "visibility": "public"
          },
          {
            "body": {
              "id": 25280,
              "nodeType": "Block",
              "src": "349:388:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25218,
                      "name": "_transformed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25216,
                      "src": "355:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                        "typeString": "struct Types.MutableTimestamp memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25219,
                      "name": "_original",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25211,
                      "src": "370:9:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                        "typeString": "struct Types.MutableTimestamp memory"
                      }
                    },
                    "src": "355:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                      "typeString": "struct Types.MutableTimestamp memory"
                    }
                  },
                  "id": 25221,
                  "nodeType": "ExpressionStatement",
                  "src": "355:24:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25227,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 25223,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26184,
                          "src": "393:3:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 25224,
                              "name": "_original",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25211,
                              "src": "400:9:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                "typeString": "struct Types.MutableTimestamp memory"
                              }
                            },
                            "id": 25225,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "time",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25206,
                            "src": "400:14:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25226,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "400:18:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "393:25:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25222,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "385:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "385:34:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25229,
                  "nodeType": "ExpressionStatement",
                  "src": "385:34:83"
                },
                {
                  "assignments": [
                    25231
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25231,
                      "name": "_lapsed",
                      "nodeType": "VariableDeclaration",
                      "scope": 25281,
                      "src": "425:15:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25230,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "425:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 25237,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 25232,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26184,
                      "src": "443:3:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 25233,
                          "name": "_original",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25211,
                          "src": "449:9:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                            "typeString": "struct Types.MutableTimestamp memory"
                          }
                        },
                        "id": 25234,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "time",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25206,
                        "src": "449:14:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25235,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "449:18:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "443:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "425:42:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25238,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25216,
                        "src": "473:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                          "typeString": "struct Types.MutableTimestamp memory"
                        }
                      },
                      "id": 25240,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "in_units",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25208,
                      "src": "473:21:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25243,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 25241,
                        "name": "_lapsed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25231,
                        "src": "497:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 25242,
                        "name": "_units",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25213,
                        "src": "507:6:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "497:16:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "473:40:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25245,
                  "nodeType": "ExpressionStatement",
                  "src": "473:40:83"
                },
                {
                  "assignments": [
                    25247
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25247,
                      "name": "_ticks",
                      "nodeType": "VariableDeclaration",
                      "scope": 25281,
                      "src": "519:14:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25246,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "519:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 25252,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25248,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25216,
                        "src": "536:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                          "typeString": "struct Types.MutableTimestamp memory"
                        }
                      },
                      "id": 25249,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "in_units",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25208,
                      "src": "536:21:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 25250,
                      "name": "_units",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25213,
                      "src": "560:6:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "536:30:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "519:47:83"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25253,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25216,
                        "src": "576:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                          "typeString": "struct Types.MutableTimestamp memory"
                        }
                      },
                      "id": 25254,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "in_units",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25208,
                      "src": "576:21:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 25255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "601:1:83",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "576:26:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 25278,
                    "nodeType": "Block",
                    "src": "668:65:83",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 25276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 25268,
                              "name": "_transformed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25216,
                              "src": "676:12:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                "typeString": "struct Types.MutableTimestamp memory"
                              }
                            },
                            "id": 25270,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "time",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25206,
                            "src": "676:17:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 25272,
                                  "name": "_transformed",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25216,
                                  "src": "700:12:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                    "typeString": "struct Types.MutableTimestamp memory"
                                  }
                                },
                                "id": 25273,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "time",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25206,
                                "src": "700:17:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                  "typeString": "struct Types.MutableUint memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 25274,
                                "name": "_ticks",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25247,
                                "src": "719:6:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                  "typeString": "struct Types.MutableUint memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 25271,
                              "name": "add",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25452,
                              "src": "696:3:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_MutableUint_$25204_memory_ptr_$_t_uint256_$returns$_t_struct$_MutableUint_$25204_memory_ptr_$",
                                "typeString": "function (struct Types.MutableUint memory,uint256) pure returns (struct Types.MutableUint memory)"
                              }
                            },
                            "id": 25275,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "696:30:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "src": "676:50:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 25277,
                        "nodeType": "ExpressionStatement",
                        "src": "676:50:83"
                      }
                    ]
                  },
                  "id": 25279,
                  "nodeType": "IfStatement",
                  "src": "572:161:83",
                  "trueBody": {
                    "id": 25267,
                    "nodeType": "Block",
                    "src": "604:58:83",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 25265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 25257,
                                "name": "_transformed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25216,
                                "src": "612:12:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                  "typeString": "struct Types.MutableTimestamp memory"
                                }
                              },
                              "id": 25260,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "time",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25206,
                              "src": "612:17:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 25261,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "post",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25203,
                            "src": "612:22:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 25262,
                                "name": "_original",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25211,
                                "src": "637:9:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                                  "typeString": "struct Types.MutableTimestamp memory"
                                }
                              },
                              "id": 25263,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "time",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 25206,
                              "src": "637:14:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MutableUint_$25204_memory",
                                "typeString": "struct Types.MutableUint memory"
                              }
                            },
                            "id": 25264,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pre",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25201,
                            "src": "637:18:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "612:43:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 25266,
                        "nodeType": "ExpressionStatement",
                        "src": "612:43:83"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 25281,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "advance_by",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25214,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25211,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25281,
                  "src": "205:33:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                    "typeString": "struct Types.MutableTimestamp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25210,
                    "name": "MutableTimestamp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25209,
                    "src": "205:16:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableTimestamp_$25209_storage_ptr",
                      "typeString": "struct Types.MutableTimestamp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25213,
                  "name": "_units",
                  "nodeType": "VariableDeclaration",
                  "scope": 25281,
                  "src": "240:14:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25212,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "240:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "204:51:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25217,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25216,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25281,
                  "src": "316:29:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableTimestamp_$25209_memory_ptr",
                    "typeString": "struct Types.MutableTimestamp"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25215,
                    "name": "MutableTimestamp",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25209,
                    "src": "316:16:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableTimestamp_$25209_storage_ptr",
                      "typeString": "struct Types.MutableTimestamp"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "315:31:83"
            },
            "scope": 25517,
            "src": "185:552:83",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25325,
              "nodeType": "Block",
              "src": "1263:209:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 25293,
                            "name": "_original",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25283,
                            "src": "1277:9:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25294,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "1277:13:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 25295,
                          "name": "_first",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25285,
                          "src": "1294:6:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1277:23:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25292,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1269:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1269:32:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25298,
                  "nodeType": "ExpressionStatement",
                  "src": "1269:32:83"
                },
                {
                  "assignments": [
                    25300
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25300,
                      "name": "_after_first",
                      "nodeType": "VariableDeclaration",
                      "scope": 25326,
                      "src": "1307:20:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25299,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1307:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 25305,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25301,
                        "name": "_original",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25283,
                        "src": "1330:9:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25302,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "1330:13:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 25303,
                      "name": "_first",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25285,
                      "src": "1346:6:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1330:22:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1307:45:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25309,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 25307,
                          "name": "_after_first",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25300,
                          "src": "1366:12:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 25308,
                          "name": "_second",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25287,
                          "src": "1382:7:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1366:23:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25306,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1358:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1358:32:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25311,
                  "nodeType": "ExpressionStatement",
                  "src": "1358:32:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25312,
                      "name": "_transformed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25290,
                      "src": "1396:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25313,
                      "name": "_original",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25283,
                      "src": "1411:9:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "1396:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25315,
                  "nodeType": "ExpressionStatement",
                  "src": "1396:24:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25316,
                        "name": "_original",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25283,
                        "src": "1426:9:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25318,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "1426:14:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 25321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 25319,
                            "name": "_after_first",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25300,
                            "src": "1444:12:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 25320,
                            "name": "_second",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25287,
                            "src": "1459:7:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1444:22:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 25322,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "1443:24:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1426:41:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25324,
                  "nodeType": "ExpressionStatement",
                  "src": "1426:41:83"
                }
              ]
            },
            "documentation": null,
            "id": 25326,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "subtract_two",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25283,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25326,
                  "src": "1116:28:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25282,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "1116:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25285,
                  "name": "_first",
                  "nodeType": "VariableDeclaration",
                  "scope": 25326,
                  "src": "1146:14:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25284,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1146:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25287,
                  "name": "_second",
                  "nodeType": "VariableDeclaration",
                  "scope": 25326,
                  "src": "1162:15:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1162:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1115:63:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25291,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25290,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25326,
                  "src": "1235:24:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25289,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "1235:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1234:26:83"
            },
            "scope": 25517,
            "src": "1094:378:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25368,
              "nodeType": "Block",
              "src": "1655:221:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 25338,
                            "name": "_original",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25328,
                            "src": "1669:9:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25339,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "1669:13:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 25340,
                          "name": "_to_subtract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25330,
                          "src": "1686:12:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1669:29:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25337,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1661:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1661:38:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25343,
                  "nodeType": "ExpressionStatement",
                  "src": "1661:38:83"
                },
                {
                  "assignments": [
                    25345
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25345,
                      "name": "_after_subtract",
                      "nodeType": "VariableDeclaration",
                      "scope": 25369,
                      "src": "1705:23:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25344,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1705:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 25350,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25346,
                        "name": "_original",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25328,
                        "src": "1731:9:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25347,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "1731:13:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 25348,
                      "name": "_to_subtract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25330,
                      "src": "1747:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1731:28:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1705:54:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 25354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 25352,
                                "name": "_after_subtract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25345,
                                "src": "1774:15:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 25353,
                                "name": "_to_add",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25332,
                                "src": "1792:7:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1774:25:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 25355,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1773:27:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 25356,
                          "name": "_after_subtract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25345,
                          "src": "1804:15:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1773:46:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25351,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1765:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1765:55:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25359,
                  "nodeType": "ExpressionStatement",
                  "src": "1765:55:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25360,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25335,
                        "src": "1826:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25362,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "1826:17:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25365,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 25363,
                        "name": "_after_subtract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25345,
                        "src": "1846:15:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 25364,
                        "name": "_to_add",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25332,
                        "src": "1864:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1846:25:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1826:45:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25367,
                  "nodeType": "ExpressionStatement",
                  "src": "1826:45:83"
                }
              ]
            },
            "documentation": null,
            "id": 25369,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "subtract_and_add",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25328,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25369,
                  "src": "1502:28:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25327,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "1502:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25330,
                  "name": "_to_subtract",
                  "nodeType": "VariableDeclaration",
                  "scope": 25369,
                  "src": "1532:20:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25329,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1532:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25332,
                  "name": "_to_add",
                  "nodeType": "VariableDeclaration",
                  "scope": 25369,
                  "src": "1554:15:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25331,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1554:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1501:69:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25335,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25369,
                  "src": "1627:24:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25334,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "1627:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1626:26:83"
            },
            "scope": 25517,
            "src": "1476:400:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25417,
              "nodeType": "Block",
              "src": "2589:236:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25388,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 25384,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 25381,
                                  "name": "_original",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25371,
                                  "src": "2604:9:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 25382,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25201,
                                "src": "2604:13:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 25383,
                                "name": "_to_add",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25373,
                                "src": "2620:7:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2604:23:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 25385,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2603:25:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 25386,
                            "name": "_original",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25371,
                            "src": "2632:9:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25387,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "2632:13:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2603:42:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25380,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2595:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2595:51:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25390,
                  "nodeType": "ExpressionStatement",
                  "src": "2595:51:83"
                },
                {
                  "assignments": [
                    25392
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25392,
                      "name": "_after_add",
                      "nodeType": "VariableDeclaration",
                      "scope": 25418,
                      "src": "2652:18:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 25391,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2652:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 25397,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25393,
                        "name": "_original",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25371,
                        "src": "2673:9:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25394,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "2673:13:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 25395,
                      "name": "_to_add",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25373,
                      "src": "2689:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2673:23:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2652:44:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 25399,
                          "name": "_after_add",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25392,
                          "src": "2710:10:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 25400,
                          "name": "_to_subtract",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25375,
                          "src": "2724:12:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2710:26:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25398,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2702:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2702:35:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25403,
                  "nodeType": "ExpressionStatement",
                  "src": "2702:35:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25404,
                      "name": "_transformed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25378,
                      "src": "2743:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25405,
                      "name": "_original",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25371,
                      "src": "2758:9:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "2743:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25407,
                  "nodeType": "ExpressionStatement",
                  "src": "2743:24:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25408,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25378,
                        "src": "2773:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25410,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "2773:17:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 25413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 25411,
                            "name": "_after_add",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25392,
                            "src": "2794:10:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 25412,
                            "name": "_to_subtract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25375,
                            "src": "2807:12:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2794:25:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 25414,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2793:27:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2773:47:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25416,
                  "nodeType": "ExpressionStatement",
                  "src": "2773:47:83"
                }
              ]
            },
            "documentation": "DEPRECATED",
            "id": 25418,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "add_and_subtract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25376,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25371,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25418,
                  "src": "2436:28:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25370,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "2436:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25373,
                  "name": "_to_add",
                  "nodeType": "VariableDeclaration",
                  "scope": 25418,
                  "src": "2466:15:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25372,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2466:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25375,
                  "name": "_to_subtract",
                  "nodeType": "VariableDeclaration",
                  "scope": 25418,
                  "src": "2483:20:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25374,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2483:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2435:69:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25378,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25418,
                  "src": "2561:24:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25377,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "2561:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2560:26:83"
            },
            "scope": 25517,
            "src": "2410:415:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25451,
              "nodeType": "Block",
              "src": "2973:141:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25435,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 25431,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 25428,
                                  "name": "_original",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25420,
                                  "src": "2988:9:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                                    "typeString": "struct Types.MutableUint memory"
                                  }
                                },
                                "id": 25429,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "pre",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 25201,
                                "src": "2988:13:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 25430,
                                "name": "_amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25422,
                                "src": "3004:7:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2988:23:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 25432,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2987:25:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 25433,
                            "name": "_original",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25420,
                            "src": "3016:9:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25434,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "3016:13:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2987:42:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25427,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2979:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2979:51:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25437,
                  "nodeType": "ExpressionStatement",
                  "src": "2979:51:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25438,
                      "name": "_transformed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25425,
                      "src": "3036:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25439,
                      "name": "_original",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25420,
                      "src": "3051:9:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "3036:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25441,
                  "nodeType": "ExpressionStatement",
                  "src": "3036:24:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25442,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25425,
                        "src": "3066:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25444,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "3066:17:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 25445,
                          "name": "_original",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25420,
                          "src": "3086:9:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 25446,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "pre",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25201,
                        "src": "3086:13:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 25447,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25422,
                        "src": "3102:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3086:23:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3066:43:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25450,
                  "nodeType": "ExpressionStatement",
                  "src": "3066:43:83"
                }
              ]
            },
            "documentation": null,
            "id": 25452,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "add",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25420,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25452,
                  "src": "2842:28:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25419,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "2842:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25422,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 25452,
                  "src": "2872:15:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25421,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2872:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2841:47:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25426,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25425,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25452,
                  "src": "2945:24:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25424,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "2945:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2944:26:83"
            },
            "scope": 25517,
            "src": "2829:285:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25481,
              "nodeType": "Block",
              "src": "3267:123:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 25462,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25456,
                          "src": "3281:7:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 25463,
                            "name": "_original",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25454,
                            "src": "3292:9:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                              "typeString": "struct Types.MutableUint memory"
                            }
                          },
                          "id": 25464,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pre",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 25201,
                          "src": "3292:13:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3281:24:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 25461,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "3273:7:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 25466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3273:33:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25467,
                  "nodeType": "ExpressionStatement",
                  "src": "3273:33:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25468,
                      "name": "_transformed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25459,
                      "src": "3312:12:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25469,
                      "name": "_original",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25454,
                      "src": "3327:9:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "3312:24:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25471,
                  "nodeType": "ExpressionStatement",
                  "src": "3312:24:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25472,
                        "name": "_transformed",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25459,
                        "src": "3342:12:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25474,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "3342:17:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25478,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 25475,
                          "name": "_original",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25454,
                          "src": "3362:9:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                            "typeString": "struct Types.MutableUint memory"
                          }
                        },
                        "id": 25476,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "pre",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 25201,
                        "src": "3362:13:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 25477,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25456,
                        "src": "3378:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "3362:23:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3342:43:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25480,
                  "nodeType": "ExpressionStatement",
                  "src": "3342:43:83"
                }
              ]
            },
            "documentation": null,
            "id": 25482,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "subtract",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25454,
                  "name": "_original",
                  "nodeType": "VariableDeclaration",
                  "scope": 25482,
                  "src": "3136:28:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25453,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3136:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25456,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 25482,
                  "src": "3166:15:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3166:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3135:47:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25459,
                  "name": "_transformed",
                  "nodeType": "VariableDeclaration",
                  "scope": 25482,
                  "src": "3239:24:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25458,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3239:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3238:26:83"
            },
            "scope": 25517,
            "src": "3118:272:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25515,
              "nodeType": "Block",
              "src": "3586:159:83",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25493,
                      "name": "_transformed_a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25489,
                      "src": "3592:14:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25494,
                      "name": "_original_a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25484,
                      "src": "3609:11:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "3592:28:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25496,
                  "nodeType": "ExpressionStatement",
                  "src": "3592:28:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 25497,
                      "name": "_transformed_b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25491,
                      "src": "3626:14:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 25498,
                      "name": "_original_b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25486,
                      "src": "3643:11:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                        "typeString": "struct Types.MutableUint memory"
                      }
                    },
                    "src": "3626:28:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                      "typeString": "struct Types.MutableUint memory"
                    }
                  },
                  "id": 25500,
                  "nodeType": "ExpressionStatement",
                  "src": "3626:28:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25506,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25501,
                        "name": "_transformed_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25489,
                        "src": "3660:14:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25503,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "3660:19:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25504,
                        "name": "_original_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25486,
                        "src": "3682:11:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25505,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "3682:15:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3660:37:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25507,
                  "nodeType": "ExpressionStatement",
                  "src": "3660:37:83"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 25513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25508,
                        "name": "_transformed_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25491,
                        "src": "3703:14:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25510,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "post",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25203,
                      "src": "3703:19:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 25511,
                        "name": "_original_a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25484,
                        "src": "3725:11:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                          "typeString": "struct Types.MutableUint memory"
                        }
                      },
                      "id": 25512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pre",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 25201,
                      "src": "3725:15:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3703:37:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 25514,
                  "nodeType": "ExpressionStatement",
                  "src": "3703:37:83"
                }
              ]
            },
            "documentation": null,
            "id": 25516,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "swap",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25484,
                  "name": "_original_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 25516,
                  "src": "3408:30:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25483,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3408:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25486,
                  "name": "_original_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 25516,
                  "src": "3440:30:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25485,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3440:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3407:64:83"
            },
            "payable": false,
            "returnParameters": {
              "id": 25492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25489,
                  "name": "_transformed_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 25516,
                  "src": "3528:26:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25488,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3528:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25491,
                  "name": "_transformed_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 25516,
                  "src": "3556:26:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MutableUint_$25204_memory_ptr",
                    "typeString": "struct Types.MutableUint"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 25490,
                    "name": "MutableUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 25204,
                    "src": "3556:11:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MutableUint_$25204_storage_ptr",
                      "typeString": "struct Types.MutableUint"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3527:56:83"
            },
            "scope": 25517,
            "src": "3394:351:83",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 25518,
        "src": "26:4171:83"
      }
    ],
    "src": "0:4198:83"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.25+commit.59dbf8f1.Emscripten.clang"
  },
  "networks": {
    "42": {
      "events": {},
      "links": {},
      "address": "0xebcd21f0720aaaf9b7dc5fb0eed1d0839f263a5c",
      "transactionHash": "0x5fe785df2276fc79d8399d33647ffd14bc93d91afa22b4fbc4dc97f7a15b1e3d"
    }
  },
  "schemaVersion": "2.0.2",
  "updatedAt": "2020-03-16T08:48:57.309Z"
}